/* SPDX-License-Identifier: GPL-2.0 */ /* * Device tables which are exported to userspace via * scripts/mod/file2alias.c. You must keep that file in sync with this * header. */ #ifndef LINUX_MOD_DEVICETABLE_H #define LINUX_MOD_DEVICETABLE_H #ifdef __KERNEL__ #include <linux/mei.h> #include <linux/types.h> #include <linux/uuid.h> kernel_ulong_t; #endif #define PCI_ANY_ID … enum { … }; /** * struct pci_device_id - PCI device ID structure * @vendor: Vendor ID to match (or PCI_ANY_ID) * @device: Device ID to match (or PCI_ANY_ID) * @subvendor: Subsystem vendor ID to match (or PCI_ANY_ID) * @subdevice: Subsystem device ID to match (or PCI_ANY_ID) * @class: Device class, subclass, and "interface" to match. * See Appendix D of the PCI Local Bus Spec or * include/linux/pci_ids.h for a full list of classes. * Most drivers do not need to specify class/class_mask * as vendor/device is normally sufficient. * @class_mask: Limit which sub-fields of the class field are compared. * See drivers/scsi/sym53c8xx_2/ for example of usage. * @driver_data: Data private to the driver. * Most drivers don't need to use driver_data field. * Best practice is to use driver_data as an index * into a static list of equivalent device types, * instead of using it as a pointer. * @override_only: Match only when dev->driver_override is this driver. */ struct pci_device_id { … }; #define IEEE1394_MATCH_VENDOR_ID … #define IEEE1394_MATCH_MODEL_ID … #define IEEE1394_MATCH_SPECIFIER_ID … #define IEEE1394_MATCH_VERSION … struct ieee1394_device_id { … }; /* * Device table entry for "new style" table-driven USB drivers. * User mode code can read these tables to choose which modules to load. * Declare the table as a MODULE_DEVICE_TABLE. * * A probe() parameter will point to a matching entry from this table. * Use the driver_info field for each match to hold information tied * to that match: device quirks, etc. * * Terminate the driver's table with an all-zeroes entry. * Use the flag values to control which fields are compared. */ /** * struct usb_device_id - identifies USB devices for probing and hotplugging * @match_flags: Bit mask controlling which of the other fields are used to * match against new devices. Any field except for driver_info may be * used, although some only make sense in conjunction with other fields. * This is usually set by a USB_DEVICE_*() macro, which sets all * other fields in this structure except for driver_info. * @idVendor: USB vendor ID for a device; numbers are assigned * by the USB forum to its members. * @idProduct: Vendor-assigned product ID. * @bcdDevice_lo: Low end of range of vendor-assigned product version numbers. * This is also used to identify individual product versions, for * a range consisting of a single device. * @bcdDevice_hi: High end of version number range. The range of product * versions is inclusive. * @bDeviceClass: Class of device; numbers are assigned * by the USB forum. Products may choose to implement classes, * or be vendor-specific. Device classes specify behavior of all * the interfaces on a device. * @bDeviceSubClass: Subclass of device; associated with bDeviceClass. * @bDeviceProtocol: Protocol of device; associated with bDeviceClass. * @bInterfaceClass: Class of interface; numbers are assigned * by the USB forum. Products may choose to implement classes, * or be vendor-specific. Interface classes specify behavior only * of a given interface; other interfaces may support other classes. * @bInterfaceSubClass: Subclass of interface; associated with bInterfaceClass. * @bInterfaceProtocol: Protocol of interface; associated with bInterfaceClass. * @bInterfaceNumber: Number of interface; composite devices may use * fixed interface numbers to differentiate between vendor-specific * interfaces. * @driver_info: Holds information used by the driver. Usually it holds * a pointer to a descriptor understood by the driver, or perhaps * device flags. * * In most cases, drivers will create a table of device IDs by using * USB_DEVICE(), or similar macros designed for that purpose. * They will then export it to userspace using MODULE_DEVICE_TABLE(), * and provide it to the USB core through their usb_driver structure. * * See the usb_match_id() function for information about how matches are * performed. Briefly, you will normally use one of several macros to help * construct these entries. Each entry you provide will either identify * one or more specific products, or will identify a class of products * which have agreed to behave the same. You should put the more specific * matches towards the beginning of your table, so that driver_info can * record quirks of specific products. */ struct usb_device_id { … }; /* Some useful macros to use to create struct usb_device_id */ #define USB_DEVICE_ID_MATCH_VENDOR … #define USB_DEVICE_ID_MATCH_PRODUCT … #define USB_DEVICE_ID_MATCH_DEV_LO … #define USB_DEVICE_ID_MATCH_DEV_HI … #define USB_DEVICE_ID_MATCH_DEV_CLASS … #define USB_DEVICE_ID_MATCH_DEV_SUBCLASS … #define USB_DEVICE_ID_MATCH_DEV_PROTOCOL … #define USB_DEVICE_ID_MATCH_INT_CLASS … #define USB_DEVICE_ID_MATCH_INT_SUBCLASS … #define USB_DEVICE_ID_MATCH_INT_PROTOCOL … #define USB_DEVICE_ID_MATCH_INT_NUMBER … #define HID_ANY_ID … #define HID_BUS_ANY … #define HID_GROUP_ANY … struct hid_device_id { … }; /* s390 CCW devices */ struct ccw_device_id { … }; #define CCW_DEVICE_ID_MATCH_CU_TYPE … #define CCW_DEVICE_ID_MATCH_CU_MODEL … #define CCW_DEVICE_ID_MATCH_DEVICE_TYPE … #define CCW_DEVICE_ID_MATCH_DEVICE_MODEL … /* s390 AP bus devices */ struct ap_device_id { … }; #define AP_DEVICE_ID_MATCH_CARD_TYPE … #define AP_DEVICE_ID_MATCH_QUEUE_TYPE … /* s390 css bus devices (subchannels) */ struct css_device_id { … }; #define ACPI_ID_LEN … struct acpi_device_id { … }; /** * ACPI_DEVICE_CLASS - macro used to describe an ACPI device with * the PCI-defined class-code information * * @_cls : the class, subclass, prog-if triple for this device * @_msk : the class mask for this device * * This macro is used to create a struct acpi_device_id that matches a * specific PCI class. The .id and .driver_data fields will be left * initialized with the default value. */ #define ACPI_DEVICE_CLASS(_cls, _msk) … #define PNP_ID_LEN … #define PNP_MAX_DEVICES … struct pnp_device_id { … }; struct pnp_card_device_id { … }; #define SERIO_ANY … struct serio_device_id { … }; struct hda_device_id { … }; struct sdw_device_id { … }; /* * Struct used for matching a device */ struct of_device_id { … }; /* VIO */ struct vio_device_id { … }; /* PCMCIA */ struct pcmcia_device_id { … }; #define PCMCIA_DEV_ID_MATCH_MANF_ID … #define PCMCIA_DEV_ID_MATCH_CARD_ID … #define PCMCIA_DEV_ID_MATCH_FUNC_ID … #define PCMCIA_DEV_ID_MATCH_FUNCTION … #define PCMCIA_DEV_ID_MATCH_PROD_ID1 … #define PCMCIA_DEV_ID_MATCH_PROD_ID2 … #define PCMCIA_DEV_ID_MATCH_PROD_ID3 … #define PCMCIA_DEV_ID_MATCH_PROD_ID4 … #define PCMCIA_DEV_ID_MATCH_DEVICE_NO … #define PCMCIA_DEV_ID_MATCH_FAKE_CIS … #define PCMCIA_DEV_ID_MATCH_ANONYMOUS … /* Input */ #define INPUT_DEVICE_ID_EV_MAX … #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING … #define INPUT_DEVICE_ID_KEY_MAX … #define INPUT_DEVICE_ID_REL_MAX … #define INPUT_DEVICE_ID_ABS_MAX … #define INPUT_DEVICE_ID_MSC_MAX … #define INPUT_DEVICE_ID_LED_MAX … #define INPUT_DEVICE_ID_SND_MAX … #define INPUT_DEVICE_ID_FF_MAX … #define INPUT_DEVICE_ID_SW_MAX … #define INPUT_DEVICE_ID_PROP_MAX … #define INPUT_DEVICE_ID_MATCH_BUS … #define INPUT_DEVICE_ID_MATCH_VENDOR … #define INPUT_DEVICE_ID_MATCH_PRODUCT … #define INPUT_DEVICE_ID_MATCH_VERSION … #define INPUT_DEVICE_ID_MATCH_EVBIT … #define INPUT_DEVICE_ID_MATCH_KEYBIT … #define INPUT_DEVICE_ID_MATCH_RELBIT … #define INPUT_DEVICE_ID_MATCH_ABSBIT … #define INPUT_DEVICE_ID_MATCH_MSCIT … #define INPUT_DEVICE_ID_MATCH_LEDBIT … #define INPUT_DEVICE_ID_MATCH_SNDBIT … #define INPUT_DEVICE_ID_MATCH_FFBIT … #define INPUT_DEVICE_ID_MATCH_SWBIT … #define INPUT_DEVICE_ID_MATCH_PROPBIT … struct input_device_id { … }; /* EISA */ #define EISA_SIG_LEN … /* The EISA signature, in ASCII form, null terminated */ struct eisa_device_id { … }; #define EISA_DEVICE_MODALIAS_FMT … struct parisc_device_id { … }; #define PA_HWTYPE_ANY_ID … #define PA_HVERSION_REV_ANY_ID … #define PA_HVERSION_ANY_ID … #define PA_SVERSION_ANY_ID … /* SDIO */ #define SDIO_ANY_ID … struct sdio_device_id { … }; /* SSB core, see drivers/ssb/ */ struct ssb_device_id { … } __attribute__((packed, aligned …)); #define SSB_DEVICE(_vendor, _coreid, _revision) … #define SSB_ANY_VENDOR … #define SSB_ANY_ID … #define SSB_ANY_REV … /* Broadcom's specific AMBA core, see drivers/bcma/ */ struct bcma_device_id { … } __attribute__((packed,aligned …)); #define BCMA_CORE(_manuf, _id, _rev, _class) … #define BCMA_ANY_MANUF … #define BCMA_ANY_ID … #define BCMA_ANY_REV … #define BCMA_ANY_CLASS … struct virtio_device_id { … }; #define VIRTIO_DEV_ANY_ID … /* * For Hyper-V devices we use the device guid as the id. */ struct hv_vmbus_device_id { … }; /* rpmsg */ #define RPMSG_NAME_SIZE … #define RPMSG_DEVICE_MODALIAS_FMT … struct rpmsg_device_id { … }; /* i2c */ #define I2C_NAME_SIZE … #define I2C_MODULE_PREFIX … struct i2c_device_id { … }; /* pci_epf */ #define PCI_EPF_NAME_SIZE … #define PCI_EPF_MODULE_PREFIX … struct pci_epf_device_id { … }; /* i3c */ #define I3C_MATCH_DCR … #define I3C_MATCH_MANUF … #define I3C_MATCH_PART … #define I3C_MATCH_EXTRA_INFO … struct i3c_device_id { … }; /* spi */ #define SPI_NAME_SIZE … #define SPI_MODULE_PREFIX … struct spi_device_id { … }; /* SLIMbus */ #define SLIMBUS_NAME_SIZE … #define SLIMBUS_MODULE_PREFIX … struct slim_device_id { … }; #define APR_NAME_SIZE … #define APR_MODULE_PREFIX … struct apr_device_id { … }; #define SPMI_NAME_SIZE … #define SPMI_MODULE_PREFIX … struct spmi_device_id { … }; /* dmi */ enum dmi_field { … }; struct dmi_strmatch { … }; struct dmi_system_id { … }; /* * struct dmi_device_id appears during expansion of * "MODULE_DEVICE_TABLE(dmi, x)". Compiler doesn't look inside it * but this is enough for gcc 3.4.6 to error out: * error: storage size of '__mod_dmi_device_table' isn't known */ #define dmi_device_id … #define DMI_MATCH(a, b) … #define DMI_EXACT_MATCH(a, b) … #define PLATFORM_NAME_SIZE … #define PLATFORM_MODULE_PREFIX … struct platform_device_id { … }; #define MDIO_NAME_SIZE … #define MDIO_MODULE_PREFIX … #define MDIO_ID_FMT … #define MDIO_ID_ARGS(_id) … /** * struct mdio_device_id - identifies PHY devices on an MDIO/MII bus * @phy_id: The result of * (mdio_read(&MII_PHYSID1) << 16 | mdio_read(&MII_PHYSID2)) & @phy_id_mask * for this PHY type * @phy_id_mask: Defines the significant bits of @phy_id. A value of 0 * is used to terminate an array of struct mdio_device_id. */ struct mdio_device_id { … }; struct zorro_device_id { … }; #define ZORRO_WILDCARD … #define ZORRO_DEVICE_MODALIAS_FMT … #define ISAPNP_ANY_ID … struct isapnp_device_id { … }; /** * struct amba_id - identifies a device on an AMBA bus * @id: The significant bits if the hardware device ID * @mask: Bitmask specifying which bits of the id field are significant when * matching. A driver binds to a device when ((hardware device ID) & mask) * == id. * @data: Private data used by the driver. */ struct amba_id { … }; /** * struct mips_cdmm_device_id - identifies devices in MIPS CDMM bus * @type: Device type identifier. */ struct mips_cdmm_device_id { … }; /* * Match x86 CPUs for CPU specific drivers. * See documentation of "x86_match_cpu" for details. */ /* * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id. * Although gcc seems to ignore this error, clang fails without this define. */ #define x86cpu_device_id … struct x86_cpu_id { … }; /* Wild cards for x86_cpu_id::vendor, family, model and feature */ #define X86_VENDOR_ANY … #define X86_FAMILY_ANY … #define X86_MODEL_ANY … #define X86_STEPPING_ANY … #define X86_FEATURE_ANY … /* * Generic table type for matching CPU features. * @feature: the bit number of the feature (0 - 65535) */ struct cpu_feature { … }; #define IPACK_ANY_FORMAT … #define IPACK_ANY_ID … struct ipack_device_id { … }; #define MEI_CL_MODULE_PREFIX … #define MEI_CL_NAME_SIZE … #define MEI_CL_VERSION_ANY … /** * struct mei_cl_device_id - MEI client device identifier * @name: helper name * @uuid: client uuid * @version: client protocol version * @driver_info: information used by the driver. * * identifies mei client device by uuid and name */ struct mei_cl_device_id { … }; /* RapidIO */ #define RIO_ANY_ID … /** * struct rio_device_id - RIO device identifier * @did: RapidIO device ID * @vid: RapidIO vendor ID * @asm_did: RapidIO assembly device ID * @asm_vid: RapidIO assembly vendor ID * * Identifies a RapidIO device based on both the device/vendor IDs and * the assembly device/vendor IDs. */ struct rio_device_id { … }; struct mcb_device_id { … }; struct ulpi_device_id { … }; /** * struct fsl_mc_device_id - MC object device identifier * @vendor: vendor ID * @obj_type: MC object type * * Type of entries in the "device Id" table for MC object devices supported by * a MC object device driver. The last entry of the table has vendor set to 0x0 */ struct fsl_mc_device_id { … }; /** * struct tb_service_id - Thunderbolt service identifiers * @match_flags: Flags used to match the structure * @protocol_key: Protocol key the service supports * @protocol_id: Protocol id the service supports * @protocol_version: Version of the protocol * @protocol_revision: Revision of the protocol software * @driver_data: Driver specific data * * Thunderbolt XDomain services are exposed as devices where each device * carries the protocol information the service supports. Thunderbolt * XDomain service drivers match against that information. */ struct tb_service_id { … }; #define TBSVC_MATCH_PROTOCOL_KEY … #define TBSVC_MATCH_PROTOCOL_ID … #define TBSVC_MATCH_PROTOCOL_VERSION … #define TBSVC_MATCH_PROTOCOL_REVISION … /* USB Type-C Alternate Modes */ #define TYPEC_ANY_MODE … /** * struct typec_device_id - USB Type-C alternate mode identifiers * @svid: Standard or Vendor ID * @mode: Mode index * @driver_data: Driver specific data */ struct typec_device_id { … }; /** * struct tee_client_device_id - tee based device identifier * @uuid: For TEE based client devices we use the device uuid as * the identifier. */ struct tee_client_device_id { … }; /* WMI */ #define WMI_MODULE_PREFIX … /** * struct wmi_device_id - WMI device identifier * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba * @context: pointer to driver specific data */ struct wmi_device_id { … }; #define MHI_DEVICE_MODALIAS_FMT … #define MHI_NAME_SIZE … #define MHI_EP_DEVICE_MODALIAS_FMT … /** * struct mhi_device_id - MHI device identification * @chan: MHI channel name * @driver_data: driver data; */ struct mhi_device_id { … }; #define AUXILIARY_NAME_SIZE … #define AUXILIARY_MODULE_PREFIX … struct auxiliary_device_id { … }; /* Surface System Aggregator Module */ #define SSAM_MATCH_TARGET … #define SSAM_MATCH_INSTANCE … #define SSAM_MATCH_FUNCTION … struct ssam_device_id { … }; /* * DFL (Device Feature List) * * DFL defines a linked list of feature headers within the device MMIO space to * provide an extensible way of adding features. Software can walk through these * predefined data structures to enumerate features. It is now used in the FPGA. * See Documentation/fpga/dfl.rst for more information. * * The dfl bus type is introduced to match the individual feature devices (dfl * devices) for specific dfl drivers. */ /** * struct dfl_device_id - dfl device identifier * @type: DFL FIU type of the device. See enum dfl_id_type. * @feature_id: feature identifier local to its DFL FIU type. * @driver_data: driver specific data. */ struct dfl_device_id { … }; /* ISHTP (Integrated Sensor Hub Transport Protocol) */ #define ISHTP_MODULE_PREFIX … /** * struct ishtp_device_id - ISHTP device identifier * @guid: GUID of the device. * @driver_data: pointer to driver specific data */ struct ishtp_device_id { … }; #define CDX_ANY_ID … enum { … }; /** * struct cdx_device_id - CDX device identifier * @vendor: Vendor ID * @device: Device ID * @subvendor: Subsystem vendor ID (or CDX_ANY_ID) * @subdevice: Subsystem device ID (or CDX_ANY_ID) * @class: Device class * Most drivers do not need to specify class/class_mask * as vendor/device is normally sufficient. * @class_mask: Limit which sub-fields of the class field are compared. * @override_only: Match only when dev->driver_override is this driver. * * Type of entries in the "device Id" table for CDX devices supported by * a CDX device driver. */ struct cdx_device_id { … }; struct vchiq_device_id { … }; /** * struct coreboot_device_id - Identifies a coreboot table entry * @tag: tag ID * @driver_data: driver specific data */ struct coreboot_device_id { … }; #endif /* LINUX_MOD_DEVICETABLE_H */