Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * transport_class.h - a generic container for all transport classes
  3  *
  4  * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com>
  5  *
  6  * This file is licensed under GPLv2
  7  */
  8 
  9 #ifndef _TRANSPORT_CLASS_H_
 10 #define _TRANSPORT_CLASS_H_
 11 
 12 #include <linux/device.h>
 13 #include <linux/attribute_container.h>
 14 
 15 struct transport_container;
 16 
 17 struct transport_class {
 18         struct class class;
 19         int (*setup)(struct transport_container *, struct device *,
 20                      struct device *);
 21         int (*configure)(struct transport_container *, struct device *,
 22                          struct device *);
 23         int (*remove)(struct transport_container *, struct device *,
 24                       struct device *);
 25 };
 26 
 27 #define DECLARE_TRANSPORT_CLASS(cls, nm, su, rm, cfg)                   \
 28 struct transport_class cls = {                                          \
 29         .class = {                                                      \
 30                 .name = nm,                                             \
 31         },                                                              \
 32         .setup = su,                                                    \
 33         .remove = rm,                                                   \
 34         .configure = cfg,                                               \
 35 }
 36 
 37 
 38 struct anon_transport_class {
 39         struct transport_class tclass;
 40         struct attribute_container container;
 41 };
 42 
 43 #define DECLARE_ANON_TRANSPORT_CLASS(cls, mtch, cfg)            \
 44 struct anon_transport_class cls = {                             \
 45         .tclass = {                                             \
 46                 .configure = cfg,                               \
 47         },                                                      \
 48         . container = {                                         \
 49                 .match = mtch,                                  \
 50         },                                                      \
 51 }
 52 
 53 #define class_to_transport_class(x) \
 54         container_of(x, struct transport_class, class)
 55 
 56 struct transport_container {
 57         struct attribute_container ac;
 58         struct attribute_group *statistics;
 59 };
 60 
 61 #define attribute_container_to_transport_container(x) \
 62         container_of(x, struct transport_container, ac)
 63 
 64 void transport_remove_device(struct device *);
 65 void transport_add_device(struct device *);
 66 void transport_setup_device(struct device *);
 67 void transport_configure_device(struct device *);
 68 void transport_destroy_device(struct device *);
 69 
 70 static inline void
 71 transport_register_device(struct device *dev)
 72 {
 73         transport_setup_device(dev);
 74         transport_add_device(dev);
 75 }
 76 
 77 static inline void
 78 transport_unregister_device(struct device *dev)
 79 {
 80         transport_remove_device(dev);
 81         transport_destroy_device(dev);
 82 }
 83 
 84 static inline int transport_container_register(struct transport_container *tc)
 85 {
 86         return attribute_container_register(&tc->ac);
 87 }
 88 
 89 static inline void transport_container_unregister(struct transport_container *tc)
 90 {
 91         if (unlikely(attribute_container_unregister(&tc->ac)))
 92                 BUG();
 93 }
 94 
 95 int transport_class_register(struct transport_class *);
 96 int anon_transport_class_register(struct anon_transport_class *);
 97 void transport_class_unregister(struct transport_class *);
 98 void anon_transport_class_unregister(struct anon_transport_class *);
 99 
100 
101 #endif
102 
  This page was automatically generated by the LXR engine.