2005-10-13 17:54:41 +01:00
2007-11-01 19:41:16 -07:00
/**
* struct bus_type_private - structure to hold the private to the driver core portions of the bus_type structure .
*
* @ subsys - the struct kset that defines this bus . This is the main kobject
* @ drivers_kset - the list of drivers associated with this bus
* @ devices_kset - the list of devices associated with this bus
* @ klist_devices - the klist to iterate over the @ devices_kset
* @ klist_drivers - the klist to iterate over the @ drivers_kset
* @ bus_notifier - the bus notifier list for anything that cares about things
* on this bus .
* @ bus - pointer back to the struct bus_type that this structure is associated
* with .
*
* This structure is the one that is the actual kobject allowing struct
* bus_type to be statically allocated safely . Nothing outside of the driver
* core should ever touch these fields .
*/
struct bus_type_private {
struct kset subsys ;
struct kset * drivers_kset ;
struct kset * devices_kset ;
struct klist klist_devices ;
struct klist klist_drivers ;
struct blocking_notifier_head bus_notifier ;
unsigned int drivers_autoprobe : 1 ;
struct bus_type * bus ;
} ;
2007-11-28 15:59:15 -08:00
struct driver_private {
struct kobject kobj ;
struct klist klist_devices ;
struct klist_node knode_bus ;
struct module_kobject * mkobj ;
struct device_driver * driver ;
} ;
# define to_driver(obj) container_of(obj, struct driver_private, kobj)
2005-10-13 17:54:41 +01:00
2007-11-01 19:41:16 -07:00
/* initialisation functions */
2005-10-13 17:54:41 +01:00
extern int devices_init ( void ) ;
extern int buses_init ( void ) ;
extern int classes_init ( void ) ;
extern int firmware_init ( void ) ;
2006-05-09 12:53:49 +02:00
# ifdef CONFIG_SYS_HYPERVISOR
extern int hypervisor_init ( void ) ;
# else
static inline int hypervisor_init ( void ) { return 0 ; }
# endif
2005-10-13 17:54:41 +01:00
extern int platform_bus_init ( void ) ;
extern int system_bus_init ( void ) ;
extern int cpu_dev_init ( void ) ;
2008-01-24 22:50:12 -08:00
extern int bus_add_device ( struct device * dev ) ;
extern void bus_attach_device ( struct device * dev ) ;
extern void bus_remove_device ( struct device * dev ) ;
2005-04-16 15:20:36 -07:00
2008-01-24 22:50:12 -08:00
extern int bus_add_driver ( struct device_driver * drv ) ;
extern void bus_remove_driver ( struct device_driver * drv ) ;
2005-04-16 15:20:36 -07:00
2008-01-24 22:50:12 -08:00
extern void driver_detach ( struct device_driver * drv ) ;
extern int driver_probe_device ( struct device_driver * drv , struct device * dev ) ;
2005-03-21 10:52:54 -08:00
2006-01-19 17:30:17 +01:00
extern void sysdev_shutdown ( void ) ;
extern int sysdev_suspend ( pm_message_t state ) ;
extern int sysdev_resume ( void ) ;
2006-06-20 13:59:20 -07:00
extern char * make_class_name ( const char * name , struct kobject * kobj ) ;
2005-04-16 15:20:36 -07:00
2007-06-18 01:42:54 +02:00
extern int devres_release_all ( struct device * dev ) ;
2007-04-13 13:15:19 -07:00
2007-11-01 09:29:06 -06:00
extern struct kset * devices_kset ;
2007-11-28 12:23:18 -08:00
2007-12-31 10:05:43 -08:00
# if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
2007-11-28 12:23:18 -08:00
extern void module_add_driver ( struct module * mod , struct device_driver * drv ) ;
extern void module_remove_driver ( struct device_driver * drv ) ;
# else
static inline void module_add_driver ( struct module * mod ,
struct device_driver * drv ) { }
static inline void module_remove_driver ( struct device_driver * drv ) { }
# endif