xref: /openbmc/linux/include/linux/mod_devicetable.h (revision 57904291176fa16a981cefca5cbe1a0b50196792)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * Device tables which are exported to userspace via
4fb120da6SStephen Rothwell  * scripts/mod/file2alias.c.  You must keep that file in sync with this
51da177e4SLinus Torvalds  * header.
61da177e4SLinus Torvalds  */
71da177e4SLinus Torvalds 
81da177e4SLinus Torvalds #ifndef LINUX_MOD_DEVICETABLE_H
91da177e4SLinus Torvalds #define LINUX_MOD_DEVICETABLE_H
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds #ifdef __KERNEL__
121fb1ea0dSAndy Shevchenko #include <linux/mei.h>
131da177e4SLinus Torvalds #include <linux/types.h>
14e5354107SSamuel Ortiz #include <linux/uuid.h>
151da177e4SLinus Torvalds typedef unsigned long kernel_ulong_t;
161da177e4SLinus Torvalds #endif
171da177e4SLinus Torvalds 
181da177e4SLinus Torvalds #define PCI_ANY_ID (~0)
191da177e4SLinus Torvalds 
20cc6711b0SMax Gurtovoy enum {
21cc6711b0SMax Gurtovoy 	PCI_ID_F_VFIO_DRIVER_OVERRIDE = 1,
22cc6711b0SMax Gurtovoy };
23cc6711b0SMax Gurtovoy 
24229b4e07SChangbin Du /**
25229b4e07SChangbin Du  * struct pci_device_id - PCI device ID structure
26229b4e07SChangbin Du  * @vendor:		Vendor ID to match (or PCI_ANY_ID)
27229b4e07SChangbin Du  * @device:		Device ID to match (or PCI_ANY_ID)
28229b4e07SChangbin Du  * @subvendor:		Subsystem vendor ID to match (or PCI_ANY_ID)
29229b4e07SChangbin Du  * @subdevice:		Subsystem device ID to match (or PCI_ANY_ID)
30229b4e07SChangbin Du  * @class:		Device class, subclass, and "interface" to match.
31229b4e07SChangbin Du  *			See Appendix D of the PCI Local Bus Spec or
32229b4e07SChangbin Du  *			include/linux/pci_ids.h for a full list of classes.
33229b4e07SChangbin Du  *			Most drivers do not need to specify class/class_mask
34229b4e07SChangbin Du  *			as vendor/device is normally sufficient.
35229b4e07SChangbin Du  * @class_mask:		Limit which sub-fields of the class field are compared.
36229b4e07SChangbin Du  *			See drivers/scsi/sym53c8xx_2/ for example of usage.
37229b4e07SChangbin Du  * @driver_data:	Data private to the driver.
38229b4e07SChangbin Du  *			Most drivers don't need to use driver_data field.
39229b4e07SChangbin Du  *			Best practice is to use driver_data as an index
40229b4e07SChangbin Du  *			into a static list of equivalent device types,
41229b4e07SChangbin Du  *			instead of using it as a pointer.
42343b7258SMax Gurtovoy  * @override_only:	Match only when dev->driver_override is this driver.
43229b4e07SChangbin Du  */
441da177e4SLinus Torvalds struct pci_device_id {
451da177e4SLinus Torvalds 	__u32 vendor, device;		/* Vendor and device ID or PCI_ANY_ID*/
461da177e4SLinus Torvalds 	__u32 subvendor, subdevice;	/* Subsystem ID's or PCI_ANY_ID */
471da177e4SLinus Torvalds 	__u32 class, class_mask;	/* (class,subclass,prog-if) triplet */
481da177e4SLinus Torvalds 	kernel_ulong_t driver_data;	/* Data private to the driver */
49343b7258SMax Gurtovoy 	__u32 override_only;
501da177e4SLinus Torvalds };
511da177e4SLinus Torvalds 
521da177e4SLinus Torvalds 
531da177e4SLinus Torvalds #define IEEE1394_MATCH_VENDOR_ID	0x0001
541da177e4SLinus Torvalds #define IEEE1394_MATCH_MODEL_ID		0x0002
551da177e4SLinus Torvalds #define IEEE1394_MATCH_SPECIFIER_ID	0x0004
561da177e4SLinus Torvalds #define IEEE1394_MATCH_VERSION		0x0008
571da177e4SLinus Torvalds 
581da177e4SLinus Torvalds struct ieee1394_device_id {
591da177e4SLinus Torvalds 	__u32 match_flags;
601da177e4SLinus Torvalds 	__u32 vendor_id;
611da177e4SLinus Torvalds 	__u32 model_id;
621da177e4SLinus Torvalds 	__u32 specifier_id;
631da177e4SLinus Torvalds 	__u32 version;
646543becfSAndreas Schwab 	kernel_ulong_t driver_data;
651da177e4SLinus Torvalds };
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds 
681da177e4SLinus Torvalds /*
691da177e4SLinus Torvalds  * Device table entry for "new style" table-driven USB drivers.
701da177e4SLinus Torvalds  * User mode code can read these tables to choose which modules to load.
711da177e4SLinus Torvalds  * Declare the table as a MODULE_DEVICE_TABLE.
721da177e4SLinus Torvalds  *
731da177e4SLinus Torvalds  * A probe() parameter will point to a matching entry from this table.
741da177e4SLinus Torvalds  * Use the driver_info field for each match to hold information tied
751da177e4SLinus Torvalds  * to that match:  device quirks, etc.
761da177e4SLinus Torvalds  *
771da177e4SLinus Torvalds  * Terminate the driver's table with an all-zeroes entry.
781da177e4SLinus Torvalds  * Use the flag values to control which fields are compared.
791da177e4SLinus Torvalds  */
801da177e4SLinus Torvalds 
811da177e4SLinus Torvalds /**
821da177e4SLinus Torvalds  * struct usb_device_id - identifies USB devices for probing and hotplugging
8332357605SSharon Dvir  * @match_flags: Bit mask controlling which of the other fields are used to
8432357605SSharon Dvir  *	match against new devices. Any field except for driver_info may be
8532357605SSharon Dvir  *	used, although some only make sense in conjunction with other fields.
861da177e4SLinus Torvalds  *	This is usually set by a USB_DEVICE_*() macro, which sets all
871da177e4SLinus Torvalds  *	other fields in this structure except for driver_info.
881da177e4SLinus Torvalds  * @idVendor: USB vendor ID for a device; numbers are assigned
891da177e4SLinus Torvalds  *	by the USB forum to its members.
901da177e4SLinus Torvalds  * @idProduct: Vendor-assigned product ID.
911da177e4SLinus Torvalds  * @bcdDevice_lo: Low end of range of vendor-assigned product version numbers.
921da177e4SLinus Torvalds  *	This is also used to identify individual product versions, for
931da177e4SLinus Torvalds  *	a range consisting of a single device.
941da177e4SLinus Torvalds  * @bcdDevice_hi: High end of version number range.  The range of product
951da177e4SLinus Torvalds  *	versions is inclusive.
961da177e4SLinus Torvalds  * @bDeviceClass: Class of device; numbers are assigned
971da177e4SLinus Torvalds  *	by the USB forum.  Products may choose to implement classes,
981da177e4SLinus Torvalds  *	or be vendor-specific.  Device classes specify behavior of all
99de869917SMichael Opdenacker  *	the interfaces on a device.
1001da177e4SLinus Torvalds  * @bDeviceSubClass: Subclass of device; associated with bDeviceClass.
1011da177e4SLinus Torvalds  * @bDeviceProtocol: Protocol of device; associated with bDeviceClass.
1021da177e4SLinus Torvalds  * @bInterfaceClass: Class of interface; numbers are assigned
1031da177e4SLinus Torvalds  *	by the USB forum.  Products may choose to implement classes,
1041da177e4SLinus Torvalds  *	or be vendor-specific.  Interface classes specify behavior only
1051da177e4SLinus Torvalds  *	of a given interface; other interfaces may support other classes.
1061da177e4SLinus Torvalds  * @bInterfaceSubClass: Subclass of interface; associated with bInterfaceClass.
1071da177e4SLinus Torvalds  * @bInterfaceProtocol: Protocol of interface; associated with bInterfaceClass.
10881df2d59SBjørn Mork  * @bInterfaceNumber: Number of interface; composite devices may use
10981df2d59SBjørn Mork  *	fixed interface numbers to differentiate between vendor-specific
11081df2d59SBjørn Mork  *	interfaces.
1111da177e4SLinus Torvalds  * @driver_info: Holds information used by the driver.  Usually it holds
1121da177e4SLinus Torvalds  *	a pointer to a descriptor understood by the driver, or perhaps
1131da177e4SLinus Torvalds  *	device flags.
1141da177e4SLinus Torvalds  *
1151da177e4SLinus Torvalds  * In most cases, drivers will create a table of device IDs by using
1161da177e4SLinus Torvalds  * USB_DEVICE(), or similar macros designed for that purpose.
1171da177e4SLinus Torvalds  * They will then export it to userspace using MODULE_DEVICE_TABLE(),
1181da177e4SLinus Torvalds  * and provide it to the USB core through their usb_driver structure.
1191da177e4SLinus Torvalds  *
1201da177e4SLinus Torvalds  * See the usb_match_id() function for information about how matches are
1211da177e4SLinus Torvalds  * performed.  Briefly, you will normally use one of several macros to help
1221da177e4SLinus Torvalds  * construct these entries.  Each entry you provide will either identify
1231da177e4SLinus Torvalds  * one or more specific products, or will identify a class of products
1241da177e4SLinus Torvalds  * which have agreed to behave the same.  You should put the more specific
1251da177e4SLinus Torvalds  * matches towards the beginning of your table, so that driver_info can
1261da177e4SLinus Torvalds  * record quirks of specific products.
1271da177e4SLinus Torvalds  */
1281da177e4SLinus Torvalds struct usb_device_id {
1291da177e4SLinus Torvalds 	/* which fields to match against? */
1301da177e4SLinus Torvalds 	__u16		match_flags;
1311da177e4SLinus Torvalds 
1321da177e4SLinus Torvalds 	/* Used for product specific matches; range is inclusive */
1331da177e4SLinus Torvalds 	__u16		idVendor;
1341da177e4SLinus Torvalds 	__u16		idProduct;
1351da177e4SLinus Torvalds 	__u16		bcdDevice_lo;
1361da177e4SLinus Torvalds 	__u16		bcdDevice_hi;
1371da177e4SLinus Torvalds 
1381da177e4SLinus Torvalds 	/* Used for device class matches */
1391da177e4SLinus Torvalds 	__u8		bDeviceClass;
1401da177e4SLinus Torvalds 	__u8		bDeviceSubClass;
1411da177e4SLinus Torvalds 	__u8		bDeviceProtocol;
1421da177e4SLinus Torvalds 
1431da177e4SLinus Torvalds 	/* Used for interface class matches */
1441da177e4SLinus Torvalds 	__u8		bInterfaceClass;
1451da177e4SLinus Torvalds 	__u8		bInterfaceSubClass;
1461da177e4SLinus Torvalds 	__u8		bInterfaceProtocol;
1471da177e4SLinus Torvalds 
14881df2d59SBjørn Mork 	/* Used for vendor-specific interface matches */
14981df2d59SBjørn Mork 	__u8		bInterfaceNumber;
15081df2d59SBjørn Mork 
1511da177e4SLinus Torvalds 	/* not matched against */
152fec1868eSGreg Kroah-Hartman 	kernel_ulong_t	driver_info
153fec1868eSGreg Kroah-Hartman 		__attribute__((aligned(sizeof(kernel_ulong_t))));
1541da177e4SLinus Torvalds };
1551da177e4SLinus Torvalds 
1561da177e4SLinus Torvalds /* Some useful macros to use to create struct usb_device_id */
1571da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_VENDOR		0x0001
1581da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_PRODUCT		0x0002
1591da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_DEV_LO		0x0004
1601da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_DEV_HI		0x0008
1611da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_DEV_CLASS		0x0010
1621da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_DEV_SUBCLASS	0x0020
1631da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_DEV_PROTOCOL	0x0040
1641da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_INT_CLASS		0x0080
1651da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_INT_SUBCLASS	0x0100
1661da177e4SLinus Torvalds #define USB_DEVICE_ID_MATCH_INT_PROTOCOL	0x0200
16781df2d59SBjørn Mork #define USB_DEVICE_ID_MATCH_INT_NUMBER		0x0400
1681da177e4SLinus Torvalds 
169e8c84f9aSJiri Slaby #define HID_ANY_ID				(~0)
1707431fb76SHenrik Rydberg #define HID_BUS_ANY				0xffff
1714d53b801SHenrik Rydberg #define HID_GROUP_ANY				0x0000
172e8c84f9aSJiri Slaby 
173e8c84f9aSJiri Slaby struct hid_device_id {
174e8c84f9aSJiri Slaby 	__u16 bus;
1754d53b801SHenrik Rydberg 	__u16 group;
176e8c84f9aSJiri Slaby 	__u32 vendor;
177e8c84f9aSJiri Slaby 	__u32 product;
1786543becfSAndreas Schwab 	kernel_ulong_t driver_data;
179e8c84f9aSJiri Slaby };
180e8c84f9aSJiri Slaby 
1811da177e4SLinus Torvalds /* s390 CCW devices */
1821da177e4SLinus Torvalds struct ccw_device_id {
1831da177e4SLinus Torvalds 	__u16	match_flags;	/* which fields to match against */
1841da177e4SLinus Torvalds 
1851da177e4SLinus Torvalds 	__u16	cu_type;	/* control unit type     */
1861da177e4SLinus Torvalds 	__u16	dev_type;	/* device type           */
1871da177e4SLinus Torvalds 	__u8	cu_model;	/* control unit model    */
1881da177e4SLinus Torvalds 	__u8	dev_model;	/* device model          */
1891da177e4SLinus Torvalds 
1901da177e4SLinus Torvalds 	kernel_ulong_t driver_info;
1911da177e4SLinus Torvalds };
1921da177e4SLinus Torvalds 
1931da177e4SLinus Torvalds #define CCW_DEVICE_ID_MATCH_CU_TYPE		0x01
1941da177e4SLinus Torvalds #define CCW_DEVICE_ID_MATCH_CU_MODEL		0x02
1951da177e4SLinus Torvalds #define CCW_DEVICE_ID_MATCH_DEVICE_TYPE		0x04
1961da177e4SLinus Torvalds #define CCW_DEVICE_ID_MATCH_DEVICE_MODEL	0x08
1971da177e4SLinus Torvalds 
1981534c382SMartin Schwidefsky /* s390 AP bus devices */
1991534c382SMartin Schwidefsky struct ap_device_id {
2001534c382SMartin Schwidefsky 	__u16 match_flags;	/* which fields to match against */
2011534c382SMartin Schwidefsky 	__u8 dev_type;		/* device type */
2021534c382SMartin Schwidefsky 	kernel_ulong_t driver_info;
2031534c382SMartin Schwidefsky };
2041534c382SMartin Schwidefsky 
205e28d2af4SIngo Tuchscherer #define AP_DEVICE_ID_MATCH_CARD_TYPE		0x01
206e28d2af4SIngo Tuchscherer #define AP_DEVICE_ID_MATCH_QUEUE_TYPE		0x02
2071534c382SMartin Schwidefsky 
2087e9db9eaSCornelia Huck /* s390 css bus devices (subchannels) */
2097e9db9eaSCornelia Huck struct css_device_id {
210f08adc00SCornelia Huck 	__u8 match_flags;
2117e9db9eaSCornelia Huck 	__u8 type; /* subchannel type */
2127e9db9eaSCornelia Huck 	kernel_ulong_t driver_data;
2137e9db9eaSCornelia Huck };
2147e9db9eaSCornelia Huck 
215d273845eSAlexander Graf #define ACPI_ID_LEN	16
21629b71a1cSThomas Renninger 
21729b71a1cSThomas Renninger struct acpi_device_id {
21829b71a1cSThomas Renninger 	__u8 id[ACPI_ID_LEN];
21929b71a1cSThomas Renninger 	kernel_ulong_t driver_data;
22026095a01SSuthikulpanit, Suravee 	__u32 cls;
22126095a01SSuthikulpanit, Suravee 	__u32 cls_msk;
22229b71a1cSThomas Renninger };
2231da177e4SLinus Torvalds 
224007cfa13SAndy Shevchenko /**
225007cfa13SAndy Shevchenko  * ACPI_DEVICE_CLASS - macro used to describe an ACPI device with
226007cfa13SAndy Shevchenko  * the PCI-defined class-code information
227007cfa13SAndy Shevchenko  *
228007cfa13SAndy Shevchenko  * @_cls : the class, subclass, prog-if triple for this device
229007cfa13SAndy Shevchenko  * @_msk : the class mask for this device
230007cfa13SAndy Shevchenko  *
231007cfa13SAndy Shevchenko  * This macro is used to create a struct acpi_device_id that matches a
232007cfa13SAndy Shevchenko  * specific PCI class. The .id and .driver_data fields will be left
233007cfa13SAndy Shevchenko  * initialized with the default value.
234007cfa13SAndy Shevchenko  */
235007cfa13SAndy Shevchenko #define ACPI_DEVICE_CLASS(_cls, _msk)	.cls = (_cls), .cls_msk = (_msk),
236007cfa13SAndy Shevchenko 
2371da177e4SLinus Torvalds #define PNP_ID_LEN	8
2381da177e4SLinus Torvalds #define PNP_MAX_DEVICES	8
2391da177e4SLinus Torvalds 
2401da177e4SLinus Torvalds struct pnp_device_id {
2411da177e4SLinus Torvalds 	__u8 id[PNP_ID_LEN];
2421da177e4SLinus Torvalds 	kernel_ulong_t driver_data;
2431da177e4SLinus Torvalds };
2441da177e4SLinus Torvalds 
2451da177e4SLinus Torvalds struct pnp_card_device_id {
2461da177e4SLinus Torvalds 	__u8 id[PNP_ID_LEN];
2471da177e4SLinus Torvalds 	kernel_ulong_t driver_data;
2481da177e4SLinus Torvalds 	struct {
2491da177e4SLinus Torvalds 		__u8 id[PNP_ID_LEN];
2501da177e4SLinus Torvalds 	} devs[PNP_MAX_DEVICES];
2511da177e4SLinus Torvalds };
2521da177e4SLinus Torvalds 
2531da177e4SLinus Torvalds 
2541da177e4SLinus Torvalds #define SERIO_ANY	0xff
2551da177e4SLinus Torvalds 
2561da177e4SLinus Torvalds struct serio_device_id {
2571da177e4SLinus Torvalds 	__u8 type;
2581da177e4SLinus Torvalds 	__u8 extra;
2591da177e4SLinus Torvalds 	__u8 id;
2601da177e4SLinus Torvalds 	__u8 proto;
2611da177e4SLinus Torvalds };
2621da177e4SLinus Torvalds 
263da23ac1eSSubhransu S. Prusty struct hda_device_id {
264da23ac1eSSubhransu S. Prusty 	__u32 vendor_id;
265da23ac1eSSubhransu S. Prusty 	__u32 rev_id;
266da23ac1eSSubhransu S. Prusty 	__u8 api_version;
267da23ac1eSSubhransu S. Prusty 	const char *name;
268da23ac1eSSubhransu S. Prusty 	unsigned long driver_data;
269da23ac1eSSubhransu S. Prusty };
270da23ac1eSSubhransu S. Prusty 
2719251345dSVinod Koul struct sdw_device_id {
2729251345dSVinod Koul 	__u16 mfg_id;
2739251345dSVinod Koul 	__u16 part_id;
274b5924268SPierre-Louis Bossart 	__u8  sdw_version;
275b5924268SPierre-Louis Bossart 	__u8  class_id;
2769251345dSVinod Koul 	kernel_ulong_t driver_data;
2779251345dSVinod Koul };
2789251345dSVinod Koul 
2795e655772SJeff Mahoney /*
2805e655772SJeff Mahoney  * Struct used for matching a device
2815e655772SJeff Mahoney  */
282851c63e3SDaniel Thompson struct of_device_id {
2835e655772SJeff Mahoney 	char	name[32];
2845e655772SJeff Mahoney 	char	type[32];
2855e655772SJeff Mahoney 	char	compatible[128];
286d7c9a53fSUwe Kleine-König 	const void *data;
2875e655772SJeff Mahoney };
2885e655772SJeff Mahoney 
289fb120da6SStephen Rothwell /* VIO */
290fb120da6SStephen Rothwell struct vio_device_id {
291fb120da6SStephen Rothwell 	char type[32];
292fb120da6SStephen Rothwell 	char compat[32];
293fb120da6SStephen Rothwell };
2941da177e4SLinus Torvalds 
2951ad275e3SDominik Brodowski /* PCMCIA */
2961ad275e3SDominik Brodowski 
2971ad275e3SDominik Brodowski struct pcmcia_device_id {
2981ad275e3SDominik Brodowski 	__u16		match_flags;
2991ad275e3SDominik Brodowski 
3001ad275e3SDominik Brodowski 	__u16		manf_id;
3011ad275e3SDominik Brodowski 	__u16		card_id;
3021ad275e3SDominik Brodowski 
3031ad275e3SDominik Brodowski 	__u8		func_id;
3041ad275e3SDominik Brodowski 
3051ad275e3SDominik Brodowski 	/* for real multi-function devices */
3061ad275e3SDominik Brodowski 	__u8		function;
3071ad275e3SDominik Brodowski 
3084fb7edceSKars de Jong 	/* for pseudo multi-function devices */
3091ad275e3SDominik Brodowski 	__u8		device_no;
3101ad275e3SDominik Brodowski 
3116543becfSAndreas Schwab 	__u32		prod_id_hash[4];
3121ad275e3SDominik Brodowski 
313aecab27aSDominik Brodowski 	/* not matched against in kernelspace */
314aecab27aSDominik Brodowski 	const char *	prod_id[4];
315aecab27aSDominik Brodowski 
3161ad275e3SDominik Brodowski 	/* not matched against */
3171ad275e3SDominik Brodowski 	kernel_ulong_t	driver_info;
318ea7b3882SDominik Brodowski 	char *		cisfile;
3191ad275e3SDominik Brodowski };
3201ad275e3SDominik Brodowski 
3211ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_MANF_ID	0x0001
3221ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_CARD_ID	0x0002
3231ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_FUNC_ID	0x0004
3241ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_FUNCTION	0x0008
3251ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_PROD_ID1	0x0010
3261ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_PROD_ID2	0x0020
3271ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_PROD_ID3	0x0040
3281ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_PROD_ID4	0x0080
3291ad275e3SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_DEVICE_NO	0x0100
330ea7b3882SDominik Brodowski #define PCMCIA_DEV_ID_MATCH_FAKE_CIS	0x0200
331f602ff7eSDominik Brodowski #define PCMCIA_DEV_ID_MATCH_ANONYMOUS	0x0400
3321ad275e3SDominik Brodowski 
333ddc5d341SDmitry Torokhov /* Input */
334ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_EV_MAX		0x1f
335dc24f0e7SSam Ravnborg #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING	0x71
33603bac96fSDmitry Torokhov #define INPUT_DEVICE_ID_KEY_MAX		0x2ff
337ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_REL_MAX		0x0f
338b04c99e3SLinus Torvalds #define INPUT_DEVICE_ID_ABS_MAX		0x3f
339ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MSC_MAX		0x07
340ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_LED_MAX		0x0f
341ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_SND_MAX		0x07
342ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_FF_MAX		0x7f
343c463bb2aSMerlijn Wajer #define INPUT_DEVICE_ID_SW_MAX		0x10
3448724ecb0SDmitry Torokhov #define INPUT_DEVICE_ID_PROP_MAX	0x1f
345ddc5d341SDmitry Torokhov 
346ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_BUS	1
347ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_VENDOR	2
348ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_PRODUCT	4
349ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_VERSION	8
350ddc5d341SDmitry Torokhov 
351ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_EVBIT	0x0010
352ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_KEYBIT	0x0020
353ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_RELBIT	0x0040
354ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_ABSBIT	0x0080
355ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_MSCIT	0x0100
356ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_LEDBIT	0x0200
357ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_SNDBIT	0x0400
358ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_FFBIT	0x0800
359ddc5d341SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_SWBIT	0x1000
3608724ecb0SDmitry Torokhov #define INPUT_DEVICE_ID_MATCH_PROPBIT	0x2000
361ddc5d341SDmitry Torokhov 
362ddc5d341SDmitry Torokhov struct input_device_id {
363ddc5d341SDmitry Torokhov 
364ddc5d341SDmitry Torokhov 	kernel_ulong_t flags;
365ddc5d341SDmitry Torokhov 
366ddc5d341SDmitry Torokhov 	__u16 bustype;
367ddc5d341SDmitry Torokhov 	__u16 vendor;
368ddc5d341SDmitry Torokhov 	__u16 product;
369ddc5d341SDmitry Torokhov 	__u16 version;
370ddc5d341SDmitry Torokhov 
371ddc5d341SDmitry Torokhov 	kernel_ulong_t evbit[INPUT_DEVICE_ID_EV_MAX / BITS_PER_LONG + 1];
372ddc5d341SDmitry Torokhov 	kernel_ulong_t keybit[INPUT_DEVICE_ID_KEY_MAX / BITS_PER_LONG + 1];
373ddc5d341SDmitry Torokhov 	kernel_ulong_t relbit[INPUT_DEVICE_ID_REL_MAX / BITS_PER_LONG + 1];
374ddc5d341SDmitry Torokhov 	kernel_ulong_t absbit[INPUT_DEVICE_ID_ABS_MAX / BITS_PER_LONG + 1];
375ddc5d341SDmitry Torokhov 	kernel_ulong_t mscbit[INPUT_DEVICE_ID_MSC_MAX / BITS_PER_LONG + 1];
376ddc5d341SDmitry Torokhov 	kernel_ulong_t ledbit[INPUT_DEVICE_ID_LED_MAX / BITS_PER_LONG + 1];
377ddc5d341SDmitry Torokhov 	kernel_ulong_t sndbit[INPUT_DEVICE_ID_SND_MAX / BITS_PER_LONG + 1];
378ddc5d341SDmitry Torokhov 	kernel_ulong_t ffbit[INPUT_DEVICE_ID_FF_MAX / BITS_PER_LONG + 1];
379ddc5d341SDmitry Torokhov 	kernel_ulong_t swbit[INPUT_DEVICE_ID_SW_MAX / BITS_PER_LONG + 1];
3808724ecb0SDmitry Torokhov 	kernel_ulong_t propbit[INPUT_DEVICE_ID_PROP_MAX / BITS_PER_LONG + 1];
381ddc5d341SDmitry Torokhov 
382ddc5d341SDmitry Torokhov 	kernel_ulong_t driver_info;
383ddc5d341SDmitry Torokhov };
384ddc5d341SDmitry Torokhov 
38507563c71SMichael Tokarev /* EISA */
38607563c71SMichael Tokarev 
38707563c71SMichael Tokarev #define EISA_SIG_LEN   8
38807563c71SMichael Tokarev 
38907563c71SMichael Tokarev /* The EISA signature, in ASCII form, null terminated */
39007563c71SMichael Tokarev struct eisa_device_id {
39107563c71SMichael Tokarev 	char          sig[EISA_SIG_LEN];
39207563c71SMichael Tokarev 	kernel_ulong_t driver_data;
39307563c71SMichael Tokarev };
39407563c71SMichael Tokarev 
39507563c71SMichael Tokarev #define EISA_DEVICE_MODALIAS_FMT "eisa:s%s"
39607563c71SMichael Tokarev 
397f2439b26SKyle McMartin struct parisc_device_id {
398f2439b26SKyle McMartin 	__u8	hw_type;	/* 5 bits used */
399f2439b26SKyle McMartin 	__u8	hversion_rev;	/* 4 bits */
400f2439b26SKyle McMartin 	__u16	hversion;	/* 12 bits */
401f2439b26SKyle McMartin 	__u32	sversion;	/* 20 bits */
402f2439b26SKyle McMartin };
403f2439b26SKyle McMartin 
404f354ef8aSKyle McMartin #define PA_HWTYPE_ANY_ID	0xff
405f354ef8aSKyle McMartin #define PA_HVERSION_REV_ANY_ID	0xff
406f354ef8aSKyle McMartin #define PA_HVERSION_ANY_ID	0xffff
407f354ef8aSKyle McMartin #define PA_SVERSION_ANY_ID	0xffffffff
408f2439b26SKyle McMartin 
4093b38bea0SPierre Ossman /* SDIO */
4103b38bea0SPierre Ossman 
4113b38bea0SPierre Ossman #define SDIO_ANY_ID (~0)
4123b38bea0SPierre Ossman 
4133b38bea0SPierre Ossman struct sdio_device_id {
4143b38bea0SPierre Ossman 	__u8	class;			/* Standard interface or SDIO_ANY_ID */
4153b38bea0SPierre Ossman 	__u16	vendor;			/* Vendor or SDIO_ANY_ID */
4163b38bea0SPierre Ossman 	__u16	device;			/* Device ID or SDIO_ANY_ID */
4176543becfSAndreas Schwab 	kernel_ulong_t driver_data;	/* Data private to the driver */
4183b38bea0SPierre Ossman };
4193b38bea0SPierre Ossman 
42061e115a5SMichael Buesch /* SSB core, see drivers/ssb/ */
42161e115a5SMichael Buesch struct ssb_device_id {
42261e115a5SMichael Buesch 	__u16	vendor;
42361e115a5SMichael Buesch 	__u16	coreid;
42461e115a5SMichael Buesch 	__u8	revision;
425b01a60beSArnd Bergmann 	__u8	__pad;
426b01a60beSArnd Bergmann } __attribute__((packed, aligned(2)));
42761e115a5SMichael Buesch #define SSB_DEVICE(_vendor, _coreid, _revision)  \
42861e115a5SMichael Buesch 	{ .vendor = _vendor, .coreid = _coreid, .revision = _revision, }
42961e115a5SMichael Buesch 
43061e115a5SMichael Buesch #define SSB_ANY_VENDOR		0xFFFF
43161e115a5SMichael Buesch #define SSB_ANY_ID		0xFFFF
43261e115a5SMichael Buesch #define SSB_ANY_REV		0xFF
43361e115a5SMichael Buesch 
4348369ae33SRafał Miłecki /* Broadcom's specific AMBA core, see drivers/bcma/ */
4358369ae33SRafał Miłecki struct bcma_device_id {
4368369ae33SRafał Miłecki 	__u16	manuf;
4378369ae33SRafał Miłecki 	__u16	id;
4388369ae33SRafał Miłecki 	__u8	rev;
4398369ae33SRafał Miłecki 	__u8	class;
440b01a60beSArnd Bergmann } __attribute__((packed,aligned(2)));
4418369ae33SRafał Miłecki #define BCMA_CORE(_manuf, _id, _rev, _class)  \
4428369ae33SRafał Miłecki 	{ .manuf = _manuf, .id = _id, .rev = _rev, .class = _class, }
4438369ae33SRafał Miłecki 
4448369ae33SRafał Miłecki #define BCMA_ANY_MANUF		0xFFFF
4458369ae33SRafał Miłecki #define BCMA_ANY_ID		0xFFFF
4468369ae33SRafał Miłecki #define BCMA_ANY_REV		0xFF
4478369ae33SRafał Miłecki #define BCMA_ANY_CLASS		0xFF
4488369ae33SRafał Miłecki 
449ec3d41c4SRusty Russell struct virtio_device_id {
450ec3d41c4SRusty Russell 	__u32 device;
451ec3d41c4SRusty Russell 	__u32 vendor;
452ec3d41c4SRusty Russell };
453ec3d41c4SRusty Russell #define VIRTIO_DEV_ANY_ID	0xffffffff
454ec3d41c4SRusty Russell 
45517be18c2SK. Y. Srinivasan /*
45617be18c2SK. Y. Srinivasan  * For Hyper-V devices we use the device guid as the id.
45717be18c2SK. Y. Srinivasan  */
45817be18c2SK. Y. Srinivasan struct hv_vmbus_device_id {
459b7d18c57SAndy Shevchenko 	guid_t guid;
4606543becfSAndreas Schwab 	kernel_ulong_t driver_data;	/* Data private to the driver */
46117be18c2SK. Y. Srinivasan };
46217be18c2SK. Y. Srinivasan 
463bcabbccaSOhad Ben-Cohen /* rpmsg */
464bcabbccaSOhad Ben-Cohen 
465bcabbccaSOhad Ben-Cohen #define RPMSG_NAME_SIZE			32
466bcabbccaSOhad Ben-Cohen #define RPMSG_DEVICE_MODALIAS_FMT	"rpmsg:%s"
467bcabbccaSOhad Ben-Cohen 
468bcabbccaSOhad Ben-Cohen struct rpmsg_device_id {
469bcabbccaSOhad Ben-Cohen 	char name[RPMSG_NAME_SIZE];
47060302ce4SStephan Gerhold 	kernel_ulong_t driver_data;
471bcabbccaSOhad Ben-Cohen };
472bcabbccaSOhad Ben-Cohen 
473d2653e92SJean Delvare /* i2c */
474d2653e92SJean Delvare 
475d2653e92SJean Delvare #define I2C_NAME_SIZE	20
476d2653e92SJean Delvare #define I2C_MODULE_PREFIX "i2c:"
477d2653e92SJean Delvare 
478d2653e92SJean Delvare struct i2c_device_id {
479d2653e92SJean Delvare 	char name[I2C_NAME_SIZE];
4806543becfSAndreas Schwab 	kernel_ulong_t driver_data;	/* Data private to the driver */
481d2653e92SJean Delvare };
482d2653e92SJean Delvare 
4835e8cb403SKishon Vijay Abraham I /* pci_epf */
4845e8cb403SKishon Vijay Abraham I 
4855e8cb403SKishon Vijay Abraham I #define PCI_EPF_NAME_SIZE	20
4865e8cb403SKishon Vijay Abraham I #define PCI_EPF_MODULE_PREFIX	"pci_epf:"
4875e8cb403SKishon Vijay Abraham I 
4885e8cb403SKishon Vijay Abraham I struct pci_epf_device_id {
4895e8cb403SKishon Vijay Abraham I 	char name[PCI_EPF_NAME_SIZE];
4905e8cb403SKishon Vijay Abraham I 	kernel_ulong_t driver_data;
4915e8cb403SKishon Vijay Abraham I };
4925e8cb403SKishon Vijay Abraham I 
4933a379bbcSBoris Brezillon /* i3c */
4943a379bbcSBoris Brezillon 
4953a379bbcSBoris Brezillon #define I3C_MATCH_DCR			0x1
4963a379bbcSBoris Brezillon #define I3C_MATCH_MANUF			0x2
4973a379bbcSBoris Brezillon #define I3C_MATCH_PART			0x4
4983a379bbcSBoris Brezillon #define I3C_MATCH_EXTRA_INFO		0x8
4993a379bbcSBoris Brezillon 
5003a379bbcSBoris Brezillon struct i3c_device_id {
5013a379bbcSBoris Brezillon 	__u8 match_flags;
5023a379bbcSBoris Brezillon 	__u8 dcr;
5033a379bbcSBoris Brezillon 	__u16 manuf_id;
5043a379bbcSBoris Brezillon 	__u16 part_id;
5053a379bbcSBoris Brezillon 	__u16 extra_info;
5063a379bbcSBoris Brezillon 
5073a379bbcSBoris Brezillon 	const void *data;
5083a379bbcSBoris Brezillon };
5093a379bbcSBoris Brezillon 
51075368bf6SAnton Vorontsov /* spi */
51175368bf6SAnton Vorontsov 
51275368bf6SAnton Vorontsov #define SPI_NAME_SIZE	32
513e0626e38SAnton Vorontsov #define SPI_MODULE_PREFIX "spi:"
51475368bf6SAnton Vorontsov 
51575368bf6SAnton Vorontsov struct spi_device_id {
51675368bf6SAnton Vorontsov 	char name[SPI_NAME_SIZE];
5176543becfSAndreas Schwab 	kernel_ulong_t driver_data;	/* Data private to the driver */
51875368bf6SAnton Vorontsov };
51975368bf6SAnton Vorontsov 
5203648e78eSSagar Dharia /* SLIMbus */
5213648e78eSSagar Dharia 
5223648e78eSSagar Dharia #define SLIMBUS_NAME_SIZE	32
5233648e78eSSagar Dharia #define SLIMBUS_MODULE_PREFIX	"slim:"
5243648e78eSSagar Dharia 
5253648e78eSSagar Dharia struct slim_device_id {
5263648e78eSSagar Dharia 	__u16 manf_id, prod_code;
5273648e78eSSagar Dharia 	__u16 dev_index, instance;
5283648e78eSSagar Dharia 
5293648e78eSSagar Dharia 	/* Data private to the driver */
5303648e78eSSagar Dharia 	kernel_ulong_t driver_data;
5313648e78eSSagar Dharia };
5323648e78eSSagar Dharia 
5336adba21eSSrinivas Kandagatla #define APR_NAME_SIZE	32
5346adba21eSSrinivas Kandagatla #define APR_MODULE_PREFIX "apr:"
5356adba21eSSrinivas Kandagatla 
5366adba21eSSrinivas Kandagatla struct apr_device_id {
5376adba21eSSrinivas Kandagatla 	char name[APR_NAME_SIZE];
5386adba21eSSrinivas Kandagatla 	__u32 domain_id;
5396adba21eSSrinivas Kandagatla 	__u32 svc_id;
5406adba21eSSrinivas Kandagatla 	__u32 svc_version;
5416adba21eSSrinivas Kandagatla 	kernel_ulong_t driver_data;	/* Data private to the driver */
5426adba21eSSrinivas Kandagatla };
5436adba21eSSrinivas Kandagatla 
5445a86bf34SKenneth Heitke #define SPMI_NAME_SIZE	32
5455a86bf34SKenneth Heitke #define SPMI_MODULE_PREFIX "spmi:"
5465a86bf34SKenneth Heitke 
5475a86bf34SKenneth Heitke struct spmi_device_id {
5485a86bf34SKenneth Heitke 	char name[SPMI_NAME_SIZE];
5495a86bf34SKenneth Heitke 	kernel_ulong_t driver_data;	/* Data private to the driver */
5505a86bf34SKenneth Heitke };
5515a86bf34SKenneth Heitke 
552d945b697SDavid Woodhouse /* dmi */
553d945b697SDavid Woodhouse enum dmi_field {
554d945b697SDavid Woodhouse 	DMI_NONE,
555d945b697SDavid Woodhouse 	DMI_BIOS_VENDOR,
556d945b697SDavid Woodhouse 	DMI_BIOS_VERSION,
557d945b697SDavid Woodhouse 	DMI_BIOS_DATE,
558f5152f4dSErwan Velu 	DMI_BIOS_RELEASE,
559f5152f4dSErwan Velu 	DMI_EC_FIRMWARE_RELEASE,
560d945b697SDavid Woodhouse 	DMI_SYS_VENDOR,
561d945b697SDavid Woodhouse 	DMI_PRODUCT_NAME,
562d945b697SDavid Woodhouse 	DMI_PRODUCT_VERSION,
563d945b697SDavid Woodhouse 	DMI_PRODUCT_SERIAL,
564d945b697SDavid Woodhouse 	DMI_PRODUCT_UUID,
565b23908d3SSimon Glass 	DMI_PRODUCT_SKU,
566c61872c9SMika Westerberg 	DMI_PRODUCT_FAMILY,
567d945b697SDavid Woodhouse 	DMI_BOARD_VENDOR,
568d945b697SDavid Woodhouse 	DMI_BOARD_NAME,
569d945b697SDavid Woodhouse 	DMI_BOARD_VERSION,
570d945b697SDavid Woodhouse 	DMI_BOARD_SERIAL,
571d945b697SDavid Woodhouse 	DMI_BOARD_ASSET_TAG,
572d945b697SDavid Woodhouse 	DMI_CHASSIS_VENDOR,
573d945b697SDavid Woodhouse 	DMI_CHASSIS_TYPE,
574d945b697SDavid Woodhouse 	DMI_CHASSIS_VERSION,
575d945b697SDavid Woodhouse 	DMI_CHASSIS_SERIAL,
576d945b697SDavid Woodhouse 	DMI_CHASSIS_ASSET_TAG,
577d945b697SDavid Woodhouse 	DMI_STRING_MAX,
578de40614dSAlex Hung 	DMI_OEM_STRING,	/* special case - will not be in dmi_ident */
579d945b697SDavid Woodhouse };
580d945b697SDavid Woodhouse 
581d945b697SDavid Woodhouse struct dmi_strmatch {
5825017b285SJani Nikula 	unsigned char slot:7;
5835017b285SJani Nikula 	unsigned char exact_match:1;
584d945b697SDavid Woodhouse 	char substr[79];
585d945b697SDavid Woodhouse };
586d945b697SDavid Woodhouse 
587d945b697SDavid Woodhouse struct dmi_system_id {
588d945b697SDavid Woodhouse 	int (*callback)(const struct dmi_system_id *);
589d945b697SDavid Woodhouse 	const char *ident;
590d945b697SDavid Woodhouse 	struct dmi_strmatch matches[4];
591d945b697SDavid Woodhouse 	void *driver_data;
592d945b697SDavid Woodhouse };
59340413dcbSAlexey Dobriyan /*
59440413dcbSAlexey Dobriyan  * struct dmi_device_id appears during expansion of
59540413dcbSAlexey Dobriyan  * "MODULE_DEVICE_TABLE(dmi, x)". Compiler doesn't look inside it
59640413dcbSAlexey Dobriyan  * but this is enough for gcc 3.4.6 to error out:
59740413dcbSAlexey Dobriyan  *	error: storage size of '__mod_dmi_device_table' isn't known
59840413dcbSAlexey Dobriyan  */
59940413dcbSAlexey Dobriyan #define dmi_device_id dmi_system_id
600d945b697SDavid Woodhouse 
6015017b285SJani Nikula #define DMI_MATCH(a, b)	{ .slot = a, .substr = b }
6025017b285SJani Nikula #define DMI_EXACT_MATCH(a, b)	{ .slot = a, .substr = b, .exact_match = 1 }
603d2653e92SJean Delvare 
60457fee4a5SEric Miao #define PLATFORM_NAME_SIZE	20
60557fee4a5SEric Miao #define PLATFORM_MODULE_PREFIX	"platform:"
60657fee4a5SEric Miao 
60757fee4a5SEric Miao struct platform_device_id {
60857fee4a5SEric Miao 	char name[PLATFORM_NAME_SIZE];
6096543becfSAndreas Schwab 	kernel_ulong_t driver_data;
61057fee4a5SEric Miao };
61157fee4a5SEric Miao 
612648ea013SFlorian Fainelli #define MDIO_NAME_SIZE		32
6138626d3b4SDavid Woodhouse #define MDIO_MODULE_PREFIX	"mdio:"
6148626d3b4SDavid Woodhouse 
615d2ed49cfSRussell King #define MDIO_ID_FMT "%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u"
6168626d3b4SDavid Woodhouse #define MDIO_ID_ARGS(_id) \
617d2ed49cfSRussell King 	((_id)>>31) & 1, ((_id)>>30) & 1, ((_id)>>29) & 1, ((_id)>>28) & 1, \
6188626d3b4SDavid Woodhouse 	((_id)>>27) & 1, ((_id)>>26) & 1, ((_id)>>25) & 1, ((_id)>>24) & 1, \
6198626d3b4SDavid Woodhouse 	((_id)>>23) & 1, ((_id)>>22) & 1, ((_id)>>21) & 1, ((_id)>>20) & 1, \
6208626d3b4SDavid Woodhouse 	((_id)>>19) & 1, ((_id)>>18) & 1, ((_id)>>17) & 1, ((_id)>>16) & 1, \
6218626d3b4SDavid Woodhouse 	((_id)>>15) & 1, ((_id)>>14) & 1, ((_id)>>13) & 1, ((_id)>>12) & 1, \
6228626d3b4SDavid Woodhouse 	((_id)>>11) & 1, ((_id)>>10) & 1, ((_id)>>9) & 1, ((_id)>>8) & 1, \
6238626d3b4SDavid Woodhouse 	((_id)>>7) & 1, ((_id)>>6) & 1, ((_id)>>5) & 1, ((_id)>>4) & 1, \
6248626d3b4SDavid Woodhouse 	((_id)>>3) & 1, ((_id)>>2) & 1, ((_id)>>1) & 1, (_id) & 1
6258626d3b4SDavid Woodhouse 
6268626d3b4SDavid Woodhouse /**
6278626d3b4SDavid Woodhouse  * struct mdio_device_id - identifies PHY devices on an MDIO/MII bus
6288626d3b4SDavid Woodhouse  * @phy_id: The result of
62915c6d8e5SRobert P. J. Day  *     (mdio_read(&MII_PHYSID1) << 16 | mdio_read(&MII_PHYSID2)) & @phy_id_mask
6308626d3b4SDavid Woodhouse  *     for this PHY type
6318626d3b4SDavid Woodhouse  * @phy_id_mask: Defines the significant bits of @phy_id.  A value of 0
6328626d3b4SDavid Woodhouse  *     is used to terminate an array of struct mdio_device_id.
6338626d3b4SDavid Woodhouse  */
6348626d3b4SDavid Woodhouse struct mdio_device_id {
6358626d3b4SDavid Woodhouse 	__u32 phy_id;
6368626d3b4SDavid Woodhouse 	__u32 phy_id_mask;
6378626d3b4SDavid Woodhouse };
6388626d3b4SDavid Woodhouse 
639bf54a2b3SGeert Uytterhoeven struct zorro_device_id {
640bf54a2b3SGeert Uytterhoeven 	__u32 id;			/* Device ID or ZORRO_WILDCARD */
641bf54a2b3SGeert Uytterhoeven 	kernel_ulong_t driver_data;	/* Data private to the driver */
642bf54a2b3SGeert Uytterhoeven };
643bf54a2b3SGeert Uytterhoeven 
644bf54a2b3SGeert Uytterhoeven #define ZORRO_WILDCARD			(0xffffffff)	/* not official */
645bf54a2b3SGeert Uytterhoeven 
646bf54a2b3SGeert Uytterhoeven #define ZORRO_DEVICE_MODALIAS_FMT	"zorro:i%08X"
647bf54a2b3SGeert Uytterhoeven 
64890def62dSRusty Russell #define ISAPNP_ANY_ID		0xffff
64990def62dSRusty Russell struct isapnp_device_id {
65090def62dSRusty Russell 	unsigned short card_vendor, card_device;
65190def62dSRusty Russell 	unsigned short vendor, function;
65290def62dSRusty Russell 	kernel_ulong_t driver_data;	/* data private to the driver */
65390def62dSRusty Russell };
65490def62dSRusty Russell 
6551e5f9a23SDave Martin /**
6561e5f9a23SDave Martin  * struct amba_id - identifies a device on an AMBA bus
6571e5f9a23SDave Martin  * @id: The significant bits if the hardware device ID
6581e5f9a23SDave Martin  * @mask: Bitmask specifying which bits of the id field are significant when
6591e5f9a23SDave Martin  *	matching.  A driver binds to a device when ((hardware device ID) & mask)
6601e5f9a23SDave Martin  *	== id.
6611e5f9a23SDave Martin  * @data: Private data used by the driver.
6621e5f9a23SDave Martin  */
6631e5f9a23SDave Martin struct amba_id {
6641e5f9a23SDave Martin 	unsigned int		id;
6651e5f9a23SDave Martin 	unsigned int		mask;
6661e5f9a23SDave Martin 	void			*data;
6671e5f9a23SDave Martin };
6681e5f9a23SDave Martin 
6698286ae03SJames Hogan /**
6708286ae03SJames Hogan  * struct mips_cdmm_device_id - identifies devices in MIPS CDMM bus
6718286ae03SJames Hogan  * @type:	Device type identifier.
6728286ae03SJames Hogan  */
6738286ae03SJames Hogan struct mips_cdmm_device_id {
6748286ae03SJames Hogan 	__u8	type;
6758286ae03SJames Hogan };
6768286ae03SJames Hogan 
677644e9cbbSAndi Kleen /*
678644e9cbbSAndi Kleen  * Match x86 CPUs for CPU specific drivers.
679644e9cbbSAndi Kleen  * See documentation of "x86_match_cpu" for details.
680644e9cbbSAndi Kleen  */
681644e9cbbSAndi Kleen 
682c4586256SBehan Webster /*
683c4586256SBehan Webster  * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id.
684c4586256SBehan Webster  * Although gcc seems to ignore this error, clang fails without this define.
685c4586256SBehan Webster  */
686c4586256SBehan Webster #define x86cpu_device_id x86_cpu_id
687644e9cbbSAndi Kleen struct x86_cpu_id {
688644e9cbbSAndi Kleen 	__u16 vendor;
689644e9cbbSAndi Kleen 	__u16 family;
690644e9cbbSAndi Kleen 	__u16 model;
691e9d71445SMark Gross 	__u16 steppings;
692644e9cbbSAndi Kleen 	__u16 feature;	/* bit index */
693*65ac09c9STony Luck 	/* Solely for kernel-internal use: DO NOT EXPORT to userspace! */
694*65ac09c9STony Luck 	__u16 flags;
695644e9cbbSAndi Kleen 	kernel_ulong_t driver_data;
696644e9cbbSAndi Kleen };
697644e9cbbSAndi Kleen 
698ba5bade4SThomas Gleixner /* Wild cards for x86_cpu_id::vendor, family, model and feature */
699644e9cbbSAndi Kleen #define X86_VENDOR_ANY 0xffff
700644e9cbbSAndi Kleen #define X86_FAMILY_ANY 0
701644e9cbbSAndi Kleen #define X86_MODEL_ANY  0
702e9d71445SMark Gross #define X86_STEPPING_ANY 0
703644e9cbbSAndi Kleen #define X86_FEATURE_ANY 0	/* Same as FPU, you can't test for that */
704644e9cbbSAndi Kleen 
70567bad2fdSArd Biesheuvel /*
70667bad2fdSArd Biesheuvel  * Generic table type for matching CPU features.
70767bad2fdSArd Biesheuvel  * @feature:	the bit number of the feature (0 - 65535)
70867bad2fdSArd Biesheuvel  */
70967bad2fdSArd Biesheuvel 
71067bad2fdSArd Biesheuvel struct cpu_feature {
71167bad2fdSArd Biesheuvel 	__u16	feature;
71267bad2fdSArd Biesheuvel };
71367bad2fdSArd Biesheuvel 
7145948ae27SJens Taprogge #define IPACK_ANY_FORMAT 0xff
715849e0ad2SJens Taprogge #define IPACK_ANY_ID (~0)
716849e0ad2SJens Taprogge struct ipack_device_id {
717849e0ad2SJens Taprogge 	__u8  format;			/* Format version or IPACK_ANY_ID */
718849e0ad2SJens Taprogge 	__u32 vendor;			/* Vendor ID or IPACK_ANY_ID */
719849e0ad2SJens Taprogge 	__u32 device;			/* Device ID or IPACK_ANY_ID */
720849e0ad2SJens Taprogge };
721849e0ad2SJens Taprogge 
722e5354107SSamuel Ortiz #define MEI_CL_MODULE_PREFIX "mei:"
723e5354107SSamuel Ortiz #define MEI_CL_NAME_SIZE 32
724b26864caSTomas Winkler #define MEI_CL_VERSION_ANY 0xff
725e5354107SSamuel Ortiz 
726c93b76b3STomas Winkler /**
727c93b76b3STomas Winkler  * struct mei_cl_device_id - MEI client device identifier
728c93b76b3STomas Winkler  * @name: helper name
729c93b76b3STomas Winkler  * @uuid: client uuid
730b26864caSTomas Winkler  * @version: client protocol version
731c93b76b3STomas Winkler  * @driver_info: information used by the driver.
732c93b76b3STomas Winkler  *
733c93b76b3STomas Winkler  * identifies mei client device by uuid and name
734c93b76b3STomas Winkler  */
735e5354107SSamuel Ortiz struct mei_cl_device_id {
736e5354107SSamuel Ortiz 	char name[MEI_CL_NAME_SIZE];
737b144ce2dSGreg Kroah-Hartman 	uuid_le uuid;
738b26864caSTomas Winkler 	__u8    version;
739e5354107SSamuel Ortiz 	kernel_ulong_t driver_info;
740e5354107SSamuel Ortiz };
741e5354107SSamuel Ortiz 
7423bdbb62fSAlexandre Bounine /* RapidIO */
7433bdbb62fSAlexandre Bounine 
7443bdbb62fSAlexandre Bounine #define RIO_ANY_ID	0xffff
7453bdbb62fSAlexandre Bounine 
7463bdbb62fSAlexandre Bounine /**
7473bdbb62fSAlexandre Bounine  * struct rio_device_id - RIO device identifier
7483bdbb62fSAlexandre Bounine  * @did: RapidIO device ID
7493bdbb62fSAlexandre Bounine  * @vid: RapidIO vendor ID
7503bdbb62fSAlexandre Bounine  * @asm_did: RapidIO assembly device ID
7513bdbb62fSAlexandre Bounine  * @asm_vid: RapidIO assembly vendor ID
7523bdbb62fSAlexandre Bounine  *
7533bdbb62fSAlexandre Bounine  * Identifies a RapidIO device based on both the device/vendor IDs and
7543bdbb62fSAlexandre Bounine  * the assembly device/vendor IDs.
7553bdbb62fSAlexandre Bounine  */
7563bdbb62fSAlexandre Bounine struct rio_device_id {
7573bdbb62fSAlexandre Bounine 	__u16 did, vid;
7583bdbb62fSAlexandre Bounine 	__u16 asm_did, asm_vid;
7593bdbb62fSAlexandre Bounine };
7603bdbb62fSAlexandre Bounine 
7613764e82eSJohannes Thumshirn struct mcb_device_id {
7623764e82eSJohannes Thumshirn 	__u16 device;
7633764e82eSJohannes Thumshirn 	kernel_ulong_t driver_data;
7643764e82eSJohannes Thumshirn };
7653764e82eSJohannes Thumshirn 
766289fcff4SHeikki Krogerus struct ulpi_device_id {
767289fcff4SHeikki Krogerus 	__u16 vendor;
768289fcff4SHeikki Krogerus 	__u16 product;
769289fcff4SHeikki Krogerus 	kernel_ulong_t driver_data;
770289fcff4SHeikki Krogerus };
771289fcff4SHeikki Krogerus 
7720afef456SStuart Yoder /**
7730afef456SStuart Yoder  * struct fsl_mc_device_id - MC object device identifier
7740afef456SStuart Yoder  * @vendor: vendor ID
7750afef456SStuart Yoder  * @obj_type: MC object type
7760afef456SStuart Yoder  *
7770afef456SStuart Yoder  * Type of entries in the "device Id" table for MC object devices supported by
7780afef456SStuart Yoder  * a MC object device driver. The last entry of the table has vendor set to 0x0
7790afef456SStuart Yoder  */
7800afef456SStuart Yoder struct fsl_mc_device_id {
7810afef456SStuart Yoder 	__u16 vendor;
7820afef456SStuart Yoder 	const char obj_type[16];
7830afef456SStuart Yoder };
7840afef456SStuart Yoder 
785d1ff7024SMika Westerberg /**
786d1ff7024SMika Westerberg  * struct tb_service_id - Thunderbolt service identifiers
787d1ff7024SMika Westerberg  * @match_flags: Flags used to match the structure
788d1ff7024SMika Westerberg  * @protocol_key: Protocol key the service supports
789d1ff7024SMika Westerberg  * @protocol_id: Protocol id the service supports
790d1ff7024SMika Westerberg  * @protocol_version: Version of the protocol
791d1ff7024SMika Westerberg  * @protocol_revision: Revision of the protocol software
792d1ff7024SMika Westerberg  * @driver_data: Driver specific data
793d1ff7024SMika Westerberg  *
794d1ff7024SMika Westerberg  * Thunderbolt XDomain services are exposed as devices where each device
795d1ff7024SMika Westerberg  * carries the protocol information the service supports. Thunderbolt
796d1ff7024SMika Westerberg  * XDomain service drivers match against that information.
797d1ff7024SMika Westerberg  */
798d1ff7024SMika Westerberg struct tb_service_id {
799d1ff7024SMika Westerberg 	__u32 match_flags;
800d1ff7024SMika Westerberg 	char protocol_key[8 + 1];
801d1ff7024SMika Westerberg 	__u32 protocol_id;
802d1ff7024SMika Westerberg 	__u32 protocol_version;
803d1ff7024SMika Westerberg 	__u32 protocol_revision;
804d1ff7024SMika Westerberg 	kernel_ulong_t driver_data;
805d1ff7024SMika Westerberg };
806d1ff7024SMika Westerberg 
807d1ff7024SMika Westerberg #define TBSVC_MATCH_PROTOCOL_KEY	0x0001
808d1ff7024SMika Westerberg #define TBSVC_MATCH_PROTOCOL_ID		0x0002
809d1ff7024SMika Westerberg #define TBSVC_MATCH_PROTOCOL_VERSION	0x0004
810d1ff7024SMika Westerberg #define TBSVC_MATCH_PROTOCOL_REVISION	0x0008
8110afef456SStuart Yoder 
8128a37d87dSHeikki Krogerus /* USB Type-C Alternate Modes */
8138a37d87dSHeikki Krogerus 
8148a37d87dSHeikki Krogerus #define TYPEC_ANY_MODE	0x7
8158a37d87dSHeikki Krogerus 
8168a37d87dSHeikki Krogerus /**
8178a37d87dSHeikki Krogerus  * struct typec_device_id - USB Type-C alternate mode identifiers
8188a37d87dSHeikki Krogerus  * @svid: Standard or Vendor ID
8198a37d87dSHeikki Krogerus  * @mode: Mode index
820d23df2dcSRandy Dunlap  * @driver_data: Driver specific data
8218a37d87dSHeikki Krogerus  */
8228a37d87dSHeikki Krogerus struct typec_device_id {
8238a37d87dSHeikki Krogerus 	__u16 svid;
8248a37d87dSHeikki Krogerus 	__u8 mode;
8258a37d87dSHeikki Krogerus 	kernel_ulong_t driver_data;
8268a37d87dSHeikki Krogerus };
8278a37d87dSHeikki Krogerus 
8280fc1db9dSSumit Garg /**
8290fc1db9dSSumit Garg  * struct tee_client_device_id - tee based device identifier
8300fc1db9dSSumit Garg  * @uuid: For TEE based client devices we use the device uuid as
8310fc1db9dSSumit Garg  *        the identifier.
8320fc1db9dSSumit Garg  */
8330fc1db9dSSumit Garg struct tee_client_device_id {
8340fc1db9dSSumit Garg 	uuid_t uuid;
8350fc1db9dSSumit Garg };
8360fc1db9dSSumit Garg 
837eacc95eaSMattias Jacobsson /* WMI */
838eacc95eaSMattias Jacobsson 
839eacc95eaSMattias Jacobsson #define WMI_MODULE_PREFIX	"wmi:"
840eacc95eaSMattias Jacobsson 
841eacc95eaSMattias Jacobsson /**
842eacc95eaSMattias Jacobsson  * struct wmi_device_id - WMI device identifier
843eacc95eaSMattias Jacobsson  * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
8448732d85aSMattias Jacobsson  * @context: pointer to driver specific data
845eacc95eaSMattias Jacobsson  */
846eacc95eaSMattias Jacobsson struct wmi_device_id {
847eacc95eaSMattias Jacobsson 	const char guid_string[UUID_STRING_LEN+1];
848a48e2338SMattias Jacobsson 	const void *context;
849eacc95eaSMattias Jacobsson };
850eacc95eaSMattias Jacobsson 
851e6b0de46SManivannan Sadhasivam #define MHI_DEVICE_MODALIAS_FMT "mhi:%s"
8520cbf2608SManivannan Sadhasivam #define MHI_NAME_SIZE 32
8530cbf2608SManivannan Sadhasivam 
854c268c0a8SManivannan Sadhasivam #define MHI_EP_DEVICE_MODALIAS_FMT "mhi_ep:%s"
855c268c0a8SManivannan Sadhasivam 
8560cbf2608SManivannan Sadhasivam /**
8570cbf2608SManivannan Sadhasivam  * struct mhi_device_id - MHI device identification
8580cbf2608SManivannan Sadhasivam  * @chan: MHI channel name
8590cbf2608SManivannan Sadhasivam  * @driver_data: driver data;
8600cbf2608SManivannan Sadhasivam  */
8610cbf2608SManivannan Sadhasivam struct mhi_device_id {
8620cbf2608SManivannan Sadhasivam 	const char chan[MHI_NAME_SIZE];
8630cbf2608SManivannan Sadhasivam 	kernel_ulong_t driver_data;
8640cbf2608SManivannan Sadhasivam };
8650cbf2608SManivannan Sadhasivam 
8667de3697eSDave Ertman #define AUXILIARY_NAME_SIZE 32
8677de3697eSDave Ertman #define AUXILIARY_MODULE_PREFIX "auxiliary:"
8687de3697eSDave Ertman 
8697de3697eSDave Ertman struct auxiliary_device_id {
8707de3697eSDave Ertman 	char name[AUXILIARY_NAME_SIZE];
8717de3697eSDave Ertman 	kernel_ulong_t driver_data;
8727de3697eSDave Ertman };
8737de3697eSDave Ertman 
874eb0e90a8SMaximilian Luz /* Surface System Aggregator Module */
875eb0e90a8SMaximilian Luz 
876eb0e90a8SMaximilian Luz #define SSAM_MATCH_TARGET	0x1
877eb0e90a8SMaximilian Luz #define SSAM_MATCH_INSTANCE	0x2
878eb0e90a8SMaximilian Luz #define SSAM_MATCH_FUNCTION	0x4
879eb0e90a8SMaximilian Luz 
880eb0e90a8SMaximilian Luz struct ssam_device_id {
881eb0e90a8SMaximilian Luz 	__u8 match_flags;
882eb0e90a8SMaximilian Luz 
883eb0e90a8SMaximilian Luz 	__u8 domain;
884eb0e90a8SMaximilian Luz 	__u8 category;
885eb0e90a8SMaximilian Luz 	__u8 target;
886eb0e90a8SMaximilian Luz 	__u8 instance;
887eb0e90a8SMaximilian Luz 	__u8 function;
888eb0e90a8SMaximilian Luz 
889eb0e90a8SMaximilian Luz 	kernel_ulong_t driver_data;
890eb0e90a8SMaximilian Luz };
891eb0e90a8SMaximilian Luz 
8929326eecdSXu Yilun /*
8939326eecdSXu Yilun  * DFL (Device Feature List)
8949326eecdSXu Yilun  *
8959326eecdSXu Yilun  * DFL defines a linked list of feature headers within the device MMIO space to
8969326eecdSXu Yilun  * provide an extensible way of adding features. Software can walk through these
8979326eecdSXu Yilun  * predefined data structures to enumerate features. It is now used in the FPGA.
8989326eecdSXu Yilun  * See Documentation/fpga/dfl.rst for more information.
8999326eecdSXu Yilun  *
9009326eecdSXu Yilun  * The dfl bus type is introduced to match the individual feature devices (dfl
9019326eecdSXu Yilun  * devices) for specific dfl drivers.
9029326eecdSXu Yilun  */
9039326eecdSXu Yilun 
9049326eecdSXu Yilun /**
9059326eecdSXu Yilun  * struct dfl_device_id -  dfl device identifier
9069326eecdSXu Yilun  * @type: DFL FIU type of the device. See enum dfl_id_type.
9079326eecdSXu Yilun  * @feature_id: feature identifier local to its DFL FIU type.
9089326eecdSXu Yilun  * @driver_data: driver specific data.
9099326eecdSXu Yilun  */
9109326eecdSXu Yilun struct dfl_device_id {
9119326eecdSXu Yilun 	__u16 type;
9129326eecdSXu Yilun 	__u16 feature_id;
9139326eecdSXu Yilun 	kernel_ulong_t driver_data;
9149326eecdSXu Yilun };
9159326eecdSXu Yilun 
916fa443bc3SThomas Weißschuh /* ISHTP (Integrated Sensor Hub Transport Protocol) */
917fa443bc3SThomas Weißschuh 
918fa443bc3SThomas Weißschuh #define ISHTP_MODULE_PREFIX	"ishtp:"
919fa443bc3SThomas Weißschuh 
920fa443bc3SThomas Weißschuh /**
921fa443bc3SThomas Weißschuh  * struct ishtp_device_id - ISHTP device identifier
92264355db3SThomas Weißschuh  * @guid: GUID of the device.
923bf9167a8SArnd Bergmann  * @driver_data: pointer to driver specific data
924fa443bc3SThomas Weißschuh  */
925fa443bc3SThomas Weißschuh struct ishtp_device_id {
926fa443bc3SThomas Weißschuh 	guid_t guid;
927bf9167a8SArnd Bergmann 	kernel_ulong_t driver_data;
928fa443bc3SThomas Weißschuh };
929fa443bc3SThomas Weißschuh 
930234489acSNipun Gupta #define CDX_ANY_ID (0xFFFF)
931234489acSNipun Gupta 
932234489acSNipun Gupta enum {
933234489acSNipun Gupta 	CDX_ID_F_VFIO_DRIVER_OVERRIDE = 1,
934234489acSNipun Gupta };
935234489acSNipun Gupta 
9362959ab24SNipun Gupta /**
9372959ab24SNipun Gupta  * struct cdx_device_id - CDX device identifier
9382959ab24SNipun Gupta  * @vendor: Vendor ID
9392959ab24SNipun Gupta  * @device: Device ID
9402959ab24SNipun Gupta  * @override_only: Match only when dev->driver_override is this driver.
9412959ab24SNipun Gupta  *
9422959ab24SNipun Gupta  * Type of entries in the "device Id" table for CDX devices supported by
9432959ab24SNipun Gupta  * a CDX device driver.
9442959ab24SNipun Gupta  */
9452959ab24SNipun Gupta struct cdx_device_id {
9462959ab24SNipun Gupta 	__u16 vendor;
9472959ab24SNipun Gupta 	__u16 device;
9482959ab24SNipun Gupta 	__u32 override_only;
9492959ab24SNipun Gupta };
9502959ab24SNipun Gupta 
9511da177e4SLinus Torvalds #endif /* LINUX_MOD_DEVICETABLE_H */
952