• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   */
19  struct 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  
30  struct 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   */
55  struct 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  /* initialisation functions */
67  extern int devices_init(void);
68  extern int buses_init(void);
69  extern int classes_init(void);
70  extern int firmware_init(void);
71  #ifdef CONFIG_SYS_HYPERVISOR
72  extern int hypervisor_init(void);
73  #else
hypervisor_init(void)74  static inline int hypervisor_init(void) { return 0; }
75  #endif
76  extern int platform_bus_init(void);
77  extern int system_bus_init(void);
78  extern int cpu_dev_init(void);
79  
80  extern int bus_add_device(struct device *dev);
81  extern void bus_attach_device(struct device *dev);
82  extern void bus_remove_device(struct device *dev);
83  
84  extern int bus_add_driver(struct device_driver *drv);
85  extern void bus_remove_driver(struct device_driver *drv);
86  
87  extern void driver_detach(struct device_driver *drv);
88  extern int driver_probe_device(struct device_driver *drv, struct device *dev);
89  
90  extern void sysdev_shutdown(void);
91  
92  extern char *make_class_name(const char *name, struct kobject *kobj);
93  
94  extern int devres_release_all(struct device *dev);
95  
96  extern struct kset *devices_kset;
97  
98  #if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
99  extern void module_add_driver(struct module *mod, struct device_driver *drv);
100  extern void module_remove_driver(struct device_driver *drv);
101  #else
module_add_driver(struct module * mod,struct device_driver * drv)102  static inline void module_add_driver(struct module *mod,
103  				     struct device_driver *drv) { }
module_remove_driver(struct device_driver * drv)104  static inline void module_remove_driver(struct device_driver *drv) { }
105  #endif
106