^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 2004-2009 Greg Kroah-Hartman <gregkh@suse.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (c) 2008-2012 Novell Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (c) 2012-2019 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (c) 2012-2019 Linux Foundation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * Core driver model functions and structures that should not be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * shared outside of the drivers/base/ directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/notifier.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * struct subsys_private - structure to hold the private to the driver core portions of the bus_type/class structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * @subsys - the struct kset that defines this subsystem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * @devices_kset - the subsystem's 'devices' directory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * @interfaces - list of subsystem interfaces associated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * @mutex - protect the devices, and interfaces lists.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * @drivers_kset - the list of drivers associated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * @klist_devices - the klist to iterate over the @devices_kset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * @klist_drivers - the klist to iterate over the @drivers_kset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * @bus_notifier - the bus notifier list for anything that cares about things
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * on this bus.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * @bus - pointer back to the struct bus_type that this structure is associated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * with.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * @glue_dirs - "glue" directory to put in-between the parent device to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * avoid namespace conflicts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * @class - pointer back to the struct class that this structure is associated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * with.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * This structure is the one that is the actual kobject allowing struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * bus_type/class to be statically allocated safely. Nothing outside of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) * driver core should ever touch these fields.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) struct subsys_private {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) struct kset subsys;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) struct kset *devices_kset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) struct list_head interfaces;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) struct mutex mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) struct kset *drivers_kset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) struct klist klist_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) struct klist klist_drivers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct blocking_notifier_head bus_notifier;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) unsigned int drivers_autoprobe:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) struct bus_type *bus;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) struct kset glue_dirs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) struct class *class;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define to_subsys_private(obj) container_of(obj, struct subsys_private, subsys.kobj)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) struct driver_private {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) struct kobject kobj;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) struct klist klist_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) struct klist_node knode_bus;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) struct module_kobject *mkobj;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct device_driver *driver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define to_driver(obj) container_of(obj, struct driver_private, kobj)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) * struct device_private - structure to hold the private to the driver core portions of the device structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) * @klist_children - klist containing all children of this device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) * @knode_parent - node in sibling list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) * @knode_driver - node in driver list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) * @knode_bus - node in bus list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) * @knode_class - node in class list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) * @deferred_probe - entry in deferred_probe_list which is used to retry the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) * binding of drivers which were unable to get all the resources needed by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) * the device; typically because it depends on another driver getting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) * probed first.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) * @async_driver - pointer to device driver awaiting probe via async_probe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) * @device - pointer back to the struct device that this structure is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) * associated with.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) * @dead - This device is currently either in the process of or has been
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) * removed from the system. Any asynchronous events scheduled for this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) * device should exit without taking any action.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) * Nothing outside of the driver core should ever touch these fields.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) struct device_private {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) struct klist klist_children;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) struct klist_node knode_parent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) struct klist_node knode_driver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) struct klist_node knode_bus;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) struct klist_node knode_class;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) struct list_head deferred_probe;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) struct device_driver *async_driver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) char *deferred_probe_reason;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) struct device *device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) u8 dead:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define to_device_private_parent(obj) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) container_of(obj, struct device_private, knode_parent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define to_device_private_driver(obj) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) container_of(obj, struct device_private, knode_driver)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define to_device_private_bus(obj) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) container_of(obj, struct device_private, knode_bus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define to_device_private_class(obj) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) container_of(obj, struct device_private, knode_class)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) /* initialisation functions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) extern int devices_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) extern int buses_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) extern int classes_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) extern int firmware_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #ifdef CONFIG_SYS_HYPERVISOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) extern int hypervisor_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) static inline int hypervisor_init(void) { return 0; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) extern int platform_bus_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) extern void cpu_dev_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) extern void container_dev_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) struct kobject *virtual_device_parent(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) extern int bus_add_device(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) extern void bus_probe_device(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) extern void bus_remove_device(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) extern int bus_add_driver(struct device_driver *drv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) extern void bus_remove_driver(struct device_driver *drv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) extern void device_release_driver_internal(struct device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) struct device_driver *drv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) struct device *parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) extern void driver_detach(struct device_driver *drv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) extern int driver_probe_device(struct device_driver *drv, struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) extern void driver_deferred_probe_del(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) extern void device_set_deferred_probe_reason(const struct device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) struct va_format *vaf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) static inline int driver_match_device(struct device_driver *drv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) struct device *dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) return drv->bus->match ? drv->bus->match(dev, drv) : 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) extern bool driver_allows_async_probing(struct device_driver *drv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) extern int driver_add_groups(struct device_driver *drv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) const struct attribute_group **groups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) extern void driver_remove_groups(struct device_driver *drv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) const struct attribute_group **groups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) int device_driver_attach(struct device_driver *drv, struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) void device_driver_detach(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) extern char *make_class_name(const char *name, struct kobject *kobj);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) extern int devres_release_all(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) extern void device_block_probing(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) extern void device_unblock_probing(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /* /sys/devices directory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) extern struct kset *devices_kset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) extern void devices_kset_move_last(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) extern void module_add_driver(struct module *mod, struct device_driver *drv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) extern void module_remove_driver(struct device_driver *drv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) static inline void module_add_driver(struct module *mod,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) struct device_driver *drv) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) static inline void module_remove_driver(struct device_driver *drv) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #ifdef CONFIG_DEVTMPFS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) extern int devtmpfs_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) static inline int devtmpfs_init(void) { return 0; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) /* Device links support */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) extern int device_links_read_lock(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) extern void device_links_read_unlock(int idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) extern int device_links_read_lock_held(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) extern int device_links_check_suppliers(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) extern void device_links_driver_bound(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) extern void device_links_driver_cleanup(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) extern void device_links_no_driver(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) extern bool device_links_busy(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) extern void device_links_unbind_consumers(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) /* device pm support */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) void device_pm_move_to_tail(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #ifdef CONFIG_DEVTMPFS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) int devtmpfs_create_node(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) int devtmpfs_delete_node(struct device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) static inline int devtmpfs_create_node(struct device *dev) { return 0; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) static inline int devtmpfs_delete_node(struct device *dev) { return 0; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #endif