2005-10-13 20:54:41 +04:00
2007-11-02 05:41:16 +03: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-29 02:59:15 +03: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 20:54:41 +04:00
2008-01-23 02:17:41 +03:00
/**
* struct class_private - structure to hold the private to the driver core portions of the class structure .
*
2008-05-28 20:28:39 +04:00
* @ class_subsys - the struct kset that defines this class . This is the main kobject
2008-05-28 20:28:39 +04:00
* @ class_devices - list of devices associated with this class
2008-05-28 20:28:39 +04:00
* @ class_interfaces - list of class_interfaces associated with this class
2008-05-28 20:28:39 +04:00
* @ class_dirs - " glue " directory for virtual devices associated with this class
2008-05-28 20:28:39 +04:00
* @ class_mutex - mutex to protect the children , devices , and interfaces lists .
2008-01-23 02:17:41 +03:00
* @ class - pointer back to the struct class that this structure is associated
* with .
*
* This structure is the one that is the actual kobject allowing struct
* class to be statically allocated safely . Nothing outside of the driver
* core should ever touch these fields .
*/
struct class_private {
2008-05-28 20:28:39 +04:00
struct kset class_subsys ;
2008-08-25 21:50:19 +04:00
struct klist class_devices ;
2008-05-28 20:28:39 +04:00
struct list_head class_interfaces ;
2008-01-23 02:17:41 +03:00
struct kset class_dirs ;
2008-05-28 20:28:39 +04:00
struct mutex class_mutex ;
2008-01-23 02:17:41 +03:00
struct class * class ;
} ;
2008-05-28 20:28:39 +04:00
# define to_class(obj) \
container_of ( obj , struct class_private , class_subsys . kobj )
2008-01-23 02:17:41 +03:00
2008-12-16 23:23:36 +03:00
/**
* struct device_private - structure to hold the private to the driver core portions of the device structure .
*
2008-12-16 23:24:56 +03:00
* @ klist_children - klist containing all children of this device
* @ knode_parent - node in sibling list
2008-12-16 23:25:49 +03:00
* @ knode_driver - node in driver list
2008-12-16 23:26:21 +03:00
* @ knode_bus - node in bus list
2008-12-16 23:23:36 +03:00
* @ device - pointer back to the struct class that this structure is
* associated with .
*
* Nothing outside of the driver core should ever touch these fields .
*/
struct device_private {
2008-12-16 23:24:56 +03:00
struct klist klist_children ;
struct klist_node knode_parent ;
2008-12-16 23:25:49 +03:00
struct klist_node knode_driver ;
2008-12-16 23:26:21 +03:00
struct klist_node knode_bus ;
2008-12-16 23:23:36 +03:00
struct device * device ;
} ;
2008-12-16 23:24:56 +03:00
# define to_device_private_parent(obj) \
container_of ( obj , struct device_private , knode_parent )
2008-12-16 23:25:49 +03:00
# define to_device_private_driver(obj) \
container_of ( obj , struct device_private , knode_driver )
2008-12-16 23:26:21 +03:00
# define to_device_private_bus(obj) \
container_of ( obj , struct device_private , knode_bus )
2008-12-16 23:23:36 +03:00
2007-11-02 05:41:16 +03:00
/* initialisation functions */
2005-10-13 20:54:41 +04:00
extern int devices_init ( void ) ;
extern int buses_init ( void ) ;
extern int classes_init ( void ) ;
extern int firmware_init ( void ) ;
2006-05-09 14:53:49 +04:00
# ifdef CONFIG_SYS_HYPERVISOR
extern int hypervisor_init ( void ) ;
# else
static inline int hypervisor_init ( void ) { return 0 ; }
# endif
2005-10-13 20:54:41 +04:00
extern int platform_bus_init ( void ) ;
extern int system_bus_init ( void ) ;
extern int cpu_dev_init ( void ) ;
2008-01-25 09:50:12 +03:00
extern int bus_add_device ( struct device * dev ) ;
2009-07-30 23:27:18 +04:00
extern void bus_probe_device ( struct device * dev ) ;
2008-01-25 09:50:12 +03:00
extern void bus_remove_device ( struct device * dev ) ;
2005-04-17 02:20:36 +04:00
2008-01-25 09:50:12 +03:00
extern int bus_add_driver ( struct device_driver * drv ) ;
extern void bus_remove_driver ( struct device_driver * drv ) ;
2005-04-17 02:20:36 +04:00
2008-01-25 09:50:12 +03:00
extern void driver_detach ( struct device_driver * drv ) ;
extern int driver_probe_device ( struct device_driver * drv , struct device * dev ) ;
2009-01-21 18:27:47 +03:00
static inline int driver_match_device ( struct device_driver * drv ,
struct device * dev )
{
2009-03-27 16:50:00 +03:00
return drv - > bus - > match ? drv - > bus - > match ( dev , drv ) : 1 ;
2009-01-21 18:27:47 +03:00
}
2005-03-21 21:52:54 +03:00
2006-01-19 19:30:17 +03:00
extern void sysdev_shutdown ( void ) ;
2006-06-21 00:59:20 +04:00
extern char * make_class_name ( const char * name , struct kobject * kobj ) ;
2005-04-17 02:20:36 +04:00
2007-06-18 03:42:54 +04:00
extern int devres_release_all ( struct device * dev ) ;
2007-04-14 00:15:19 +04:00
2007-11-01 18:29:06 +03:00
extern struct kset * devices_kset ;
2007-11-28 23:23:18 +03:00
2007-12-31 21:05:43 +03:00
# if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
2007-11-28 23:23:18 +03: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