1  // SPDX-License-Identifier: GPL-2.0
2  /*
3   * device.h - generic, centralized driver model
4   *
5   * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org>
6   * Copyright (c) 2004-2009 Greg Kroah-Hartman <gregkh@suse.de>
7   * Copyright (c) 2008-2009 Novell Inc.
8   *
9   * See Documentation/driver-api/driver-model/ for more information.
10   */
11  
12  #ifndef _DEVICE_H_
13  #define _DEVICE_H_
14  
15  #include <linux/dev_printk.h>
16  #include <linux/energy_model.h>
17  #include <linux/ioport.h>
18  #include <linux/kobject.h>
19  #include <linux/klist.h>
20  #include <linux/list.h>
21  #include <linux/lockdep.h>
22  #include <linux/compiler.h>
23  #include <linux/types.h>
24  #include <linux/mutex.h>
25  #include <linux/pm.h>
26  #include <linux/atomic.h>
27  #include <linux/uidgid.h>
28  #include <linux/gfp.h>
29  #include <linux/overflow.h>
30  #include <linux/device/bus.h>
31  #include <linux/device/class.h>
32  #include <linux/device/driver.h>
33  #include <linux/cleanup.h>
34  #include <asm/device.h>
35  
36  struct device;
37  struct device_private;
38  struct device_driver;
39  struct driver_private;
40  struct module;
41  struct class;
42  struct subsys_private;
43  struct device_node;
44  struct fwnode_handle;
45  struct iommu_group;
46  struct dev_pin_info;
47  struct dev_iommu;
48  struct msi_device_data;
49  
50  /**
51   * struct subsys_interface - interfaces to device functions
52   * @name:       name of the device function
53   * @subsys:     subsystem of the devices to attach to
54   * @node:       the list of functions registered at the subsystem
55   * @add_dev:    device hookup to device function handler
56   * @remove_dev: device hookup to device function handler
57   *
58   * Simple interfaces attached to a subsystem. Multiple interfaces can
59   * attach to a subsystem and its devices. Unlike drivers, they do not
60   * exclusively claim or control devices. Interfaces usually represent
61   * a specific functionality of a subsystem/class of devices.
62   */
63  struct subsys_interface {
64  	const char *name;
65  	const struct bus_type *subsys;
66  	struct list_head node;
67  	int (*add_dev)(struct device *dev, struct subsys_interface *sif);
68  	void (*remove_dev)(struct device *dev, struct subsys_interface *sif);
69  };
70  
71  int subsys_interface_register(struct subsys_interface *sif);
72  void subsys_interface_unregister(struct subsys_interface *sif);
73  
74  int subsys_system_register(const struct bus_type *subsys,
75  			   const struct attribute_group **groups);
76  int subsys_virtual_register(const struct bus_type *subsys,
77  			    const struct attribute_group **groups);
78  
79  /*
80   * The type of device, "struct device" is embedded in. A class
81   * or bus can contain devices of different types
82   * like "partitions" and "disks", "mouse" and "event".
83   * This identifies the device type and carries type-specific
84   * information, equivalent to the kobj_type of a kobject.
85   * If "name" is specified, the uevent will contain it in
86   * the DEVTYPE variable.
87   */
88  struct device_type {
89  	const char *name;
90  	const struct attribute_group **groups;
91  	int (*uevent)(const struct device *dev, struct kobj_uevent_env *env);
92  	char *(*devnode)(const struct device *dev, umode_t *mode,
93  			 kuid_t *uid, kgid_t *gid);
94  	void (*release)(struct device *dev);
95  
96  	const struct dev_pm_ops *pm;
97  };
98  
99  /**
100   * struct device_attribute - Interface for exporting device attributes.
101   * @attr: sysfs attribute definition.
102   * @show: Show handler.
103   * @store: Store handler.
104   */
105  struct device_attribute {
106  	struct attribute	attr;
107  	ssize_t (*show)(struct device *dev, struct device_attribute *attr,
108  			char *buf);
109  	ssize_t (*store)(struct device *dev, struct device_attribute *attr,
110  			 const char *buf, size_t count);
111  };
112  
113  /**
114   * struct dev_ext_attribute - Exported device attribute with extra context.
115   * @attr: Exported device attribute.
116   * @var: Pointer to context.
117   */
118  struct dev_ext_attribute {
119  	struct device_attribute attr;
120  	void *var;
121  };
122  
123  ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr,
124  			  char *buf);
125  ssize_t device_store_ulong(struct device *dev, struct device_attribute *attr,
126  			   const char *buf, size_t count);
127  ssize_t device_show_int(struct device *dev, struct device_attribute *attr,
128  			char *buf);
129  ssize_t device_store_int(struct device *dev, struct device_attribute *attr,
130  			 const char *buf, size_t count);
131  ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
132  			char *buf);
133  ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
134  			 const char *buf, size_t count);
135  ssize_t device_show_string(struct device *dev, struct device_attribute *attr,
136  			   char *buf);
137  
138  /**
139   * DEVICE_ATTR - Define a device attribute.
140   * @_name: Attribute name.
141   * @_mode: File mode.
142   * @_show: Show handler. Optional, but mandatory if attribute is readable.
143   * @_store: Store handler. Optional, but mandatory if attribute is writable.
144   *
145   * Convenience macro for defining a struct device_attribute.
146   *
147   * For example, ``DEVICE_ATTR(foo, 0644, foo_show, foo_store);`` expands to:
148   *
149   * .. code-block:: c
150   *
151   *	struct device_attribute dev_attr_foo = {
152   *		.attr	= { .name = "foo", .mode = 0644 },
153   *		.show	= foo_show,
154   *		.store	= foo_store,
155   *	};
156   */
157  #define DEVICE_ATTR(_name, _mode, _show, _store) \
158  	struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
159  
160  /**
161   * DEVICE_ATTR_PREALLOC - Define a preallocated device attribute.
162   * @_name: Attribute name.
163   * @_mode: File mode.
164   * @_show: Show handler. Optional, but mandatory if attribute is readable.
165   * @_store: Store handler. Optional, but mandatory if attribute is writable.
166   *
167   * Like DEVICE_ATTR(), but ``SYSFS_PREALLOC`` is set on @_mode.
168   */
169  #define DEVICE_ATTR_PREALLOC(_name, _mode, _show, _store) \
170  	struct device_attribute dev_attr_##_name = \
171  		__ATTR_PREALLOC(_name, _mode, _show, _store)
172  
173  /**
174   * DEVICE_ATTR_RW - Define a read-write device attribute.
175   * @_name: Attribute name.
176   *
177   * Like DEVICE_ATTR(), but @_mode is 0644, @_show is <_name>_show,
178   * and @_store is <_name>_store.
179   */
180  #define DEVICE_ATTR_RW(_name) \
181  	struct device_attribute dev_attr_##_name = __ATTR_RW(_name)
182  
183  /**
184   * DEVICE_ATTR_ADMIN_RW - Define an admin-only read-write device attribute.
185   * @_name: Attribute name.
186   *
187   * Like DEVICE_ATTR_RW(), but @_mode is 0600.
188   */
189  #define DEVICE_ATTR_ADMIN_RW(_name) \
190  	struct device_attribute dev_attr_##_name = __ATTR_RW_MODE(_name, 0600)
191  
192  /**
193   * DEVICE_ATTR_RO - Define a readable device attribute.
194   * @_name: Attribute name.
195   *
196   * Like DEVICE_ATTR(), but @_mode is 0444 and @_show is <_name>_show.
197   */
198  #define DEVICE_ATTR_RO(_name) \
199  	struct device_attribute dev_attr_##_name = __ATTR_RO(_name)
200  
201  /**
202   * DEVICE_ATTR_ADMIN_RO - Define an admin-only readable device attribute.
203   * @_name: Attribute name.
204   *
205   * Like DEVICE_ATTR_RO(), but @_mode is 0400.
206   */
207  #define DEVICE_ATTR_ADMIN_RO(_name) \
208  	struct device_attribute dev_attr_##_name = __ATTR_RO_MODE(_name, 0400)
209  
210  /**
211   * DEVICE_ATTR_WO - Define an admin-only writable device attribute.
212   * @_name: Attribute name.
213   *
214   * Like DEVICE_ATTR(), but @_mode is 0200 and @_store is <_name>_store.
215   */
216  #define DEVICE_ATTR_WO(_name) \
217  	struct device_attribute dev_attr_##_name = __ATTR_WO(_name)
218  
219  /**
220   * DEVICE_ULONG_ATTR - Define a device attribute backed by an unsigned long.
221   * @_name: Attribute name.
222   * @_mode: File mode.
223   * @_var: Identifier of unsigned long.
224   *
225   * Like DEVICE_ATTR(), but @_show and @_store are automatically provided
226   * such that reads and writes to the attribute from userspace affect @_var.
227   */
228  #define DEVICE_ULONG_ATTR(_name, _mode, _var) \
229  	struct dev_ext_attribute dev_attr_##_name = \
230  		{ __ATTR(_name, _mode, device_show_ulong, device_store_ulong), &(_var) }
231  
232  /**
233   * DEVICE_INT_ATTR - Define a device attribute backed by an int.
234   * @_name: Attribute name.
235   * @_mode: File mode.
236   * @_var: Identifier of int.
237   *
238   * Like DEVICE_ULONG_ATTR(), but @_var is an int.
239   */
240  #define DEVICE_INT_ATTR(_name, _mode, _var) \
241  	struct dev_ext_attribute dev_attr_##_name = \
242  		{ __ATTR(_name, _mode, device_show_int, device_store_int), &(_var) }
243  
244  /**
245   * DEVICE_BOOL_ATTR - Define a device attribute backed by a bool.
246   * @_name: Attribute name.
247   * @_mode: File mode.
248   * @_var: Identifier of bool.
249   *
250   * Like DEVICE_ULONG_ATTR(), but @_var is a bool.
251   */
252  #define DEVICE_BOOL_ATTR(_name, _mode, _var) \
253  	struct dev_ext_attribute dev_attr_##_name = \
254  		{ __ATTR(_name, _mode, device_show_bool, device_store_bool), &(_var) }
255  
256  /**
257   * DEVICE_STRING_ATTR_RO - Define a device attribute backed by a r/o string.
258   * @_name: Attribute name.
259   * @_mode: File mode.
260   * @_var: Identifier of string.
261   *
262   * Like DEVICE_ULONG_ATTR(), but @_var is a string. Because the length of the
263   * string allocation is unknown, the attribute must be read-only.
264   */
265  #define DEVICE_STRING_ATTR_RO(_name, _mode, _var) \
266  	struct dev_ext_attribute dev_attr_##_name = \
267  		{ __ATTR(_name, (_mode) & ~0222, device_show_string, NULL), (_var) }
268  
269  #define DEVICE_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
270  	struct device_attribute dev_attr_##_name =		\
271  		__ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
272  
273  int device_create_file(struct device *device,
274  		       const struct device_attribute *entry);
275  void device_remove_file(struct device *dev,
276  			const struct device_attribute *attr);
277  bool device_remove_file_self(struct device *dev,
278  			     const struct device_attribute *attr);
279  int __must_check device_create_bin_file(struct device *dev,
280  					const struct bin_attribute *attr);
281  void device_remove_bin_file(struct device *dev,
282  			    const struct bin_attribute *attr);
283  
284  /* device resource management */
285  typedef void (*dr_release_t)(struct device *dev, void *res);
286  typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data);
287  
288  void *__devres_alloc_node(dr_release_t release, size_t size, gfp_t gfp,
289  			  int nid, const char *name) __malloc;
290  #define devres_alloc(release, size, gfp) \
291  	__devres_alloc_node(release, size, gfp, NUMA_NO_NODE, #release)
292  #define devres_alloc_node(release, size, gfp, nid) \
293  	__devres_alloc_node(release, size, gfp, nid, #release)
294  
295  void devres_for_each_res(struct device *dev, dr_release_t release,
296  			 dr_match_t match, void *match_data,
297  			 void (*fn)(struct device *, void *, void *),
298  			 void *data);
299  void devres_free(void *res);
300  void devres_add(struct device *dev, void *res);
301  void *devres_find(struct device *dev, dr_release_t release,
302  		  dr_match_t match, void *match_data);
303  void *devres_get(struct device *dev, void *new_res,
304  		 dr_match_t match, void *match_data);
305  void *devres_remove(struct device *dev, dr_release_t release,
306  		    dr_match_t match, void *match_data);
307  int devres_destroy(struct device *dev, dr_release_t release,
308  		   dr_match_t match, void *match_data);
309  int devres_release(struct device *dev, dr_release_t release,
310  		   dr_match_t match, void *match_data);
311  
312  /* devres group */
313  void * __must_check devres_open_group(struct device *dev, void *id, gfp_t gfp);
314  void devres_close_group(struct device *dev, void *id);
315  void devres_remove_group(struct device *dev, void *id);
316  int devres_release_group(struct device *dev, void *id);
317  
318  /* managed devm_k.alloc/kfree for device drivers */
319  void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp) __alloc_size(2);
320  void *devm_krealloc(struct device *dev, void *ptr, size_t size,
321  		    gfp_t gfp) __must_check __realloc_size(3);
322  __printf(3, 0) char *devm_kvasprintf(struct device *dev, gfp_t gfp,
323  				     const char *fmt, va_list ap) __malloc;
324  __printf(3, 4) char *devm_kasprintf(struct device *dev, gfp_t gfp,
325  				    const char *fmt, ...) __malloc;
devm_kzalloc(struct device * dev,size_t size,gfp_t gfp)326  static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
327  {
328  	return devm_kmalloc(dev, size, gfp | __GFP_ZERO);
329  }
devm_kmalloc_array(struct device * dev,size_t n,size_t size,gfp_t flags)330  static inline void *devm_kmalloc_array(struct device *dev,
331  				       size_t n, size_t size, gfp_t flags)
332  {
333  	size_t bytes;
334  
335  	if (unlikely(check_mul_overflow(n, size, &bytes)))
336  		return NULL;
337  
338  	return devm_kmalloc(dev, bytes, flags);
339  }
devm_kcalloc(struct device * dev,size_t n,size_t size,gfp_t flags)340  static inline void *devm_kcalloc(struct device *dev,
341  				 size_t n, size_t size, gfp_t flags)
342  {
343  	return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
344  }
345  static inline __realloc_size(3, 4) void * __must_check
devm_krealloc_array(struct device * dev,void * p,size_t new_n,size_t new_size,gfp_t flags)346  devm_krealloc_array(struct device *dev, void *p, size_t new_n, size_t new_size, gfp_t flags)
347  {
348  	size_t bytes;
349  
350  	if (unlikely(check_mul_overflow(new_n, new_size, &bytes)))
351  		return NULL;
352  
353  	return devm_krealloc(dev, p, bytes, flags);
354  }
355  
356  void devm_kfree(struct device *dev, const void *p);
357  char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp) __malloc;
358  const char *devm_kstrdup_const(struct device *dev, const char *s, gfp_t gfp);
359  void *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp)
360  	__realloc_size(3);
361  
362  unsigned long devm_get_free_pages(struct device *dev,
363  				  gfp_t gfp_mask, unsigned int order);
364  void devm_free_pages(struct device *dev, unsigned long addr);
365  
366  #ifdef CONFIG_HAS_IOMEM
367  void __iomem *devm_ioremap_resource(struct device *dev,
368  				    const struct resource *res);
369  void __iomem *devm_ioremap_resource_wc(struct device *dev,
370  				       const struct resource *res);
371  
372  void __iomem *devm_of_iomap(struct device *dev,
373  			    struct device_node *node, int index,
374  			    resource_size_t *size);
375  #else
376  
377  static inline
devm_ioremap_resource(struct device * dev,const struct resource * res)378  void __iomem *devm_ioremap_resource(struct device *dev,
379  				    const struct resource *res)
380  {
381  	return ERR_PTR(-EINVAL);
382  }
383  
384  static inline
devm_ioremap_resource_wc(struct device * dev,const struct resource * res)385  void __iomem *devm_ioremap_resource_wc(struct device *dev,
386  				       const struct resource *res)
387  {
388  	return ERR_PTR(-EINVAL);
389  }
390  
391  static inline
devm_of_iomap(struct device * dev,struct device_node * node,int index,resource_size_t * size)392  void __iomem *devm_of_iomap(struct device *dev,
393  			    struct device_node *node, int index,
394  			    resource_size_t *size)
395  {
396  	return ERR_PTR(-EINVAL);
397  }
398  
399  #endif
400  
401  /* allows to add/remove a custom action to devres stack */
402  void devm_remove_action(struct device *dev, void (*action)(void *), void *data);
403  void devm_release_action(struct device *dev, void (*action)(void *), void *data);
404  
405  int __devm_add_action(struct device *dev, void (*action)(void *), void *data, const char *name);
406  #define devm_add_action(dev, action, data) \
407  	__devm_add_action(dev, action, data, #action)
408  
__devm_add_action_or_reset(struct device * dev,void (* action)(void *),void * data,const char * name)409  static inline int __devm_add_action_or_reset(struct device *dev, void (*action)(void *),
410  					     void *data, const char *name)
411  {
412  	int ret;
413  
414  	ret = __devm_add_action(dev, action, data, name);
415  	if (ret)
416  		action(data);
417  
418  	return ret;
419  }
420  #define devm_add_action_or_reset(dev, action, data) \
421  	__devm_add_action_or_reset(dev, action, data, #action)
422  
423  /**
424   * devm_alloc_percpu - Resource-managed alloc_percpu
425   * @dev: Device to allocate per-cpu memory for
426   * @type: Type to allocate per-cpu memory for
427   *
428   * Managed alloc_percpu. Per-cpu memory allocated with this function is
429   * automatically freed on driver detach.
430   *
431   * RETURNS:
432   * Pointer to allocated memory on success, NULL on failure.
433   */
434  #define devm_alloc_percpu(dev, type)      \
435  	((typeof(type) __percpu *)__devm_alloc_percpu((dev), sizeof(type), \
436  						      __alignof__(type)))
437  
438  void __percpu *__devm_alloc_percpu(struct device *dev, size_t size,
439  				   size_t align);
440  void devm_free_percpu(struct device *dev, void __percpu *pdata);
441  
442  struct device_dma_parameters {
443  	/*
444  	 * a low level driver may set these to teach IOMMU code about
445  	 * sg limitations.
446  	 */
447  	unsigned int max_segment_size;
448  	unsigned int min_align_mask;
449  	unsigned long segment_boundary_mask;
450  };
451  
452  /**
453   * enum device_link_state - Device link states.
454   * @DL_STATE_NONE: The presence of the drivers is not being tracked.
455   * @DL_STATE_DORMANT: None of the supplier/consumer drivers is present.
456   * @DL_STATE_AVAILABLE: The supplier driver is present, but the consumer is not.
457   * @DL_STATE_CONSUMER_PROBE: The consumer is probing (supplier driver present).
458   * @DL_STATE_ACTIVE: Both the supplier and consumer drivers are present.
459   * @DL_STATE_SUPPLIER_UNBIND: The supplier driver is unbinding.
460   */
461  enum device_link_state {
462  	DL_STATE_NONE = -1,
463  	DL_STATE_DORMANT = 0,
464  	DL_STATE_AVAILABLE,
465  	DL_STATE_CONSUMER_PROBE,
466  	DL_STATE_ACTIVE,
467  	DL_STATE_SUPPLIER_UNBIND,
468  };
469  
470  /*
471   * Device link flags.
472   *
473   * STATELESS: The core will not remove this link automatically.
474   * AUTOREMOVE_CONSUMER: Remove the link automatically on consumer driver unbind.
475   * PM_RUNTIME: If set, the runtime PM framework will use this link.
476   * RPM_ACTIVE: Run pm_runtime_get_sync() on the supplier during link creation.
477   * AUTOREMOVE_SUPPLIER: Remove the link automatically on supplier driver unbind.
478   * AUTOPROBE_CONSUMER: Probe consumer driver automatically after supplier binds.
479   * MANAGED: The core tracks presence of supplier/consumer drivers (internal).
480   * SYNC_STATE_ONLY: Link only affects sync_state() behavior.
481   * INFERRED: Inferred from data (eg: firmware) and not from driver actions.
482   */
483  #define DL_FLAG_STATELESS		BIT(0)
484  #define DL_FLAG_AUTOREMOVE_CONSUMER	BIT(1)
485  #define DL_FLAG_PM_RUNTIME		BIT(2)
486  #define DL_FLAG_RPM_ACTIVE		BIT(3)
487  #define DL_FLAG_AUTOREMOVE_SUPPLIER	BIT(4)
488  #define DL_FLAG_AUTOPROBE_CONSUMER	BIT(5)
489  #define DL_FLAG_MANAGED			BIT(6)
490  #define DL_FLAG_SYNC_STATE_ONLY		BIT(7)
491  #define DL_FLAG_INFERRED		BIT(8)
492  #define DL_FLAG_CYCLE			BIT(9)
493  
494  /**
495   * enum dl_dev_state - Device driver presence tracking information.
496   * @DL_DEV_NO_DRIVER: There is no driver attached to the device.
497   * @DL_DEV_PROBING: A driver is probing.
498   * @DL_DEV_DRIVER_BOUND: The driver has been bound to the device.
499   * @DL_DEV_UNBINDING: The driver is unbinding from the device.
500   */
501  enum dl_dev_state {
502  	DL_DEV_NO_DRIVER = 0,
503  	DL_DEV_PROBING,
504  	DL_DEV_DRIVER_BOUND,
505  	DL_DEV_UNBINDING,
506  };
507  
508  /**
509   * enum device_removable - Whether the device is removable. The criteria for a
510   * device to be classified as removable is determined by its subsystem or bus.
511   * @DEVICE_REMOVABLE_NOT_SUPPORTED: This attribute is not supported for this
512   *				    device (default).
513   * @DEVICE_REMOVABLE_UNKNOWN:  Device location is Unknown.
514   * @DEVICE_FIXED: Device is not removable by the user.
515   * @DEVICE_REMOVABLE: Device is removable by the user.
516   */
517  enum device_removable {
518  	DEVICE_REMOVABLE_NOT_SUPPORTED = 0, /* must be 0 */
519  	DEVICE_REMOVABLE_UNKNOWN,
520  	DEVICE_FIXED,
521  	DEVICE_REMOVABLE,
522  };
523  
524  /**
525   * struct dev_links_info - Device data related to device links.
526   * @suppliers: List of links to supplier devices.
527   * @consumers: List of links to consumer devices.
528   * @defer_sync: Hook to global list of devices that have deferred sync_state.
529   * @status: Driver status information.
530   */
531  struct dev_links_info {
532  	struct list_head suppliers;
533  	struct list_head consumers;
534  	struct list_head defer_sync;
535  	enum dl_dev_state status;
536  };
537  
538  /**
539   * struct dev_msi_info - Device data related to MSI
540   * @domain:	The MSI interrupt domain associated to the device
541   * @data:	Pointer to MSI device data
542   */
543  struct dev_msi_info {
544  #ifdef CONFIG_GENERIC_MSI_IRQ
545  	struct irq_domain	*domain;
546  	struct msi_device_data	*data;
547  #endif
548  };
549  
550  /**
551   * enum device_physical_location_panel - Describes which panel surface of the
552   * system's housing the device connection point resides on.
553   * @DEVICE_PANEL_TOP: Device connection point is on the top panel.
554   * @DEVICE_PANEL_BOTTOM: Device connection point is on the bottom panel.
555   * @DEVICE_PANEL_LEFT: Device connection point is on the left panel.
556   * @DEVICE_PANEL_RIGHT: Device connection point is on the right panel.
557   * @DEVICE_PANEL_FRONT: Device connection point is on the front panel.
558   * @DEVICE_PANEL_BACK: Device connection point is on the back panel.
559   * @DEVICE_PANEL_UNKNOWN: The panel with device connection point is unknown.
560   */
561  enum device_physical_location_panel {
562  	DEVICE_PANEL_TOP,
563  	DEVICE_PANEL_BOTTOM,
564  	DEVICE_PANEL_LEFT,
565  	DEVICE_PANEL_RIGHT,
566  	DEVICE_PANEL_FRONT,
567  	DEVICE_PANEL_BACK,
568  	DEVICE_PANEL_UNKNOWN,
569  };
570  
571  /**
572   * enum device_physical_location_vertical_position - Describes vertical
573   * position of the device connection point on the panel surface.
574   * @DEVICE_VERT_POS_UPPER: Device connection point is at upper part of panel.
575   * @DEVICE_VERT_POS_CENTER: Device connection point is at center part of panel.
576   * @DEVICE_VERT_POS_LOWER: Device connection point is at lower part of panel.
577   */
578  enum device_physical_location_vertical_position {
579  	DEVICE_VERT_POS_UPPER,
580  	DEVICE_VERT_POS_CENTER,
581  	DEVICE_VERT_POS_LOWER,
582  };
583  
584  /**
585   * enum device_physical_location_horizontal_position - Describes horizontal
586   * position of the device connection point on the panel surface.
587   * @DEVICE_HORI_POS_LEFT: Device connection point is at left part of panel.
588   * @DEVICE_HORI_POS_CENTER: Device connection point is at center part of panel.
589   * @DEVICE_HORI_POS_RIGHT: Device connection point is at right part of panel.
590   */
591  enum device_physical_location_horizontal_position {
592  	DEVICE_HORI_POS_LEFT,
593  	DEVICE_HORI_POS_CENTER,
594  	DEVICE_HORI_POS_RIGHT,
595  };
596  
597  /**
598   * struct device_physical_location - Device data related to physical location
599   * of the device connection point.
600   * @panel: Panel surface of the system's housing that the device connection
601   *         point resides on.
602   * @vertical_position: Vertical position of the device connection point within
603   *                     the panel.
604   * @horizontal_position: Horizontal position of the device connection point
605   *                       within the panel.
606   * @dock: Set if the device connection point resides in a docking station or
607   *        port replicator.
608   * @lid: Set if this device connection point resides on the lid of laptop
609   *       system.
610   */
611  struct device_physical_location {
612  	enum device_physical_location_panel panel;
613  	enum device_physical_location_vertical_position vertical_position;
614  	enum device_physical_location_horizontal_position horizontal_position;
615  	bool dock;
616  	bool lid;
617  };
618  
619  /**
620   * struct device - The basic device structure
621   * @parent:	The device's "parent" device, the device to which it is attached.
622   * 		In most cases, a parent device is some sort of bus or host
623   * 		controller. If parent is NULL, the device, is a top-level device,
624   * 		which is not usually what you want.
625   * @p:		Holds the private data of the driver core portions of the device.
626   * 		See the comment of the struct device_private for detail.
627   * @kobj:	A top-level, abstract class from which other classes are derived.
628   * @init_name:	Initial name of the device.
629   * @type:	The type of device.
630   * 		This identifies the device type and carries type-specific
631   * 		information.
632   * @mutex:	Mutex to synchronize calls to its driver.
633   * @bus:	Type of bus device is on.
634   * @driver:	Which driver has allocated this
635   * @platform_data: Platform data specific to the device.
636   * 		Example: For devices on custom boards, as typical of embedded
637   * 		and SOC based hardware, Linux often uses platform_data to point
638   * 		to board-specific structures describing devices and how they
639   * 		are wired.  That can include what ports are available, chip
640   * 		variants, which GPIO pins act in what additional roles, and so
641   * 		on.  This shrinks the "Board Support Packages" (BSPs) and
642   * 		minimizes board-specific #ifdefs in drivers.
643   * @driver_data: Private pointer for driver specific info.
644   * @links:	Links to suppliers and consumers of this device.
645   * @power:	For device power management.
646   *		See Documentation/driver-api/pm/devices.rst for details.
647   * @pm_domain:	Provide callbacks that are executed during system suspend,
648   * 		hibernation, system resume and during runtime PM transitions
649   * 		along with subsystem-level and driver-level callbacks.
650   * @em_pd:	device's energy model performance domain
651   * @pins:	For device pin management.
652   *		See Documentation/driver-api/pin-control.rst for details.
653   * @msi:	MSI related data
654   * @numa_node:	NUMA node this device is close to.
655   * @dma_ops:    DMA mapping operations for this device.
656   * @dma_mask:	Dma mask (if dma'ble device).
657   * @coherent_dma_mask: Like dma_mask, but for alloc_coherent mapping as not all
658   * 		hardware supports 64-bit addresses for consistent allocations
659   * 		such descriptors.
660   * @bus_dma_limit: Limit of an upstream bridge or bus which imposes a smaller
661   *		DMA limit than the device itself supports.
662   * @dma_range_map: map for DMA memory ranges relative to that of RAM
663   * @dma_parms:	A low level driver may set these to teach IOMMU code about
664   * 		segment limitations.
665   * @dma_pools:	Dma pools (if dma'ble device).
666   * @dma_mem:	Internal for coherent mem override.
667   * @cma_area:	Contiguous memory area for dma allocations
668   * @dma_io_tlb_mem: Software IO TLB allocator.  Not for driver use.
669   * @dma_io_tlb_pools:	List of transient swiotlb memory pools.
670   * @dma_io_tlb_lock:	Protects changes to the list of active pools.
671   * @dma_uses_io_tlb: %true if device has used the software IO TLB.
672   * @archdata:	For arch-specific additions.
673   * @of_node:	Associated device tree node.
674   * @fwnode:	Associated device node supplied by platform firmware.
675   * @devt:	For creating the sysfs "dev".
676   * @id:		device instance
677   * @devres_lock: Spinlock to protect the resource of the device.
678   * @devres_head: The resources list of the device.
679   * @class:	The class of the device.
680   * @groups:	Optional attribute groups.
681   * @release:	Callback to free the device after all references have
682   * 		gone away. This should be set by the allocator of the
683   * 		device (i.e. the bus driver that discovered the device).
684   * @iommu_group: IOMMU group the device belongs to.
685   * @iommu:	Per device generic IOMMU runtime data
686   * @physical_location: Describes physical location of the device connection
687   *		point in the system housing.
688   * @removable:  Whether the device can be removed from the system. This
689   *              should be set by the subsystem / bus driver that discovered
690   *              the device.
691   *
692   * @offline_disabled: If set, the device is permanently online.
693   * @offline:	Set after successful invocation of bus type's .offline().
694   * @of_node_reused: Set if the device-tree node is shared with an ancestor
695   *              device.
696   * @state_synced: The hardware state of this device has been synced to match
697   *		  the software state of this device by calling the driver/bus
698   *		  sync_state() callback.
699   * @can_match:	The device has matched with a driver at least once or it is in
700   *		a bus (like AMBA) which can't check for matching drivers until
701   *		other devices probe successfully.
702   * @dma_coherent: this particular device is dma coherent, even if the
703   *		architecture supports non-coherent devices.
704   * @dma_ops_bypass: If set to %true then the dma_ops are bypassed for the
705   *		streaming DMA operations (->map_* / ->unmap_* / ->sync_*),
706   *		and optionall (if the coherent mask is large enough) also
707   *		for dma allocations.  This flag is managed by the dma ops
708   *		instance from ->dma_supported.
709   * @dma_skip_sync: DMA sync operations can be skipped for coherent buffers.
710   * @dma_iommu: Device is using default IOMMU implementation for DMA and
711   *		doesn't rely on dma_ops structure.
712   *
713   * At the lowest level, every device in a Linux system is represented by an
714   * instance of struct device. The device structure contains the information
715   * that the device model core needs to model the system. Most subsystems,
716   * however, track additional information about the devices they host. As a
717   * result, it is rare for devices to be represented by bare device structures;
718   * instead, that structure, like kobject structures, is usually embedded within
719   * a higher-level representation of the device.
720   */
721  struct device {
722  	struct kobject kobj;
723  	struct device		*parent;
724  
725  	struct device_private	*p;
726  
727  	const char		*init_name; /* initial name of the device */
728  	const struct device_type *type;
729  
730  	const struct bus_type	*bus;	/* type of bus device is on */
731  	struct device_driver *driver;	/* which driver has allocated this
732  					   device */
733  	void		*platform_data;	/* Platform specific data, device
734  					   core doesn't touch it */
735  	void		*driver_data;	/* Driver data, set and get with
736  					   dev_set_drvdata/dev_get_drvdata */
737  	struct mutex		mutex;	/* mutex to synchronize calls to
738  					 * its driver.
739  					 */
740  
741  	struct dev_links_info	links;
742  	struct dev_pm_info	power;
743  	struct dev_pm_domain	*pm_domain;
744  
745  #ifdef CONFIG_ENERGY_MODEL
746  	struct em_perf_domain	*em_pd;
747  #endif
748  
749  #ifdef CONFIG_PINCTRL
750  	struct dev_pin_info	*pins;
751  #endif
752  	struct dev_msi_info	msi;
753  #ifdef CONFIG_ARCH_HAS_DMA_OPS
754  	const struct dma_map_ops *dma_ops;
755  #endif
756  	u64		*dma_mask;	/* dma mask (if dma'able device) */
757  	u64		coherent_dma_mask;/* Like dma_mask, but for
758  					     alloc_coherent mappings as
759  					     not all hardware supports
760  					     64 bit addresses for consistent
761  					     allocations such descriptors. */
762  	u64		bus_dma_limit;	/* upstream dma constraint */
763  	const struct bus_dma_region *dma_range_map;
764  
765  	struct device_dma_parameters *dma_parms;
766  
767  	struct list_head	dma_pools;	/* dma pools (if dma'ble) */
768  
769  #ifdef CONFIG_DMA_DECLARE_COHERENT
770  	struct dma_coherent_mem	*dma_mem; /* internal for coherent mem
771  					     override */
772  #endif
773  #ifdef CONFIG_DMA_CMA
774  	struct cma *cma_area;		/* contiguous memory area for dma
775  					   allocations */
776  #endif
777  #ifdef CONFIG_SWIOTLB
778  	struct io_tlb_mem *dma_io_tlb_mem;
779  #endif
780  #ifdef CONFIG_SWIOTLB_DYNAMIC
781  	struct list_head dma_io_tlb_pools;
782  	spinlock_t dma_io_tlb_lock;
783  	bool dma_uses_io_tlb;
784  #endif
785  	/* arch specific additions */
786  	struct dev_archdata	archdata;
787  
788  	struct device_node	*of_node; /* associated device tree node */
789  	struct fwnode_handle	*fwnode; /* firmware device node */
790  
791  #ifdef CONFIG_NUMA
792  	int		numa_node;	/* NUMA node this device is close to */
793  #endif
794  	dev_t			devt;	/* dev_t, creates the sysfs "dev" */
795  	u32			id;	/* device instance */
796  
797  	spinlock_t		devres_lock;
798  	struct list_head	devres_head;
799  
800  	const struct class	*class;
801  	const struct attribute_group **groups;	/* optional groups */
802  
803  	void	(*release)(struct device *dev);
804  	struct iommu_group	*iommu_group;
805  	struct dev_iommu	*iommu;
806  
807  	struct device_physical_location *physical_location;
808  
809  	enum device_removable	removable;
810  
811  	bool			offline_disabled:1;
812  	bool			offline:1;
813  	bool			of_node_reused:1;
814  	bool			state_synced:1;
815  	bool			can_match:1;
816  #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
817      defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || \
818      defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
819  	bool			dma_coherent:1;
820  #endif
821  #ifdef CONFIG_DMA_OPS_BYPASS
822  	bool			dma_ops_bypass : 1;
823  #endif
824  #ifdef CONFIG_DMA_NEED_SYNC
825  	bool			dma_skip_sync:1;
826  #endif
827  #ifdef CONFIG_IOMMU_DMA
828  	bool			dma_iommu:1;
829  #endif
830  };
831  
832  /**
833   * struct device_link - Device link representation.
834   * @supplier: The device on the supplier end of the link.
835   * @s_node: Hook to the supplier device's list of links to consumers.
836   * @consumer: The device on the consumer end of the link.
837   * @c_node: Hook to the consumer device's list of links to suppliers.
838   * @link_dev: device used to expose link details in sysfs
839   * @status: The state of the link (with respect to the presence of drivers).
840   * @flags: Link flags.
841   * @rpm_active: Whether or not the consumer device is runtime-PM-active.
842   * @kref: Count repeated addition of the same link.
843   * @rm_work: Work structure used for removing the link.
844   * @supplier_preactivated: Supplier has been made active before consumer probe.
845   */
846  struct device_link {
847  	struct device *supplier;
848  	struct list_head s_node;
849  	struct device *consumer;
850  	struct list_head c_node;
851  	struct device link_dev;
852  	enum device_link_state status;
853  	u32 flags;
854  	refcount_t rpm_active;
855  	struct kref kref;
856  	struct work_struct rm_work;
857  	bool supplier_preactivated; /* Owned by consumer probe. */
858  };
859  
860  #define kobj_to_dev(__kobj)	container_of_const(__kobj, struct device, kobj)
861  
862  /**
863   * device_iommu_mapped - Returns true when the device DMA is translated
864   *			 by an IOMMU
865   * @dev: Device to perform the check on
866   */
device_iommu_mapped(struct device * dev)867  static inline bool device_iommu_mapped(struct device *dev)
868  {
869  	return (dev->iommu_group != NULL);
870  }
871  
872  /* Get the wakeup routines, which depend on struct device */
873  #include <linux/pm_wakeup.h>
874  
875  /**
876   * dev_name - Return a device's name.
877   * @dev: Device with name to get.
878   * Return: The kobject name of the device, or its initial name if unavailable.
879   */
dev_name(const struct device * dev)880  static inline const char *dev_name(const struct device *dev)
881  {
882  	/* Use the init name until the kobject becomes available */
883  	if (dev->init_name)
884  		return dev->init_name;
885  
886  	return kobject_name(&dev->kobj);
887  }
888  
889  /**
890   * dev_bus_name - Return a device's bus/class name, if at all possible
891   * @dev: struct device to get the bus/class name of
892   *
893   * Will return the name of the bus/class the device is attached to.  If it is
894   * not attached to a bus/class, an empty string will be returned.
895   */
dev_bus_name(const struct device * dev)896  static inline const char *dev_bus_name(const struct device *dev)
897  {
898  	return dev->bus ? dev->bus->name : (dev->class ? dev->class->name : "");
899  }
900  
901  __printf(2, 3) int dev_set_name(struct device *dev, const char *name, ...);
902  
903  #ifdef CONFIG_NUMA
dev_to_node(struct device * dev)904  static inline int dev_to_node(struct device *dev)
905  {
906  	return dev->numa_node;
907  }
set_dev_node(struct device * dev,int node)908  static inline void set_dev_node(struct device *dev, int node)
909  {
910  	dev->numa_node = node;
911  }
912  #else
dev_to_node(struct device * dev)913  static inline int dev_to_node(struct device *dev)
914  {
915  	return NUMA_NO_NODE;
916  }
set_dev_node(struct device * dev,int node)917  static inline void set_dev_node(struct device *dev, int node)
918  {
919  }
920  #endif
921  
dev_get_msi_domain(const struct device * dev)922  static inline struct irq_domain *dev_get_msi_domain(const struct device *dev)
923  {
924  #ifdef CONFIG_GENERIC_MSI_IRQ
925  	return dev->msi.domain;
926  #else
927  	return NULL;
928  #endif
929  }
930  
dev_set_msi_domain(struct device * dev,struct irq_domain * d)931  static inline void dev_set_msi_domain(struct device *dev, struct irq_domain *d)
932  {
933  #ifdef CONFIG_GENERIC_MSI_IRQ
934  	dev->msi.domain = d;
935  #endif
936  }
937  
dev_get_drvdata(const struct device * dev)938  static inline void *dev_get_drvdata(const struct device *dev)
939  {
940  	return dev->driver_data;
941  }
942  
dev_set_drvdata(struct device * dev,void * data)943  static inline void dev_set_drvdata(struct device *dev, void *data)
944  {
945  	dev->driver_data = data;
946  }
947  
dev_to_psd(struct device * dev)948  static inline struct pm_subsys_data *dev_to_psd(struct device *dev)
949  {
950  	return dev ? dev->power.subsys_data : NULL;
951  }
952  
dev_get_uevent_suppress(const struct device * dev)953  static inline unsigned int dev_get_uevent_suppress(const struct device *dev)
954  {
955  	return dev->kobj.uevent_suppress;
956  }
957  
dev_set_uevent_suppress(struct device * dev,int val)958  static inline void dev_set_uevent_suppress(struct device *dev, int val)
959  {
960  	dev->kobj.uevent_suppress = val;
961  }
962  
device_is_registered(struct device * dev)963  static inline int device_is_registered(struct device *dev)
964  {
965  	return dev->kobj.state_in_sysfs;
966  }
967  
device_enable_async_suspend(struct device * dev)968  static inline void device_enable_async_suspend(struct device *dev)
969  {
970  	if (!dev->power.is_prepared)
971  		dev->power.async_suspend = true;
972  }
973  
device_disable_async_suspend(struct device * dev)974  static inline void device_disable_async_suspend(struct device *dev)
975  {
976  	if (!dev->power.is_prepared)
977  		dev->power.async_suspend = false;
978  }
979  
device_async_suspend_enabled(struct device * dev)980  static inline bool device_async_suspend_enabled(struct device *dev)
981  {
982  	return !!dev->power.async_suspend;
983  }
984  
device_pm_not_required(struct device * dev)985  static inline bool device_pm_not_required(struct device *dev)
986  {
987  	return dev->power.no_pm;
988  }
989  
device_set_pm_not_required(struct device * dev)990  static inline void device_set_pm_not_required(struct device *dev)
991  {
992  	dev->power.no_pm = true;
993  }
994  
dev_pm_syscore_device(struct device * dev,bool val)995  static inline void dev_pm_syscore_device(struct device *dev, bool val)
996  {
997  #ifdef CONFIG_PM_SLEEP
998  	dev->power.syscore = val;
999  #endif
1000  }
1001  
dev_pm_set_driver_flags(struct device * dev,u32 flags)1002  static inline void dev_pm_set_driver_flags(struct device *dev, u32 flags)
1003  {
1004  	dev->power.driver_flags = flags;
1005  }
1006  
dev_pm_test_driver_flags(struct device * dev,u32 flags)1007  static inline bool dev_pm_test_driver_flags(struct device *dev, u32 flags)
1008  {
1009  	return !!(dev->power.driver_flags & flags);
1010  }
1011  
device_lock(struct device * dev)1012  static inline void device_lock(struct device *dev)
1013  {
1014  	mutex_lock(&dev->mutex);
1015  }
1016  
device_lock_interruptible(struct device * dev)1017  static inline int device_lock_interruptible(struct device *dev)
1018  {
1019  	return mutex_lock_interruptible(&dev->mutex);
1020  }
1021  
device_trylock(struct device * dev)1022  static inline int device_trylock(struct device *dev)
1023  {
1024  	return mutex_trylock(&dev->mutex);
1025  }
1026  
device_unlock(struct device * dev)1027  static inline void device_unlock(struct device *dev)
1028  {
1029  	mutex_unlock(&dev->mutex);
1030  }
1031  
DEFINE_GUARD(device,struct device *,device_lock (_T),device_unlock (_T))1032  DEFINE_GUARD(device, struct device *, device_lock(_T), device_unlock(_T))
1033  
1034  static inline void device_lock_assert(struct device *dev)
1035  {
1036  	lockdep_assert_held(&dev->mutex);
1037  }
1038  
dev_has_sync_state(struct device * dev)1039  static inline bool dev_has_sync_state(struct device *dev)
1040  {
1041  	if (!dev)
1042  		return false;
1043  	if (dev->driver && dev->driver->sync_state)
1044  		return true;
1045  	if (dev->bus && dev->bus->sync_state)
1046  		return true;
1047  	return false;
1048  }
1049  
dev_set_removable(struct device * dev,enum device_removable removable)1050  static inline void dev_set_removable(struct device *dev,
1051  				     enum device_removable removable)
1052  {
1053  	dev->removable = removable;
1054  }
1055  
dev_is_removable(struct device * dev)1056  static inline bool dev_is_removable(struct device *dev)
1057  {
1058  	return dev->removable == DEVICE_REMOVABLE;
1059  }
1060  
dev_removable_is_valid(struct device * dev)1061  static inline bool dev_removable_is_valid(struct device *dev)
1062  {
1063  	return dev->removable != DEVICE_REMOVABLE_NOT_SUPPORTED;
1064  }
1065  
1066  /*
1067   * High level routines for use by the bus drivers
1068   */
1069  int __must_check device_register(struct device *dev);
1070  void device_unregister(struct device *dev);
1071  void device_initialize(struct device *dev);
1072  int __must_check device_add(struct device *dev);
1073  void device_del(struct device *dev);
1074  
1075  DEFINE_FREE(device_del, struct device *, if (_T) device_del(_T))
1076  
1077  int device_for_each_child(struct device *dev, void *data,
1078  			  int (*fn)(struct device *dev, void *data));
1079  int device_for_each_child_reverse(struct device *dev, void *data,
1080  				  int (*fn)(struct device *dev, void *data));
1081  int device_for_each_child_reverse_from(struct device *parent,
1082  				       struct device *from, const void *data,
1083  				       int (*fn)(struct device *, const void *));
1084  struct device *device_find_child(struct device *dev, void *data,
1085  				 int (*match)(struct device *dev, void *data));
1086  struct device *device_find_child_by_name(struct device *parent,
1087  					 const char *name);
1088  struct device *device_find_any_child(struct device *parent);
1089  
1090  int device_rename(struct device *dev, const char *new_name);
1091  int device_move(struct device *dev, struct device *new_parent,
1092  		enum dpm_order dpm_order);
1093  int device_change_owner(struct device *dev, kuid_t kuid, kgid_t kgid);
1094  
device_supports_offline(struct device * dev)1095  static inline bool device_supports_offline(struct device *dev)
1096  {
1097  	return dev->bus && dev->bus->offline && dev->bus->online;
1098  }
1099  
1100  #define __device_lock_set_class(dev, name, key)                        \
1101  do {                                                                   \
1102  	struct device *__d2 __maybe_unused = dev;                      \
1103  	lock_set_class(&__d2->mutex.dep_map, name, key, 0, _THIS_IP_); \
1104  } while (0)
1105  
1106  /**
1107   * device_lock_set_class - Specify a temporary lock class while a device
1108   *			   is attached to a driver
1109   * @dev: device to modify
1110   * @key: lock class key data
1111   *
1112   * This must be called with the device_lock() already held, for example
1113   * from driver ->probe(). Take care to only override the default
1114   * lockdep_no_validate class.
1115   */
1116  #ifdef CONFIG_LOCKDEP
1117  #define device_lock_set_class(dev, key)                                    \
1118  do {                                                                       \
1119  	struct device *__d = dev;                                          \
1120  	dev_WARN_ONCE(__d, !lockdep_match_class(&__d->mutex,               \
1121  						&__lockdep_no_validate__), \
1122  		 "overriding existing custom lock class\n");               \
1123  	__device_lock_set_class(__d, #key, key);                           \
1124  } while (0)
1125  #else
1126  #define device_lock_set_class(dev, key) __device_lock_set_class(dev, #key, key)
1127  #endif
1128  
1129  /**
1130   * device_lock_reset_class - Return a device to the default lockdep novalidate state
1131   * @dev: device to modify
1132   *
1133   * This must be called with the device_lock() already held, for example
1134   * from driver ->remove().
1135   */
1136  #define device_lock_reset_class(dev) \
1137  do { \
1138  	struct device *__d __maybe_unused = dev;                       \
1139  	lock_set_novalidate_class(&__d->mutex.dep_map, "&dev->mutex",  \
1140  				  _THIS_IP_);                          \
1141  } while (0)
1142  
1143  void lock_device_hotplug(void);
1144  void unlock_device_hotplug(void);
1145  int lock_device_hotplug_sysfs(void);
1146  int device_offline(struct device *dev);
1147  int device_online(struct device *dev);
1148  
1149  void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode);
1150  void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode);
1151  void device_set_node(struct device *dev, struct fwnode_handle *fwnode);
1152  void device_set_of_node_from_dev(struct device *dev, const struct device *dev2);
1153  
dev_of_node(struct device * dev)1154  static inline struct device_node *dev_of_node(struct device *dev)
1155  {
1156  	if (!IS_ENABLED(CONFIG_OF) || !dev)
1157  		return NULL;
1158  	return dev->of_node;
1159  }
1160  
dev_num_vf(struct device * dev)1161  static inline int dev_num_vf(struct device *dev)
1162  {
1163  	if (dev->bus && dev->bus->num_vf)
1164  		return dev->bus->num_vf(dev);
1165  	return 0;
1166  }
1167  
1168  /*
1169   * Root device objects for grouping under /sys/devices
1170   */
1171  struct device *__root_device_register(const char *name, struct module *owner);
1172  
1173  /* This is a macro to avoid include problems with THIS_MODULE */
1174  #define root_device_register(name) \
1175  	__root_device_register(name, THIS_MODULE)
1176  
1177  void root_device_unregister(struct device *root);
1178  
dev_get_platdata(const struct device * dev)1179  static inline void *dev_get_platdata(const struct device *dev)
1180  {
1181  	return dev->platform_data;
1182  }
1183  
1184  /*
1185   * Manual binding of a device to driver. See drivers/base/bus.c
1186   * for information on use.
1187   */
1188  int __must_check device_driver_attach(const struct device_driver *drv,
1189  				      struct device *dev);
1190  int __must_check device_bind_driver(struct device *dev);
1191  void device_release_driver(struct device *dev);
1192  int  __must_check device_attach(struct device *dev);
1193  int __must_check driver_attach(const struct device_driver *drv);
1194  void device_initial_probe(struct device *dev);
1195  int __must_check device_reprobe(struct device *dev);
1196  
1197  bool device_is_bound(struct device *dev);
1198  
1199  /*
1200   * Easy functions for dynamically creating devices on the fly
1201   */
1202  __printf(5, 6) struct device *
1203  device_create(const struct class *cls, struct device *parent, dev_t devt,
1204  	      void *drvdata, const char *fmt, ...);
1205  __printf(6, 7) struct device *
1206  device_create_with_groups(const struct class *cls, struct device *parent, dev_t devt,
1207  			  void *drvdata, const struct attribute_group **groups,
1208  			  const char *fmt, ...);
1209  void device_destroy(const struct class *cls, dev_t devt);
1210  
1211  int __must_check device_add_groups(struct device *dev,
1212  				   const struct attribute_group **groups);
1213  void device_remove_groups(struct device *dev,
1214  			  const struct attribute_group **groups);
1215  
device_add_group(struct device * dev,const struct attribute_group * grp)1216  static inline int __must_check device_add_group(struct device *dev,
1217  					const struct attribute_group *grp)
1218  {
1219  	const struct attribute_group *groups[] = { grp, NULL };
1220  
1221  	return device_add_groups(dev, groups);
1222  }
1223  
device_remove_group(struct device * dev,const struct attribute_group * grp)1224  static inline void device_remove_group(struct device *dev,
1225  				       const struct attribute_group *grp)
1226  {
1227  	const struct attribute_group *groups[] = { grp, NULL };
1228  
1229  	return device_remove_groups(dev, groups);
1230  }
1231  
1232  int __must_check devm_device_add_group(struct device *dev,
1233  				       const struct attribute_group *grp);
1234  
1235  /*
1236   * get_device - atomically increment the reference count for the device.
1237   *
1238   */
1239  struct device *get_device(struct device *dev);
1240  void put_device(struct device *dev);
1241  
1242  DEFINE_FREE(put_device, struct device *, if (_T) put_device(_T))
1243  
1244  bool kill_device(struct device *dev);
1245  
1246  #ifdef CONFIG_DEVTMPFS
1247  int devtmpfs_mount(void);
1248  #else
devtmpfs_mount(void)1249  static inline int devtmpfs_mount(void) { return 0; }
1250  #endif
1251  
1252  /* drivers/base/power/shutdown.c */
1253  void device_shutdown(void);
1254  
1255  /* debugging and troubleshooting/diagnostic helpers. */
1256  const char *dev_driver_string(const struct device *dev);
1257  
1258  /* Device links interface. */
1259  struct device_link *device_link_add(struct device *consumer,
1260  				    struct device *supplier, u32 flags);
1261  void device_link_del(struct device_link *link);
1262  void device_link_remove(void *consumer, struct device *supplier);
1263  void device_links_supplier_sync_state_pause(void);
1264  void device_links_supplier_sync_state_resume(void);
1265  void device_link_wait_removal(void);
1266  
1267  /* Create alias, so I can be autoloaded. */
1268  #define MODULE_ALIAS_CHARDEV(major,minor) \
1269  	MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
1270  #define MODULE_ALIAS_CHARDEV_MAJOR(major) \
1271  	MODULE_ALIAS("char-major-" __stringify(major) "-*")
1272  
1273  #endif /* _DEVICE_H_ */
1274