cregit-Linux how code gets into the kernel

Release 4.7 include/linux/transport_class.h

Directory: include/linux
/*
 * transport_class.h - a generic container for all transport classes
 *
 * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com>
 *
 * This file is licensed under GPLv2
 */

#ifndef _TRANSPORT_CLASS_H_

#define _TRANSPORT_CLASS_H_

#include <linux/device.h>
#include <linux/bug.h>
#include <linux/attribute_container.h>

struct transport_container;


struct transport_class {
	
struct class class;
	
int (*setup)(struct transport_container *, struct device *,
		     struct device *);
	
int (*configure)(struct transport_container *, struct device *,
			 struct device *);
	
int (*remove)(struct transport_container *, struct device *,
		      struct device *);
};


#define DECLARE_TRANSPORT_CLASS(cls, nm, su, rm, cfg)			\
struct transport_class cls = {                                          \
        .class = {                                                      \
                .name = nm,                                             \
        },                                                              \
        .setup = su,                                                    \
        .remove = rm,                                                   \
        .configure = cfg,                                               \
}



struct anon_transport_class {
	
struct transport_class tclass;
	
struct attribute_container container;
};


#define DECLARE_ANON_TRANSPORT_CLASS(cls, mtch, cfg)		\
struct anon_transport_class cls = {                             \
        .tclass = {                                             \
                .configure = cfg,                               \
        },                                                      \
        . container = {                                         \
                .match = mtch,                                  \
        },                                                      \
}


#define class_to_transport_class(x) \
	container_of(x, struct transport_class, class)


struct transport_container {
	
struct attribute_container ac;
	
const struct attribute_group *statistics;
};


#define attribute_container_to_transport_container(x) \
	container_of(x, struct transport_container, ac)

void transport_remove_device(struct device *);
void transport_add_device(struct device *);
void transport_setup_device(struct device *);
void transport_configure_device(struct device *);
void transport_destroy_device(struct device *);


static inline void transport_register_device(struct device *dev) { transport_setup_device(dev); transport_add_device(dev); }

Contributors

PersonTokensPropCommitsCommitProp
james bottomleyjames bottomley22100.00%1100.00%
Total22100.00%1100.00%


static inline void transport_unregister_device(struct device *dev) { transport_remove_device(dev); transport_destroy_device(dev); }

Contributors

PersonTokensPropCommitsCommitProp
james bottomleyjames bottomley22100.00%1100.00%
Total22100.00%1100.00%


static inline int transport_container_register(struct transport_container *tc) { return attribute_container_register(&tc->ac); }

Contributors

PersonTokensPropCommitsCommitProp
james bottomleyjames bottomley21100.00%1100.00%
Total21100.00%1100.00%


static inline void transport_container_unregister(struct transport_container *tc) { if (unlikely(attribute_container_unregister(&tc->ac))) BUG(); }

Contributors

PersonTokensPropCommitsCommitProp
james bottomleyjames bottomley28100.00%2100.00%
Total28100.00%2100.00%

int transport_class_register(struct transport_class *); int anon_transport_class_register(struct anon_transport_class *); void transport_class_unregister(struct transport_class *); void anon_transport_class_unregister(struct anon_transport_class *); #endif

Overall Contributors

PersonTokensPropCommitsCommitProp
james bottomleyjames bottomley31797.84%457.14%
tony jonestony jones30.93%114.29%
paul gortmakerpaul gortmaker30.93%114.29%
david brownelldavid brownell10.31%114.29%
Total324100.00%7100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}