linux/drivers/base/base.h
<<
>>
Prefs
   1
   2/**
   3 * struct bus_type_private - structure to hold the private to the driver core portions of the bus_type structure.
   4 *
   5 * @subsys - the struct kset that defines this bus.  This is the main kobject
   6 * @drivers_kset - the list of drivers associated with this bus
   7 * @devices_kset - the list of devices associated with this bus
   8 * @klist_devices - the klist to iterate over the @devices_kset
   9 * @klist_drivers - the klist to iterate over the @drivers_kset
  10 * @bus_notifier - the bus notifier list for anything that cares about things
  11 * on this bus.
  12 * @bus - pointer back to the struct bus_type that this structure is associated
  13 * with.
  14 *
  15 * This structure is the one that is the actual kobject allowing struct
  16 * bus_type to be statically allocated safely.  Nothing outside of the driver
  17 * core should ever touch these fields.
  18 */
  19struct bus_type_private {
  20        struct kset subsys;
  21        struct kset *drivers_kset;
  22        struct kset *devices_kset;
  23        struct klist klist_devices;
  24        struct klist klist_drivers;
  25        struct blocking_notifier_head bus_notifier;
  26        unsigned int drivers_autoprobe:1;
  27        struct bus_type *bus;
  28};
  29
  30struct driver_private {
  31        struct kobject kobj;
  32        struct klist klist_devices;
  33        struct klist_node knode_bus;
  34        struct module_kobject *mkobj;
  35        struct device_driver *driver;
  36};
  37#define to_driver(obj) container_of(obj, struct driver_private, kobj)
  38
  39
  40/**
  41 * struct class_private - structure to hold the private to the driver core portions of the class structure.
  42 *
  43 * @class_subsys - the struct kset that defines this class.  This is the main kobject
  44 * @class_devices - list of devices associated with this class
  45 * @class_interfaces - list of class_interfaces associated with this class
  46 * @class_dirs - "glue" directory for virtual devices associated with this class
  47 * @class_mutex - mutex to protect the children, devices, and interfaces lists.
  48 * @class - pointer back to the struct class that this structure is associated
  49 * with.
  50 *
  51 * This structure is the one that is the actual kobject allowing struct
  52 * class to be statically allocated safely.  Nothing outside of the driver
  53 * core should ever touch these fields.
  54 */
  55struct class_private {
  56        struct kset class_subsys;
  57        struct klist class_devices;
  58        struct list_head class_interfaces;
  59        struct kset class_dirs;
  60        struct mutex class_mutex;
  61        struct class *class;
  62};
  63#define to_class(obj)   \
  64        container_of(obj, struct class_private, class_subsys.kobj)
  65
  66/**
  67 * struct device_private - structure to hold the private to the driver core portions of the device structure.
  68 *
  69 * @klist_children - klist containing all children of this device
  70 * @knode_parent - node in sibling list
  71 * @knode_driver - node in driver list
  72 * @knode_bus - node in bus list
  73 * @driver_data - private pointer for driver specific info.  Will turn into a
  74 * list soon.
  75 * @device - pointer back to the struct class that this structure is
  76 * associated with.
  77 *
  78 * Nothing outside of the driver core should ever touch these fields.
  79 */
  80struct device_private {
  81        struct klist klist_children;
  82        struct klist_node knode_parent;
  83        struct klist_node knode_driver;
  84        struct klist_node knode_bus;
  85        void *driver_data;
  86        struct device *device;
  87};
  88#define to_device_private_parent(obj)   \
  89        container_of(obj, struct device_private, knode_parent)
  90#define to_device_private_driver(obj)   \
  91        container_of(obj, struct device_private, knode_driver)
  92#define to_device_private_bus(obj)      \
  93        container_of(obj, struct device_private, knode_bus)
  94
  95extern int device_private_init(struct device *dev);
  96
  97/* initialisation functions */
  98extern int devices_init(void);
  99extern int buses_init(void);
 100extern int classes_init(void);
 101extern int firmware_init(void);
 102#ifdef CONFIG_SYS_HYPERVISOR
 103extern int hypervisor_init(void);
 104#else
 105static inline int hypervisor_init(void) { return 0; }
 106#endif
 107extern int platform_bus_init(void);
 108extern int system_bus_init(void);
 109extern int cpu_dev_init(void);
 110
 111extern int bus_add_device(struct device *dev);
 112extern void bus_probe_device(struct device *dev);
 113extern void bus_remove_device(struct device *dev);
 114
 115extern int bus_add_driver(struct device_driver *drv);
 116extern void bus_remove_driver(struct device_driver *drv);
 117
 118extern void driver_detach(struct device_driver *drv);
 119extern int driver_probe_device(struct device_driver *drv, struct device *dev);
 120static inline int driver_match_device(struct device_driver *drv,
 121                                      struct device *dev)
 122{
 123        return drv->bus->match ? drv->bus->match(dev, drv) : 1;
 124}
 125
 126extern void sysdev_shutdown(void);
 127
 128extern char *make_class_name(const char *name, struct kobject *kobj);
 129
 130extern int devres_release_all(struct device *dev);
 131
 132extern struct kset *devices_kset;
 133
 134#if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
 135extern void module_add_driver(struct module *mod, struct device_driver *drv);
 136extern void module_remove_driver(struct device_driver *drv);
 137#else
 138static inline void module_add_driver(struct module *mod,
 139                                     struct device_driver *drv) { }
 140static inline void module_remove_driver(struct device_driver *drv) { }
 141#endif
 142
 143#ifdef CONFIG_DEVTMPFS
 144extern int devtmpfs_init(void);
 145#else
 146static inline int devtmpfs_init(void) { return 0; }
 147#endif
 148