base.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * struct bus_type_private - structure to hold the private to the driver core portions of the bus_type structure.
  3. *
  4. * @subsys - the struct kset that defines this bus. This is the main kobject
  5. * @drivers_kset - the list of drivers associated with this bus
  6. * @devices_kset - the list of devices associated with this bus
  7. * @klist_devices - the klist to iterate over the @devices_kset
  8. * @klist_drivers - the klist to iterate over the @drivers_kset
  9. * @bus_notifier - the bus notifier list for anything that cares about things
  10. * on this bus.
  11. * @bus - pointer back to the struct bus_type that this structure is associated
  12. * with.
  13. *
  14. * This structure is the one that is the actual kobject allowing struct
  15. * bus_type to be statically allocated safely. Nothing outside of the driver
  16. * core should ever touch these fields.
  17. */
  18. struct bus_type_private {
  19. struct kset subsys;
  20. struct kset *drivers_kset;
  21. struct kset *devices_kset;
  22. struct klist klist_devices;
  23. struct klist klist_drivers;
  24. struct blocking_notifier_head bus_notifier;
  25. unsigned int drivers_autoprobe:1;
  26. struct bus_type *bus;
  27. };
  28. /* initialisation functions */
  29. extern int devices_init(void);
  30. extern int buses_init(void);
  31. extern int classes_init(void);
  32. extern int firmware_init(void);
  33. #ifdef CONFIG_SYS_HYPERVISOR
  34. extern int hypervisor_init(void);
  35. #else
  36. static inline int hypervisor_init(void) { return 0; }
  37. #endif
  38. extern int platform_bus_init(void);
  39. extern int system_bus_init(void);
  40. extern int cpu_dev_init(void);
  41. extern int attribute_container_init(void);
  42. extern int bus_add_device(struct device * dev);
  43. extern void bus_attach_device(struct device * dev);
  44. extern void bus_remove_device(struct device * dev);
  45. extern int bus_add_driver(struct device_driver *);
  46. extern void bus_remove_driver(struct device_driver *);
  47. extern void driver_detach(struct device_driver * drv);
  48. extern int driver_probe_device(struct device_driver *, struct device *);
  49. extern void sysdev_shutdown(void);
  50. extern int sysdev_suspend(pm_message_t state);
  51. extern int sysdev_resume(void);
  52. static inline struct class_device *to_class_dev(struct kobject *obj)
  53. {
  54. return container_of(obj, struct class_device, kobj);
  55. }
  56. static inline
  57. struct class_device_attribute *to_class_dev_attr(struct attribute *_attr)
  58. {
  59. return container_of(_attr, struct class_device_attribute, attr);
  60. }
  61. extern char *make_class_name(const char *name, struct kobject *kobj);
  62. extern int devres_release_all(struct device *dev);
  63. extern struct kset *devices_kset;
  64. #ifdef CONFIG_MODULES
  65. extern void module_add_driver(struct module *mod, struct device_driver *drv);
  66. extern void module_remove_driver(struct device_driver *drv);
  67. #else
  68. static inline void module_add_driver(struct module *mod,
  69. struct device_driver *drv) { }
  70. static inline void module_remove_driver(struct device_driver *drv) { }
  71. #endif