cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

device.h (38133B)


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