1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Device tables which are exported to userspace via 4*4882a593Smuzhiyun * scripts/mod/file2alias.c. You must keep that file in sync with this 5*4882a593Smuzhiyun * header. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef LINUX_MOD_DEVICETABLE_H 9*4882a593Smuzhiyun #define LINUX_MOD_DEVICETABLE_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifdef __KERNEL__ 12*4882a593Smuzhiyun #include <linux/types.h> 13*4882a593Smuzhiyun #include <linux/uuid.h> 14*4882a593Smuzhiyun typedef unsigned long kernel_ulong_t; 15*4882a593Smuzhiyun #endif 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define PCI_ANY_ID (~0) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /** 20*4882a593Smuzhiyun * struct pci_device_id - PCI device ID structure 21*4882a593Smuzhiyun * @vendor: Vendor ID to match (or PCI_ANY_ID) 22*4882a593Smuzhiyun * @device: Device ID to match (or PCI_ANY_ID) 23*4882a593Smuzhiyun * @subvendor: Subsystem vendor ID to match (or PCI_ANY_ID) 24*4882a593Smuzhiyun * @subdevice: Subsystem device ID to match (or PCI_ANY_ID) 25*4882a593Smuzhiyun * @class: Device class, subclass, and "interface" to match. 26*4882a593Smuzhiyun * See Appendix D of the PCI Local Bus Spec or 27*4882a593Smuzhiyun * include/linux/pci_ids.h for a full list of classes. 28*4882a593Smuzhiyun * Most drivers do not need to specify class/class_mask 29*4882a593Smuzhiyun * as vendor/device is normally sufficient. 30*4882a593Smuzhiyun * @class_mask: Limit which sub-fields of the class field are compared. 31*4882a593Smuzhiyun * See drivers/scsi/sym53c8xx_2/ for example of usage. 32*4882a593Smuzhiyun * @driver_data: Data private to the driver. 33*4882a593Smuzhiyun * Most drivers don't need to use driver_data field. 34*4882a593Smuzhiyun * Best practice is to use driver_data as an index 35*4882a593Smuzhiyun * into a static list of equivalent device types, 36*4882a593Smuzhiyun * instead of using it as a pointer. 37*4882a593Smuzhiyun */ 38*4882a593Smuzhiyun struct pci_device_id { 39*4882a593Smuzhiyun __u32 vendor, device; /* Vendor and device ID or PCI_ANY_ID*/ 40*4882a593Smuzhiyun __u32 subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */ 41*4882a593Smuzhiyun __u32 class, class_mask; /* (class,subclass,prog-if) triplet */ 42*4882a593Smuzhiyun kernel_ulong_t driver_data; /* Data private to the driver */ 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define IEEE1394_MATCH_VENDOR_ID 0x0001 47*4882a593Smuzhiyun #define IEEE1394_MATCH_MODEL_ID 0x0002 48*4882a593Smuzhiyun #define IEEE1394_MATCH_SPECIFIER_ID 0x0004 49*4882a593Smuzhiyun #define IEEE1394_MATCH_VERSION 0x0008 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun struct ieee1394_device_id { 52*4882a593Smuzhiyun __u32 match_flags; 53*4882a593Smuzhiyun __u32 vendor_id; 54*4882a593Smuzhiyun __u32 model_id; 55*4882a593Smuzhiyun __u32 specifier_id; 56*4882a593Smuzhiyun __u32 version; 57*4882a593Smuzhiyun kernel_ulong_t driver_data; 58*4882a593Smuzhiyun }; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* 62*4882a593Smuzhiyun * Device table entry for "new style" table-driven USB drivers. 63*4882a593Smuzhiyun * User mode code can read these tables to choose which modules to load. 64*4882a593Smuzhiyun * Declare the table as a MODULE_DEVICE_TABLE. 65*4882a593Smuzhiyun * 66*4882a593Smuzhiyun * A probe() parameter will point to a matching entry from this table. 67*4882a593Smuzhiyun * Use the driver_info field for each match to hold information tied 68*4882a593Smuzhiyun * to that match: device quirks, etc. 69*4882a593Smuzhiyun * 70*4882a593Smuzhiyun * Terminate the driver's table with an all-zeroes entry. 71*4882a593Smuzhiyun * Use the flag values to control which fields are compared. 72*4882a593Smuzhiyun */ 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /** 75*4882a593Smuzhiyun * struct usb_device_id - identifies USB devices for probing and hotplugging 76*4882a593Smuzhiyun * @match_flags: Bit mask controlling which of the other fields are used to 77*4882a593Smuzhiyun * match against new devices. Any field except for driver_info may be 78*4882a593Smuzhiyun * used, although some only make sense in conjunction with other fields. 79*4882a593Smuzhiyun * This is usually set by a USB_DEVICE_*() macro, which sets all 80*4882a593Smuzhiyun * other fields in this structure except for driver_info. 81*4882a593Smuzhiyun * @idVendor: USB vendor ID for a device; numbers are assigned 82*4882a593Smuzhiyun * by the USB forum to its members. 83*4882a593Smuzhiyun * @idProduct: Vendor-assigned product ID. 84*4882a593Smuzhiyun * @bcdDevice_lo: Low end of range of vendor-assigned product version numbers. 85*4882a593Smuzhiyun * This is also used to identify individual product versions, for 86*4882a593Smuzhiyun * a range consisting of a single device. 87*4882a593Smuzhiyun * @bcdDevice_hi: High end of version number range. The range of product 88*4882a593Smuzhiyun * versions is inclusive. 89*4882a593Smuzhiyun * @bDeviceClass: Class of device; numbers are assigned 90*4882a593Smuzhiyun * by the USB forum. Products may choose to implement classes, 91*4882a593Smuzhiyun * or be vendor-specific. Device classes specify behavior of all 92*4882a593Smuzhiyun * the interfaces on a device. 93*4882a593Smuzhiyun * @bDeviceSubClass: Subclass of device; associated with bDeviceClass. 94*4882a593Smuzhiyun * @bDeviceProtocol: Protocol of device; associated with bDeviceClass. 95*4882a593Smuzhiyun * @bInterfaceClass: Class of interface; numbers are assigned 96*4882a593Smuzhiyun * by the USB forum. Products may choose to implement classes, 97*4882a593Smuzhiyun * or be vendor-specific. Interface classes specify behavior only 98*4882a593Smuzhiyun * of a given interface; other interfaces may support other classes. 99*4882a593Smuzhiyun * @bInterfaceSubClass: Subclass of interface; associated with bInterfaceClass. 100*4882a593Smuzhiyun * @bInterfaceProtocol: Protocol of interface; associated with bInterfaceClass. 101*4882a593Smuzhiyun * @bInterfaceNumber: Number of interface; composite devices may use 102*4882a593Smuzhiyun * fixed interface numbers to differentiate between vendor-specific 103*4882a593Smuzhiyun * interfaces. 104*4882a593Smuzhiyun * @driver_info: Holds information used by the driver. Usually it holds 105*4882a593Smuzhiyun * a pointer to a descriptor understood by the driver, or perhaps 106*4882a593Smuzhiyun * device flags. 107*4882a593Smuzhiyun * 108*4882a593Smuzhiyun * In most cases, drivers will create a table of device IDs by using 109*4882a593Smuzhiyun * USB_DEVICE(), or similar macros designed for that purpose. 110*4882a593Smuzhiyun * They will then export it to userspace using MODULE_DEVICE_TABLE(), 111*4882a593Smuzhiyun * and provide it to the USB core through their usb_driver structure. 112*4882a593Smuzhiyun * 113*4882a593Smuzhiyun * See the usb_match_id() function for information about how matches are 114*4882a593Smuzhiyun * performed. Briefly, you will normally use one of several macros to help 115*4882a593Smuzhiyun * construct these entries. Each entry you provide will either identify 116*4882a593Smuzhiyun * one or more specific products, or will identify a class of products 117*4882a593Smuzhiyun * which have agreed to behave the same. You should put the more specific 118*4882a593Smuzhiyun * matches towards the beginning of your table, so that driver_info can 119*4882a593Smuzhiyun * record quirks of specific products. 120*4882a593Smuzhiyun */ 121*4882a593Smuzhiyun struct usb_device_id { 122*4882a593Smuzhiyun /* which fields to match against? */ 123*4882a593Smuzhiyun __u16 match_flags; 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* Used for product specific matches; range is inclusive */ 126*4882a593Smuzhiyun __u16 idVendor; 127*4882a593Smuzhiyun __u16 idProduct; 128*4882a593Smuzhiyun __u16 bcdDevice_lo; 129*4882a593Smuzhiyun __u16 bcdDevice_hi; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun /* Used for device class matches */ 132*4882a593Smuzhiyun __u8 bDeviceClass; 133*4882a593Smuzhiyun __u8 bDeviceSubClass; 134*4882a593Smuzhiyun __u8 bDeviceProtocol; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /* Used for interface class matches */ 137*4882a593Smuzhiyun __u8 bInterfaceClass; 138*4882a593Smuzhiyun __u8 bInterfaceSubClass; 139*4882a593Smuzhiyun __u8 bInterfaceProtocol; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun /* Used for vendor-specific interface matches */ 142*4882a593Smuzhiyun __u8 bInterfaceNumber; 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun /* not matched against */ 145*4882a593Smuzhiyun kernel_ulong_t driver_info 146*4882a593Smuzhiyun __attribute__((aligned(sizeof(kernel_ulong_t)))); 147*4882a593Smuzhiyun }; 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun /* Some useful macros to use to create struct usb_device_id */ 150*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_VENDOR 0x0001 151*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_PRODUCT 0x0002 152*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_DEV_LO 0x0004 153*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_DEV_HI 0x0008 154*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010 155*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020 156*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040 157*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080 158*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100 159*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200 160*4882a593Smuzhiyun #define USB_DEVICE_ID_MATCH_INT_NUMBER 0x0400 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun #define HID_ANY_ID (~0) 163*4882a593Smuzhiyun #define HID_BUS_ANY 0xffff 164*4882a593Smuzhiyun #define HID_GROUP_ANY 0x0000 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun struct hid_device_id { 167*4882a593Smuzhiyun __u16 bus; 168*4882a593Smuzhiyun __u16 group; 169*4882a593Smuzhiyun __u32 vendor; 170*4882a593Smuzhiyun __u32 product; 171*4882a593Smuzhiyun kernel_ulong_t driver_data; 172*4882a593Smuzhiyun }; 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun /* s390 CCW devices */ 175*4882a593Smuzhiyun struct ccw_device_id { 176*4882a593Smuzhiyun __u16 match_flags; /* which fields to match against */ 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun __u16 cu_type; /* control unit type */ 179*4882a593Smuzhiyun __u16 dev_type; /* device type */ 180*4882a593Smuzhiyun __u8 cu_model; /* control unit model */ 181*4882a593Smuzhiyun __u8 dev_model; /* device model */ 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun kernel_ulong_t driver_info; 184*4882a593Smuzhiyun }; 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun #define CCW_DEVICE_ID_MATCH_CU_TYPE 0x01 187*4882a593Smuzhiyun #define CCW_DEVICE_ID_MATCH_CU_MODEL 0x02 188*4882a593Smuzhiyun #define CCW_DEVICE_ID_MATCH_DEVICE_TYPE 0x04 189*4882a593Smuzhiyun #define CCW_DEVICE_ID_MATCH_DEVICE_MODEL 0x08 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun /* s390 AP bus devices */ 192*4882a593Smuzhiyun struct ap_device_id { 193*4882a593Smuzhiyun __u16 match_flags; /* which fields to match against */ 194*4882a593Smuzhiyun __u8 dev_type; /* device type */ 195*4882a593Smuzhiyun kernel_ulong_t driver_info; 196*4882a593Smuzhiyun }; 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun #define AP_DEVICE_ID_MATCH_CARD_TYPE 0x01 199*4882a593Smuzhiyun #define AP_DEVICE_ID_MATCH_QUEUE_TYPE 0x02 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun /* s390 css bus devices (subchannels) */ 202*4882a593Smuzhiyun struct css_device_id { 203*4882a593Smuzhiyun __u8 match_flags; 204*4882a593Smuzhiyun __u8 type; /* subchannel type */ 205*4882a593Smuzhiyun kernel_ulong_t driver_data; 206*4882a593Smuzhiyun }; 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun #define ACPI_ID_LEN 9 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun struct acpi_device_id { 211*4882a593Smuzhiyun __u8 id[ACPI_ID_LEN]; 212*4882a593Smuzhiyun kernel_ulong_t driver_data; 213*4882a593Smuzhiyun __u32 cls; 214*4882a593Smuzhiyun __u32 cls_msk; 215*4882a593Smuzhiyun }; 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun #define PNP_ID_LEN 8 218*4882a593Smuzhiyun #define PNP_MAX_DEVICES 8 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun struct pnp_device_id { 221*4882a593Smuzhiyun __u8 id[PNP_ID_LEN]; 222*4882a593Smuzhiyun kernel_ulong_t driver_data; 223*4882a593Smuzhiyun }; 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun struct pnp_card_device_id { 226*4882a593Smuzhiyun __u8 id[PNP_ID_LEN]; 227*4882a593Smuzhiyun kernel_ulong_t driver_data; 228*4882a593Smuzhiyun struct { 229*4882a593Smuzhiyun __u8 id[PNP_ID_LEN]; 230*4882a593Smuzhiyun } devs[PNP_MAX_DEVICES]; 231*4882a593Smuzhiyun }; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun #define SERIO_ANY 0xff 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun struct serio_device_id { 237*4882a593Smuzhiyun __u8 type; 238*4882a593Smuzhiyun __u8 extra; 239*4882a593Smuzhiyun __u8 id; 240*4882a593Smuzhiyun __u8 proto; 241*4882a593Smuzhiyun }; 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun struct hda_device_id { 244*4882a593Smuzhiyun __u32 vendor_id; 245*4882a593Smuzhiyun __u32 rev_id; 246*4882a593Smuzhiyun __u8 api_version; 247*4882a593Smuzhiyun const char *name; 248*4882a593Smuzhiyun unsigned long driver_data; 249*4882a593Smuzhiyun }; 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun struct sdw_device_id { 252*4882a593Smuzhiyun __u16 mfg_id; 253*4882a593Smuzhiyun __u16 part_id; 254*4882a593Smuzhiyun __u8 sdw_version; 255*4882a593Smuzhiyun __u8 class_id; 256*4882a593Smuzhiyun kernel_ulong_t driver_data; 257*4882a593Smuzhiyun }; 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun /* 260*4882a593Smuzhiyun * Struct used for matching a device 261*4882a593Smuzhiyun */ 262*4882a593Smuzhiyun struct of_device_id { 263*4882a593Smuzhiyun char name[32]; 264*4882a593Smuzhiyun char type[32]; 265*4882a593Smuzhiyun char compatible[128]; 266*4882a593Smuzhiyun const void *data; 267*4882a593Smuzhiyun }; 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun /* VIO */ 270*4882a593Smuzhiyun struct vio_device_id { 271*4882a593Smuzhiyun char type[32]; 272*4882a593Smuzhiyun char compat[32]; 273*4882a593Smuzhiyun }; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun /* PCMCIA */ 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun struct pcmcia_device_id { 278*4882a593Smuzhiyun __u16 match_flags; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun __u16 manf_id; 281*4882a593Smuzhiyun __u16 card_id; 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun __u8 func_id; 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun /* for real multi-function devices */ 286*4882a593Smuzhiyun __u8 function; 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun /* for pseudo multi-function devices */ 289*4882a593Smuzhiyun __u8 device_no; 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun __u32 prod_id_hash[4]; 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun /* not matched against in kernelspace */ 294*4882a593Smuzhiyun const char * prod_id[4]; 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun /* not matched against */ 297*4882a593Smuzhiyun kernel_ulong_t driver_info; 298*4882a593Smuzhiyun char * cisfile; 299*4882a593Smuzhiyun }; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_MANF_ID 0x0001 302*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_CARD_ID 0x0002 303*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_FUNC_ID 0x0004 304*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_FUNCTION 0x0008 305*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_PROD_ID1 0x0010 306*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_PROD_ID2 0x0020 307*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_PROD_ID3 0x0040 308*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_PROD_ID4 0x0080 309*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_DEVICE_NO 0x0100 310*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_FAKE_CIS 0x0200 311*4882a593Smuzhiyun #define PCMCIA_DEV_ID_MATCH_ANONYMOUS 0x0400 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /* Input */ 314*4882a593Smuzhiyun #define INPUT_DEVICE_ID_EV_MAX 0x1f 315*4882a593Smuzhiyun #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING 0x71 316*4882a593Smuzhiyun #define INPUT_DEVICE_ID_KEY_MAX 0x2ff 317*4882a593Smuzhiyun #define INPUT_DEVICE_ID_REL_MAX 0x0f 318*4882a593Smuzhiyun #define INPUT_DEVICE_ID_ABS_MAX 0x3f 319*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MSC_MAX 0x07 320*4882a593Smuzhiyun #define INPUT_DEVICE_ID_LED_MAX 0x0f 321*4882a593Smuzhiyun #define INPUT_DEVICE_ID_SND_MAX 0x07 322*4882a593Smuzhiyun #define INPUT_DEVICE_ID_FF_MAX 0x7f 323*4882a593Smuzhiyun #define INPUT_DEVICE_ID_SW_MAX 0x10 324*4882a593Smuzhiyun #define INPUT_DEVICE_ID_PROP_MAX 0x1f 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_BUS 1 327*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_VENDOR 2 328*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_PRODUCT 4 329*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_VERSION 8 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_EVBIT 0x0010 332*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_KEYBIT 0x0020 333*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_RELBIT 0x0040 334*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_ABSBIT 0x0080 335*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_MSCIT 0x0100 336*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_LEDBIT 0x0200 337*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_SNDBIT 0x0400 338*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_FFBIT 0x0800 339*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000 340*4882a593Smuzhiyun #define INPUT_DEVICE_ID_MATCH_PROPBIT 0x2000 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun struct input_device_id { 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun kernel_ulong_t flags; 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun __u16 bustype; 347*4882a593Smuzhiyun __u16 vendor; 348*4882a593Smuzhiyun __u16 product; 349*4882a593Smuzhiyun __u16 version; 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun kernel_ulong_t evbit[INPUT_DEVICE_ID_EV_MAX / BITS_PER_LONG + 1]; 352*4882a593Smuzhiyun kernel_ulong_t keybit[INPUT_DEVICE_ID_KEY_MAX / BITS_PER_LONG + 1]; 353*4882a593Smuzhiyun kernel_ulong_t relbit[INPUT_DEVICE_ID_REL_MAX / BITS_PER_LONG + 1]; 354*4882a593Smuzhiyun kernel_ulong_t absbit[INPUT_DEVICE_ID_ABS_MAX / BITS_PER_LONG + 1]; 355*4882a593Smuzhiyun kernel_ulong_t mscbit[INPUT_DEVICE_ID_MSC_MAX / BITS_PER_LONG + 1]; 356*4882a593Smuzhiyun kernel_ulong_t ledbit[INPUT_DEVICE_ID_LED_MAX / BITS_PER_LONG + 1]; 357*4882a593Smuzhiyun kernel_ulong_t sndbit[INPUT_DEVICE_ID_SND_MAX / BITS_PER_LONG + 1]; 358*4882a593Smuzhiyun kernel_ulong_t ffbit[INPUT_DEVICE_ID_FF_MAX / BITS_PER_LONG + 1]; 359*4882a593Smuzhiyun kernel_ulong_t swbit[INPUT_DEVICE_ID_SW_MAX / BITS_PER_LONG + 1]; 360*4882a593Smuzhiyun kernel_ulong_t propbit[INPUT_DEVICE_ID_PROP_MAX / BITS_PER_LONG + 1]; 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun kernel_ulong_t driver_info; 363*4882a593Smuzhiyun }; 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun /* EISA */ 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun #define EISA_SIG_LEN 8 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun /* The EISA signature, in ASCII form, null terminated */ 370*4882a593Smuzhiyun struct eisa_device_id { 371*4882a593Smuzhiyun char sig[EISA_SIG_LEN]; 372*4882a593Smuzhiyun kernel_ulong_t driver_data; 373*4882a593Smuzhiyun }; 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun #define EISA_DEVICE_MODALIAS_FMT "eisa:s%s" 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun struct parisc_device_id { 378*4882a593Smuzhiyun __u8 hw_type; /* 5 bits used */ 379*4882a593Smuzhiyun __u8 hversion_rev; /* 4 bits */ 380*4882a593Smuzhiyun __u16 hversion; /* 12 bits */ 381*4882a593Smuzhiyun __u32 sversion; /* 20 bits */ 382*4882a593Smuzhiyun }; 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun #define PA_HWTYPE_ANY_ID 0xff 385*4882a593Smuzhiyun #define PA_HVERSION_REV_ANY_ID 0xff 386*4882a593Smuzhiyun #define PA_HVERSION_ANY_ID 0xffff 387*4882a593Smuzhiyun #define PA_SVERSION_ANY_ID 0xffffffff 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun /* SDIO */ 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun #define SDIO_ANY_ID (~0) 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun struct sdio_device_id { 394*4882a593Smuzhiyun __u8 class; /* Standard interface or SDIO_ANY_ID */ 395*4882a593Smuzhiyun __u16 vendor; /* Vendor or SDIO_ANY_ID */ 396*4882a593Smuzhiyun __u16 device; /* Device ID or SDIO_ANY_ID */ 397*4882a593Smuzhiyun kernel_ulong_t driver_data; /* Data private to the driver */ 398*4882a593Smuzhiyun }; 399*4882a593Smuzhiyun 400*4882a593Smuzhiyun /* SSB core, see drivers/ssb/ */ 401*4882a593Smuzhiyun struct ssb_device_id { 402*4882a593Smuzhiyun __u16 vendor; 403*4882a593Smuzhiyun __u16 coreid; 404*4882a593Smuzhiyun __u8 revision; 405*4882a593Smuzhiyun __u8 __pad; 406*4882a593Smuzhiyun } __attribute__((packed, aligned(2))); 407*4882a593Smuzhiyun #define SSB_DEVICE(_vendor, _coreid, _revision) \ 408*4882a593Smuzhiyun { .vendor = _vendor, .coreid = _coreid, .revision = _revision, } 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun #define SSB_ANY_VENDOR 0xFFFF 411*4882a593Smuzhiyun #define SSB_ANY_ID 0xFFFF 412*4882a593Smuzhiyun #define SSB_ANY_REV 0xFF 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun /* Broadcom's specific AMBA core, see drivers/bcma/ */ 415*4882a593Smuzhiyun struct bcma_device_id { 416*4882a593Smuzhiyun __u16 manuf; 417*4882a593Smuzhiyun __u16 id; 418*4882a593Smuzhiyun __u8 rev; 419*4882a593Smuzhiyun __u8 class; 420*4882a593Smuzhiyun } __attribute__((packed,aligned(2))); 421*4882a593Smuzhiyun #define BCMA_CORE(_manuf, _id, _rev, _class) \ 422*4882a593Smuzhiyun { .manuf = _manuf, .id = _id, .rev = _rev, .class = _class, } 423*4882a593Smuzhiyun 424*4882a593Smuzhiyun #define BCMA_ANY_MANUF 0xFFFF 425*4882a593Smuzhiyun #define BCMA_ANY_ID 0xFFFF 426*4882a593Smuzhiyun #define BCMA_ANY_REV 0xFF 427*4882a593Smuzhiyun #define BCMA_ANY_CLASS 0xFF 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun struct virtio_device_id { 430*4882a593Smuzhiyun __u32 device; 431*4882a593Smuzhiyun __u32 vendor; 432*4882a593Smuzhiyun }; 433*4882a593Smuzhiyun #define VIRTIO_DEV_ANY_ID 0xffffffff 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun /* 436*4882a593Smuzhiyun * For Hyper-V devices we use the device guid as the id. 437*4882a593Smuzhiyun */ 438*4882a593Smuzhiyun struct hv_vmbus_device_id { 439*4882a593Smuzhiyun guid_t guid; 440*4882a593Smuzhiyun kernel_ulong_t driver_data; /* Data private to the driver */ 441*4882a593Smuzhiyun }; 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun /* rpmsg */ 444*4882a593Smuzhiyun 445*4882a593Smuzhiyun #define RPMSG_NAME_SIZE 32 446*4882a593Smuzhiyun #define RPMSG_DEVICE_MODALIAS_FMT "rpmsg:%s" 447*4882a593Smuzhiyun 448*4882a593Smuzhiyun struct rpmsg_device_id { 449*4882a593Smuzhiyun char name[RPMSG_NAME_SIZE]; 450*4882a593Smuzhiyun }; 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun /* i2c */ 453*4882a593Smuzhiyun 454*4882a593Smuzhiyun #define I2C_NAME_SIZE 20 455*4882a593Smuzhiyun #define I2C_MODULE_PREFIX "i2c:" 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun struct i2c_device_id { 458*4882a593Smuzhiyun char name[I2C_NAME_SIZE]; 459*4882a593Smuzhiyun kernel_ulong_t driver_data; /* Data private to the driver */ 460*4882a593Smuzhiyun }; 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun /* pci_epf */ 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun #define PCI_EPF_NAME_SIZE 20 465*4882a593Smuzhiyun #define PCI_EPF_MODULE_PREFIX "pci_epf:" 466*4882a593Smuzhiyun 467*4882a593Smuzhiyun struct pci_epf_device_id { 468*4882a593Smuzhiyun char name[PCI_EPF_NAME_SIZE]; 469*4882a593Smuzhiyun kernel_ulong_t driver_data; 470*4882a593Smuzhiyun }; 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun /* i3c */ 473*4882a593Smuzhiyun 474*4882a593Smuzhiyun #define I3C_MATCH_DCR 0x1 475*4882a593Smuzhiyun #define I3C_MATCH_MANUF 0x2 476*4882a593Smuzhiyun #define I3C_MATCH_PART 0x4 477*4882a593Smuzhiyun #define I3C_MATCH_EXTRA_INFO 0x8 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun struct i3c_device_id { 480*4882a593Smuzhiyun __u8 match_flags; 481*4882a593Smuzhiyun __u8 dcr; 482*4882a593Smuzhiyun __u16 manuf_id; 483*4882a593Smuzhiyun __u16 part_id; 484*4882a593Smuzhiyun __u16 extra_info; 485*4882a593Smuzhiyun 486*4882a593Smuzhiyun const void *data; 487*4882a593Smuzhiyun }; 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun /* spi */ 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun #define SPI_NAME_SIZE 32 492*4882a593Smuzhiyun #define SPI_MODULE_PREFIX "spi:" 493*4882a593Smuzhiyun 494*4882a593Smuzhiyun struct spi_device_id { 495*4882a593Smuzhiyun char name[SPI_NAME_SIZE]; 496*4882a593Smuzhiyun kernel_ulong_t driver_data; /* Data private to the driver */ 497*4882a593Smuzhiyun }; 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun /* SLIMbus */ 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun #define SLIMBUS_NAME_SIZE 32 502*4882a593Smuzhiyun #define SLIMBUS_MODULE_PREFIX "slim:" 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun struct slim_device_id { 505*4882a593Smuzhiyun __u16 manf_id, prod_code; 506*4882a593Smuzhiyun __u16 dev_index, instance; 507*4882a593Smuzhiyun 508*4882a593Smuzhiyun /* Data private to the driver */ 509*4882a593Smuzhiyun kernel_ulong_t driver_data; 510*4882a593Smuzhiyun }; 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun #define APR_NAME_SIZE 32 513*4882a593Smuzhiyun #define APR_MODULE_PREFIX "apr:" 514*4882a593Smuzhiyun 515*4882a593Smuzhiyun struct apr_device_id { 516*4882a593Smuzhiyun char name[APR_NAME_SIZE]; 517*4882a593Smuzhiyun __u32 domain_id; 518*4882a593Smuzhiyun __u32 svc_id; 519*4882a593Smuzhiyun __u32 svc_version; 520*4882a593Smuzhiyun kernel_ulong_t driver_data; /* Data private to the driver */ 521*4882a593Smuzhiyun }; 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun #define SPMI_NAME_SIZE 32 524*4882a593Smuzhiyun #define SPMI_MODULE_PREFIX "spmi:" 525*4882a593Smuzhiyun 526*4882a593Smuzhiyun struct spmi_device_id { 527*4882a593Smuzhiyun char name[SPMI_NAME_SIZE]; 528*4882a593Smuzhiyun kernel_ulong_t driver_data; /* Data private to the driver */ 529*4882a593Smuzhiyun }; 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun /* dmi */ 532*4882a593Smuzhiyun enum dmi_field { 533*4882a593Smuzhiyun DMI_NONE, 534*4882a593Smuzhiyun DMI_BIOS_VENDOR, 535*4882a593Smuzhiyun DMI_BIOS_VERSION, 536*4882a593Smuzhiyun DMI_BIOS_DATE, 537*4882a593Smuzhiyun DMI_BIOS_RELEASE, 538*4882a593Smuzhiyun DMI_EC_FIRMWARE_RELEASE, 539*4882a593Smuzhiyun DMI_SYS_VENDOR, 540*4882a593Smuzhiyun DMI_PRODUCT_NAME, 541*4882a593Smuzhiyun DMI_PRODUCT_VERSION, 542*4882a593Smuzhiyun DMI_PRODUCT_SERIAL, 543*4882a593Smuzhiyun DMI_PRODUCT_UUID, 544*4882a593Smuzhiyun DMI_PRODUCT_SKU, 545*4882a593Smuzhiyun DMI_PRODUCT_FAMILY, 546*4882a593Smuzhiyun DMI_BOARD_VENDOR, 547*4882a593Smuzhiyun DMI_BOARD_NAME, 548*4882a593Smuzhiyun DMI_BOARD_VERSION, 549*4882a593Smuzhiyun DMI_BOARD_SERIAL, 550*4882a593Smuzhiyun DMI_BOARD_ASSET_TAG, 551*4882a593Smuzhiyun DMI_CHASSIS_VENDOR, 552*4882a593Smuzhiyun DMI_CHASSIS_TYPE, 553*4882a593Smuzhiyun DMI_CHASSIS_VERSION, 554*4882a593Smuzhiyun DMI_CHASSIS_SERIAL, 555*4882a593Smuzhiyun DMI_CHASSIS_ASSET_TAG, 556*4882a593Smuzhiyun DMI_STRING_MAX, 557*4882a593Smuzhiyun DMI_OEM_STRING, /* special case - will not be in dmi_ident */ 558*4882a593Smuzhiyun }; 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun struct dmi_strmatch { 561*4882a593Smuzhiyun unsigned char slot:7; 562*4882a593Smuzhiyun unsigned char exact_match:1; 563*4882a593Smuzhiyun char substr[79]; 564*4882a593Smuzhiyun }; 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun struct dmi_system_id { 567*4882a593Smuzhiyun int (*callback)(const struct dmi_system_id *); 568*4882a593Smuzhiyun const char *ident; 569*4882a593Smuzhiyun struct dmi_strmatch matches[4]; 570*4882a593Smuzhiyun void *driver_data; 571*4882a593Smuzhiyun }; 572*4882a593Smuzhiyun /* 573*4882a593Smuzhiyun * struct dmi_device_id appears during expansion of 574*4882a593Smuzhiyun * "MODULE_DEVICE_TABLE(dmi, x)". Compiler doesn't look inside it 575*4882a593Smuzhiyun * but this is enough for gcc 3.4.6 to error out: 576*4882a593Smuzhiyun * error: storage size of '__mod_dmi_device_table' isn't known 577*4882a593Smuzhiyun */ 578*4882a593Smuzhiyun #define dmi_device_id dmi_system_id 579*4882a593Smuzhiyun 580*4882a593Smuzhiyun #define DMI_MATCH(a, b) { .slot = a, .substr = b } 581*4882a593Smuzhiyun #define DMI_EXACT_MATCH(a, b) { .slot = a, .substr = b, .exact_match = 1 } 582*4882a593Smuzhiyun 583*4882a593Smuzhiyun #define PLATFORM_NAME_SIZE 20 584*4882a593Smuzhiyun #define PLATFORM_MODULE_PREFIX "platform:" 585*4882a593Smuzhiyun 586*4882a593Smuzhiyun struct platform_device_id { 587*4882a593Smuzhiyun char name[PLATFORM_NAME_SIZE]; 588*4882a593Smuzhiyun kernel_ulong_t driver_data; 589*4882a593Smuzhiyun }; 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun #define MDIO_NAME_SIZE 32 592*4882a593Smuzhiyun #define MDIO_MODULE_PREFIX "mdio:" 593*4882a593Smuzhiyun 594*4882a593Smuzhiyun #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" 595*4882a593Smuzhiyun #define MDIO_ID_ARGS(_id) \ 596*4882a593Smuzhiyun ((_id)>>31) & 1, ((_id)>>30) & 1, ((_id)>>29) & 1, ((_id)>>28) & 1, \ 597*4882a593Smuzhiyun ((_id)>>27) & 1, ((_id)>>26) & 1, ((_id)>>25) & 1, ((_id)>>24) & 1, \ 598*4882a593Smuzhiyun ((_id)>>23) & 1, ((_id)>>22) & 1, ((_id)>>21) & 1, ((_id)>>20) & 1, \ 599*4882a593Smuzhiyun ((_id)>>19) & 1, ((_id)>>18) & 1, ((_id)>>17) & 1, ((_id)>>16) & 1, \ 600*4882a593Smuzhiyun ((_id)>>15) & 1, ((_id)>>14) & 1, ((_id)>>13) & 1, ((_id)>>12) & 1, \ 601*4882a593Smuzhiyun ((_id)>>11) & 1, ((_id)>>10) & 1, ((_id)>>9) & 1, ((_id)>>8) & 1, \ 602*4882a593Smuzhiyun ((_id)>>7) & 1, ((_id)>>6) & 1, ((_id)>>5) & 1, ((_id)>>4) & 1, \ 603*4882a593Smuzhiyun ((_id)>>3) & 1, ((_id)>>2) & 1, ((_id)>>1) & 1, (_id) & 1 604*4882a593Smuzhiyun 605*4882a593Smuzhiyun /** 606*4882a593Smuzhiyun * struct mdio_device_id - identifies PHY devices on an MDIO/MII bus 607*4882a593Smuzhiyun * @phy_id: The result of 608*4882a593Smuzhiyun * (mdio_read(&MII_PHYSID1) << 16 | mdio_read(&MII_PHYSID2)) & @phy_id_mask 609*4882a593Smuzhiyun * for this PHY type 610*4882a593Smuzhiyun * @phy_id_mask: Defines the significant bits of @phy_id. A value of 0 611*4882a593Smuzhiyun * is used to terminate an array of struct mdio_device_id. 612*4882a593Smuzhiyun */ 613*4882a593Smuzhiyun struct mdio_device_id { 614*4882a593Smuzhiyun __u32 phy_id; 615*4882a593Smuzhiyun __u32 phy_id_mask; 616*4882a593Smuzhiyun }; 617*4882a593Smuzhiyun 618*4882a593Smuzhiyun struct zorro_device_id { 619*4882a593Smuzhiyun __u32 id; /* Device ID or ZORRO_WILDCARD */ 620*4882a593Smuzhiyun kernel_ulong_t driver_data; /* Data private to the driver */ 621*4882a593Smuzhiyun }; 622*4882a593Smuzhiyun 623*4882a593Smuzhiyun #define ZORRO_WILDCARD (0xffffffff) /* not official */ 624*4882a593Smuzhiyun 625*4882a593Smuzhiyun #define ZORRO_DEVICE_MODALIAS_FMT "zorro:i%08X" 626*4882a593Smuzhiyun 627*4882a593Smuzhiyun #define ISAPNP_ANY_ID 0xffff 628*4882a593Smuzhiyun struct isapnp_device_id { 629*4882a593Smuzhiyun unsigned short card_vendor, card_device; 630*4882a593Smuzhiyun unsigned short vendor, function; 631*4882a593Smuzhiyun kernel_ulong_t driver_data; /* data private to the driver */ 632*4882a593Smuzhiyun }; 633*4882a593Smuzhiyun 634*4882a593Smuzhiyun /** 635*4882a593Smuzhiyun * struct amba_id - identifies a device on an AMBA bus 636*4882a593Smuzhiyun * @id: The significant bits if the hardware device ID 637*4882a593Smuzhiyun * @mask: Bitmask specifying which bits of the id field are significant when 638*4882a593Smuzhiyun * matching. A driver binds to a device when ((hardware device ID) & mask) 639*4882a593Smuzhiyun * == id. 640*4882a593Smuzhiyun * @data: Private data used by the driver. 641*4882a593Smuzhiyun */ 642*4882a593Smuzhiyun struct amba_id { 643*4882a593Smuzhiyun unsigned int id; 644*4882a593Smuzhiyun unsigned int mask; 645*4882a593Smuzhiyun void *data; 646*4882a593Smuzhiyun }; 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun /** 649*4882a593Smuzhiyun * struct mips_cdmm_device_id - identifies devices in MIPS CDMM bus 650*4882a593Smuzhiyun * @type: Device type identifier. 651*4882a593Smuzhiyun */ 652*4882a593Smuzhiyun struct mips_cdmm_device_id { 653*4882a593Smuzhiyun __u8 type; 654*4882a593Smuzhiyun }; 655*4882a593Smuzhiyun 656*4882a593Smuzhiyun /* 657*4882a593Smuzhiyun * Match x86 CPUs for CPU specific drivers. 658*4882a593Smuzhiyun * See documentation of "x86_match_cpu" for details. 659*4882a593Smuzhiyun */ 660*4882a593Smuzhiyun 661*4882a593Smuzhiyun /* 662*4882a593Smuzhiyun * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id. 663*4882a593Smuzhiyun * Although gcc seems to ignore this error, clang fails without this define. 664*4882a593Smuzhiyun */ 665*4882a593Smuzhiyun #define x86cpu_device_id x86_cpu_id 666*4882a593Smuzhiyun struct x86_cpu_id { 667*4882a593Smuzhiyun __u16 vendor; 668*4882a593Smuzhiyun __u16 family; 669*4882a593Smuzhiyun __u16 model; 670*4882a593Smuzhiyun __u16 steppings; 671*4882a593Smuzhiyun __u16 feature; /* bit index */ 672*4882a593Smuzhiyun kernel_ulong_t driver_data; 673*4882a593Smuzhiyun }; 674*4882a593Smuzhiyun 675*4882a593Smuzhiyun /* Wild cards for x86_cpu_id::vendor, family, model and feature */ 676*4882a593Smuzhiyun #define X86_VENDOR_ANY 0xffff 677*4882a593Smuzhiyun #define X86_FAMILY_ANY 0 678*4882a593Smuzhiyun #define X86_MODEL_ANY 0 679*4882a593Smuzhiyun #define X86_STEPPING_ANY 0 680*4882a593Smuzhiyun #define X86_FEATURE_ANY 0 /* Same as FPU, you can't test for that */ 681*4882a593Smuzhiyun 682*4882a593Smuzhiyun /* 683*4882a593Smuzhiyun * Generic table type for matching CPU features. 684*4882a593Smuzhiyun * @feature: the bit number of the feature (0 - 65535) 685*4882a593Smuzhiyun */ 686*4882a593Smuzhiyun 687*4882a593Smuzhiyun struct cpu_feature { 688*4882a593Smuzhiyun __u16 feature; 689*4882a593Smuzhiyun }; 690*4882a593Smuzhiyun 691*4882a593Smuzhiyun #define IPACK_ANY_FORMAT 0xff 692*4882a593Smuzhiyun #define IPACK_ANY_ID (~0) 693*4882a593Smuzhiyun struct ipack_device_id { 694*4882a593Smuzhiyun __u8 format; /* Format version or IPACK_ANY_ID */ 695*4882a593Smuzhiyun __u32 vendor; /* Vendor ID or IPACK_ANY_ID */ 696*4882a593Smuzhiyun __u32 device; /* Device ID or IPACK_ANY_ID */ 697*4882a593Smuzhiyun }; 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun #define MEI_CL_MODULE_PREFIX "mei:" 700*4882a593Smuzhiyun #define MEI_CL_NAME_SIZE 32 701*4882a593Smuzhiyun #define MEI_CL_VERSION_ANY 0xff 702*4882a593Smuzhiyun 703*4882a593Smuzhiyun /** 704*4882a593Smuzhiyun * struct mei_cl_device_id - MEI client device identifier 705*4882a593Smuzhiyun * @name: helper name 706*4882a593Smuzhiyun * @uuid: client uuid 707*4882a593Smuzhiyun * @version: client protocol version 708*4882a593Smuzhiyun * @driver_info: information used by the driver. 709*4882a593Smuzhiyun * 710*4882a593Smuzhiyun * identifies mei client device by uuid and name 711*4882a593Smuzhiyun */ 712*4882a593Smuzhiyun struct mei_cl_device_id { 713*4882a593Smuzhiyun char name[MEI_CL_NAME_SIZE]; 714*4882a593Smuzhiyun uuid_le uuid; 715*4882a593Smuzhiyun __u8 version; 716*4882a593Smuzhiyun kernel_ulong_t driver_info; 717*4882a593Smuzhiyun }; 718*4882a593Smuzhiyun 719*4882a593Smuzhiyun /* RapidIO */ 720*4882a593Smuzhiyun 721*4882a593Smuzhiyun #define RIO_ANY_ID 0xffff 722*4882a593Smuzhiyun 723*4882a593Smuzhiyun /** 724*4882a593Smuzhiyun * struct rio_device_id - RIO device identifier 725*4882a593Smuzhiyun * @did: RapidIO device ID 726*4882a593Smuzhiyun * @vid: RapidIO vendor ID 727*4882a593Smuzhiyun * @asm_did: RapidIO assembly device ID 728*4882a593Smuzhiyun * @asm_vid: RapidIO assembly vendor ID 729*4882a593Smuzhiyun * 730*4882a593Smuzhiyun * Identifies a RapidIO device based on both the device/vendor IDs and 731*4882a593Smuzhiyun * the assembly device/vendor IDs. 732*4882a593Smuzhiyun */ 733*4882a593Smuzhiyun struct rio_device_id { 734*4882a593Smuzhiyun __u16 did, vid; 735*4882a593Smuzhiyun __u16 asm_did, asm_vid; 736*4882a593Smuzhiyun }; 737*4882a593Smuzhiyun 738*4882a593Smuzhiyun struct mcb_device_id { 739*4882a593Smuzhiyun __u16 device; 740*4882a593Smuzhiyun kernel_ulong_t driver_data; 741*4882a593Smuzhiyun }; 742*4882a593Smuzhiyun 743*4882a593Smuzhiyun struct ulpi_device_id { 744*4882a593Smuzhiyun __u16 vendor; 745*4882a593Smuzhiyun __u16 product; 746*4882a593Smuzhiyun kernel_ulong_t driver_data; 747*4882a593Smuzhiyun }; 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun /** 750*4882a593Smuzhiyun * struct fsl_mc_device_id - MC object device identifier 751*4882a593Smuzhiyun * @vendor: vendor ID 752*4882a593Smuzhiyun * @obj_type: MC object type 753*4882a593Smuzhiyun * 754*4882a593Smuzhiyun * Type of entries in the "device Id" table for MC object devices supported by 755*4882a593Smuzhiyun * a MC object device driver. The last entry of the table has vendor set to 0x0 756*4882a593Smuzhiyun */ 757*4882a593Smuzhiyun struct fsl_mc_device_id { 758*4882a593Smuzhiyun __u16 vendor; 759*4882a593Smuzhiyun const char obj_type[16]; 760*4882a593Smuzhiyun }; 761*4882a593Smuzhiyun 762*4882a593Smuzhiyun /** 763*4882a593Smuzhiyun * struct tb_service_id - Thunderbolt service identifiers 764*4882a593Smuzhiyun * @match_flags: Flags used to match the structure 765*4882a593Smuzhiyun * @protocol_key: Protocol key the service supports 766*4882a593Smuzhiyun * @protocol_id: Protocol id the service supports 767*4882a593Smuzhiyun * @protocol_version: Version of the protocol 768*4882a593Smuzhiyun * @protocol_revision: Revision of the protocol software 769*4882a593Smuzhiyun * @driver_data: Driver specific data 770*4882a593Smuzhiyun * 771*4882a593Smuzhiyun * Thunderbolt XDomain services are exposed as devices where each device 772*4882a593Smuzhiyun * carries the protocol information the service supports. Thunderbolt 773*4882a593Smuzhiyun * XDomain service drivers match against that information. 774*4882a593Smuzhiyun */ 775*4882a593Smuzhiyun struct tb_service_id { 776*4882a593Smuzhiyun __u32 match_flags; 777*4882a593Smuzhiyun char protocol_key[8 + 1]; 778*4882a593Smuzhiyun __u32 protocol_id; 779*4882a593Smuzhiyun __u32 protocol_version; 780*4882a593Smuzhiyun __u32 protocol_revision; 781*4882a593Smuzhiyun kernel_ulong_t driver_data; 782*4882a593Smuzhiyun }; 783*4882a593Smuzhiyun 784*4882a593Smuzhiyun #define TBSVC_MATCH_PROTOCOL_KEY 0x0001 785*4882a593Smuzhiyun #define TBSVC_MATCH_PROTOCOL_ID 0x0002 786*4882a593Smuzhiyun #define TBSVC_MATCH_PROTOCOL_VERSION 0x0004 787*4882a593Smuzhiyun #define TBSVC_MATCH_PROTOCOL_REVISION 0x0008 788*4882a593Smuzhiyun 789*4882a593Smuzhiyun /* USB Type-C Alternate Modes */ 790*4882a593Smuzhiyun 791*4882a593Smuzhiyun #define TYPEC_ANY_MODE 0x7 792*4882a593Smuzhiyun 793*4882a593Smuzhiyun /** 794*4882a593Smuzhiyun * struct typec_device_id - USB Type-C alternate mode identifiers 795*4882a593Smuzhiyun * @svid: Standard or Vendor ID 796*4882a593Smuzhiyun * @mode: Mode index 797*4882a593Smuzhiyun * @driver_data: Driver specific data 798*4882a593Smuzhiyun */ 799*4882a593Smuzhiyun struct typec_device_id { 800*4882a593Smuzhiyun __u16 svid; 801*4882a593Smuzhiyun __u8 mode; 802*4882a593Smuzhiyun kernel_ulong_t driver_data; 803*4882a593Smuzhiyun }; 804*4882a593Smuzhiyun 805*4882a593Smuzhiyun /** 806*4882a593Smuzhiyun * struct tee_client_device_id - tee based device identifier 807*4882a593Smuzhiyun * @uuid: For TEE based client devices we use the device uuid as 808*4882a593Smuzhiyun * the identifier. 809*4882a593Smuzhiyun */ 810*4882a593Smuzhiyun struct tee_client_device_id { 811*4882a593Smuzhiyun uuid_t uuid; 812*4882a593Smuzhiyun }; 813*4882a593Smuzhiyun 814*4882a593Smuzhiyun /* WMI */ 815*4882a593Smuzhiyun 816*4882a593Smuzhiyun #define WMI_MODULE_PREFIX "wmi:" 817*4882a593Smuzhiyun 818*4882a593Smuzhiyun /** 819*4882a593Smuzhiyun * struct wmi_device_id - WMI device identifier 820*4882a593Smuzhiyun * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba 821*4882a593Smuzhiyun * @context: pointer to driver specific data 822*4882a593Smuzhiyun */ 823*4882a593Smuzhiyun struct wmi_device_id { 824*4882a593Smuzhiyun const char guid_string[UUID_STRING_LEN+1]; 825*4882a593Smuzhiyun const void *context; 826*4882a593Smuzhiyun }; 827*4882a593Smuzhiyun 828*4882a593Smuzhiyun #define MHI_DEVICE_MODALIAS_FMT "mhi:%s" 829*4882a593Smuzhiyun #define MHI_NAME_SIZE 32 830*4882a593Smuzhiyun 831*4882a593Smuzhiyun /** 832*4882a593Smuzhiyun * struct mhi_device_id - MHI device identification 833*4882a593Smuzhiyun * @chan: MHI channel name 834*4882a593Smuzhiyun * @driver_data: driver data; 835*4882a593Smuzhiyun */ 836*4882a593Smuzhiyun struct mhi_device_id { 837*4882a593Smuzhiyun const char chan[MHI_NAME_SIZE]; 838*4882a593Smuzhiyun kernel_ulong_t driver_data; 839*4882a593Smuzhiyun }; 840*4882a593Smuzhiyun 841*4882a593Smuzhiyun #endif /* LINUX_MOD_DEVICETABLE_H */ 842