linux/include/linux/mod_devicetable.h
<<
>>
Prefs
   1/*
   2 * Device tables which are exported to userspace via
   3 * scripts/mod/file2alias.c.  You must keep that file in sync with this
   4 * header.
   5 */
   6
   7#ifndef LINUX_MOD_DEVICETABLE_H
   8#define LINUX_MOD_DEVICETABLE_H
   9
  10#ifdef __KERNEL__
  11#include <linux/types.h>
  12typedef unsigned long kernel_ulong_t;
  13#endif
  14
  15#define PCI_ANY_ID (~0)
  16
  17struct pci_device_id {
  18        __u32 vendor, device;           /* Vendor and device ID or PCI_ANY_ID*/
  19        __u32 subvendor, subdevice;     /* Subsystem ID's or PCI_ANY_ID */
  20        __u32 class, class_mask;        /* (class,subclass,prog-if) triplet */
  21        kernel_ulong_t driver_data;     /* Data private to the driver */
  22};
  23
  24
  25#define IEEE1394_MATCH_VENDOR_ID        0x0001
  26#define IEEE1394_MATCH_MODEL_ID         0x0002
  27#define IEEE1394_MATCH_SPECIFIER_ID     0x0004
  28#define IEEE1394_MATCH_VERSION          0x0008
  29
  30struct ieee1394_device_id {
  31        __u32 match_flags;
  32        __u32 vendor_id;
  33        __u32 model_id;
  34        __u32 specifier_id;
  35        __u32 version;
  36        kernel_ulong_t driver_data;
  37};
  38
  39
  40/*
  41 * Device table entry for "new style" table-driven USB drivers.
  42 * User mode code can read these tables to choose which modules to load.
  43 * Declare the table as a MODULE_DEVICE_TABLE.
  44 *
  45 * A probe() parameter will point to a matching entry from this table.
  46 * Use the driver_info field for each match to hold information tied
  47 * to that match:  device quirks, etc.
  48 *
  49 * Terminate the driver's table with an all-zeroes entry.
  50 * Use the flag values to control which fields are compared.
  51 */
  52
  53/**
  54 * struct usb_device_id - identifies USB devices for probing and hotplugging
  55 * @match_flags: Bit mask controlling of the other fields are used to match
  56 *      against new devices.  Any field except for driver_info may be used,
  57 *      although some only make sense in conjunction with other fields.
  58 *      This is usually set by a USB_DEVICE_*() macro, which sets all
  59 *      other fields in this structure except for driver_info.
  60 * @idVendor: USB vendor ID for a device; numbers are assigned
  61 *      by the USB forum to its members.
  62 * @idProduct: Vendor-assigned product ID.
  63 * @bcdDevice_lo: Low end of range of vendor-assigned product version numbers.
  64 *      This is also used to identify individual product versions, for
  65 *      a range consisting of a single device.
  66 * @bcdDevice_hi: High end of version number range.  The range of product
  67 *      versions is inclusive.
  68 * @bDeviceClass: Class of device; numbers are assigned
  69 *      by the USB forum.  Products may choose to implement classes,
  70 *      or be vendor-specific.  Device classes specify behavior of all
  71 *      the interfaces on a devices.
  72 * @bDeviceSubClass: Subclass of device; associated with bDeviceClass.
  73 * @bDeviceProtocol: Protocol of device; associated with bDeviceClass.
  74 * @bInterfaceClass: Class of interface; numbers are assigned
  75 *      by the USB forum.  Products may choose to implement classes,
  76 *      or be vendor-specific.  Interface classes specify behavior only
  77 *      of a given interface; other interfaces may support other classes.
  78 * @bInterfaceSubClass: Subclass of interface; associated with bInterfaceClass.
  79 * @bInterfaceProtocol: Protocol of interface; associated with bInterfaceClass.
  80 * @bInterfaceNumber: Number of interface; composite devices may use
  81 *      fixed interface numbers to differentiate between vendor-specific
  82 *      interfaces.
  83 * @driver_info: Holds information used by the driver.  Usually it holds
  84 *      a pointer to a descriptor understood by the driver, or perhaps
  85 *      device flags.
  86 *
  87 * In most cases, drivers will create a table of device IDs by using
  88 * USB_DEVICE(), or similar macros designed for that purpose.
  89 * They will then export it to userspace using MODULE_DEVICE_TABLE(),
  90 * and provide it to the USB core through their usb_driver structure.
  91 *
  92 * See the usb_match_id() function for information about how matches are
  93 * performed.  Briefly, you will normally use one of several macros to help
  94 * construct these entries.  Each entry you provide will either identify
  95 * one or more specific products, or will identify a class of products
  96 * which have agreed to behave the same.  You should put the more specific
  97 * matches towards the beginning of your table, so that driver_info can
  98 * record quirks of specific products.
  99 */
 100struct usb_device_id {
 101        /* which fields to match against? */
 102        __u16           match_flags;
 103
 104        /* Used for product specific matches; range is inclusive */
 105        __u16           idVendor;
 106        __u16           idProduct;
 107        __u16           bcdDevice_lo;
 108        __u16           bcdDevice_hi;
 109
 110        /* Used for device class matches */
 111        __u8            bDeviceClass;
 112        __u8            bDeviceSubClass;
 113        __u8            bDeviceProtocol;
 114
 115        /* Used for interface class matches */
 116        __u8            bInterfaceClass;
 117        __u8            bInterfaceSubClass;
 118        __u8            bInterfaceProtocol;
 119
 120        /* Used for vendor-specific interface matches */
 121        __u8            bInterfaceNumber;
 122
 123        /* not matched against */
 124        kernel_ulong_t  driver_info
 125                __attribute__((aligned(sizeof(kernel_ulong_t))));
 126};
 127
 128/* Some useful macros to use to create struct usb_device_id */
 129#define USB_DEVICE_ID_MATCH_VENDOR              0x0001
 130#define USB_DEVICE_ID_MATCH_PRODUCT             0x0002
 131#define USB_DEVICE_ID_MATCH_DEV_LO              0x0004
 132#define USB_DEVICE_ID_MATCH_DEV_HI              0x0008
 133#define USB_DEVICE_ID_MATCH_DEV_CLASS           0x0010
 134#define USB_DEVICE_ID_MATCH_DEV_SUBCLASS        0x0020
 135#define USB_DEVICE_ID_MATCH_DEV_PROTOCOL        0x0040
 136#define USB_DEVICE_ID_MATCH_INT_CLASS           0x0080
 137#define USB_DEVICE_ID_MATCH_INT_SUBCLASS        0x0100
 138#define USB_DEVICE_ID_MATCH_INT_PROTOCOL        0x0200
 139#define USB_DEVICE_ID_MATCH_INT_NUMBER          0x0400
 140
 141#define HID_ANY_ID                              (~0)
 142#define HID_BUS_ANY                             0xffff
 143#define HID_GROUP_ANY                           0x0000
 144
 145struct hid_device_id {
 146        __u16 bus;
 147        __u16 group;
 148        __u32 vendor;
 149        __u32 product;
 150        kernel_ulong_t driver_data;
 151};
 152
 153/* s390 CCW devices */
 154struct ccw_device_id {
 155        __u16   match_flags;    /* which fields to match against */
 156
 157        __u16   cu_type;        /* control unit type     */
 158        __u16   dev_type;       /* device type           */
 159        __u8    cu_model;       /* control unit model    */
 160        __u8    dev_model;      /* device model          */
 161
 162        kernel_ulong_t driver_info;
 163};
 164
 165#define CCW_DEVICE_ID_MATCH_CU_TYPE             0x01
 166#define CCW_DEVICE_ID_MATCH_CU_MODEL            0x02
 167#define CCW_DEVICE_ID_MATCH_DEVICE_TYPE         0x04
 168#define CCW_DEVICE_ID_MATCH_DEVICE_MODEL        0x08
 169
 170/* s390 AP bus devices */
 171struct ap_device_id {
 172        __u16 match_flags;      /* which fields to match against */
 173        __u8 dev_type;          /* device type */
 174        kernel_ulong_t driver_info;
 175};
 176
 177#define AP_DEVICE_ID_MATCH_DEVICE_TYPE          0x01
 178
 179/* s390 css bus devices (subchannels) */
 180struct css_device_id {
 181        __u8 match_flags;
 182        __u8 type; /* subchannel type */
 183        kernel_ulong_t driver_data;
 184};
 185
 186#define ACPI_ID_LEN     9
 187
 188struct acpi_device_id {
 189        __u8 id[ACPI_ID_LEN];
 190        kernel_ulong_t driver_data;
 191};
 192
 193#define PNP_ID_LEN      8
 194#define PNP_MAX_DEVICES 8
 195
 196struct pnp_device_id {
 197        __u8 id[PNP_ID_LEN];
 198        kernel_ulong_t driver_data;
 199};
 200
 201struct pnp_card_device_id {
 202        __u8 id[PNP_ID_LEN];
 203        kernel_ulong_t driver_data;
 204        struct {
 205                __u8 id[PNP_ID_LEN];
 206        } devs[PNP_MAX_DEVICES];
 207};
 208
 209
 210#define SERIO_ANY       0xff
 211
 212struct serio_device_id {
 213        __u8 type;
 214        __u8 extra;
 215        __u8 id;
 216        __u8 proto;
 217};
 218
 219/*
 220 * Struct used for matching a device
 221 */
 222struct of_device_id
 223{
 224        char    name[32];
 225        char    type[32];
 226        char    compatible[128];
 227        const void *data;
 228};
 229
 230/* VIO */
 231struct vio_device_id {
 232        char type[32];
 233        char compat[32];
 234};
 235
 236/* PCMCIA */
 237
 238struct pcmcia_device_id {
 239        __u16           match_flags;
 240
 241        __u16           manf_id;
 242        __u16           card_id;
 243
 244        __u8            func_id;
 245
 246        /* for real multi-function devices */
 247        __u8            function;
 248
 249        /* for pseudo multi-function devices */
 250        __u8            device_no;
 251
 252        __u32           prod_id_hash[4];
 253
 254        /* not matched against in kernelspace*/
 255        const char *    prod_id[4];
 256
 257        /* not matched against */
 258        kernel_ulong_t  driver_info;
 259        char *          cisfile;
 260};
 261
 262#define PCMCIA_DEV_ID_MATCH_MANF_ID     0x0001
 263#define PCMCIA_DEV_ID_MATCH_CARD_ID     0x0002
 264#define PCMCIA_DEV_ID_MATCH_FUNC_ID     0x0004
 265#define PCMCIA_DEV_ID_MATCH_FUNCTION    0x0008
 266#define PCMCIA_DEV_ID_MATCH_PROD_ID1    0x0010
 267#define PCMCIA_DEV_ID_MATCH_PROD_ID2    0x0020
 268#define PCMCIA_DEV_ID_MATCH_PROD_ID3    0x0040
 269#define PCMCIA_DEV_ID_MATCH_PROD_ID4    0x0080
 270#define PCMCIA_DEV_ID_MATCH_DEVICE_NO   0x0100
 271#define PCMCIA_DEV_ID_MATCH_FAKE_CIS    0x0200
 272#define PCMCIA_DEV_ID_MATCH_ANONYMOUS   0x0400
 273
 274/* Input */
 275#define INPUT_DEVICE_ID_EV_MAX          0x1f
 276#define INPUT_DEVICE_ID_KEY_MIN_INTERESTING     0x71
 277#define INPUT_DEVICE_ID_KEY_MAX         0x2ff
 278#define INPUT_DEVICE_ID_REL_MAX         0x0f
 279#define INPUT_DEVICE_ID_ABS_MAX         0x3f
 280#define INPUT_DEVICE_ID_MSC_MAX         0x07
 281#define INPUT_DEVICE_ID_LED_MAX         0x0f
 282#define INPUT_DEVICE_ID_SND_MAX         0x07
 283#define INPUT_DEVICE_ID_FF_MAX          0x7f
 284#define INPUT_DEVICE_ID_SW_MAX          0x0f
 285
 286#define INPUT_DEVICE_ID_MATCH_BUS       1
 287#define INPUT_DEVICE_ID_MATCH_VENDOR    2
 288#define INPUT_DEVICE_ID_MATCH_PRODUCT   4
 289#define INPUT_DEVICE_ID_MATCH_VERSION   8
 290
 291#define INPUT_DEVICE_ID_MATCH_EVBIT     0x0010
 292#define INPUT_DEVICE_ID_MATCH_KEYBIT    0x0020
 293#define INPUT_DEVICE_ID_MATCH_RELBIT    0x0040
 294#define INPUT_DEVICE_ID_MATCH_ABSBIT    0x0080
 295#define INPUT_DEVICE_ID_MATCH_MSCIT     0x0100
 296#define INPUT_DEVICE_ID_MATCH_LEDBIT    0x0200
 297#define INPUT_DEVICE_ID_MATCH_SNDBIT    0x0400
 298#define INPUT_DEVICE_ID_MATCH_FFBIT     0x0800
 299#define INPUT_DEVICE_ID_MATCH_SWBIT     0x1000
 300
 301struct input_device_id {
 302
 303        kernel_ulong_t flags;
 304
 305        __u16 bustype;
 306        __u16 vendor;
 307        __u16 product;
 308        __u16 version;
 309
 310        kernel_ulong_t evbit[INPUT_DEVICE_ID_EV_MAX / BITS_PER_LONG + 1];
 311        kernel_ulong_t keybit[INPUT_DEVICE_ID_KEY_MAX / BITS_PER_LONG + 1];
 312        kernel_ulong_t relbit[INPUT_DEVICE_ID_REL_MAX / BITS_PER_LONG + 1];
 313        kernel_ulong_t absbit[INPUT_DEVICE_ID_ABS_MAX / BITS_PER_LONG + 1];
 314        kernel_ulong_t mscbit[INPUT_DEVICE_ID_MSC_MAX / BITS_PER_LONG + 1];
 315        kernel_ulong_t ledbit[INPUT_DEVICE_ID_LED_MAX / BITS_PER_LONG + 1];
 316        kernel_ulong_t sndbit[INPUT_DEVICE_ID_SND_MAX / BITS_PER_LONG + 1];
 317        kernel_ulong_t ffbit[INPUT_DEVICE_ID_FF_MAX / BITS_PER_LONG + 1];
 318        kernel_ulong_t swbit[INPUT_DEVICE_ID_SW_MAX / BITS_PER_LONG + 1];
 319
 320        kernel_ulong_t driver_info;
 321};
 322
 323/* EISA */
 324
 325#define EISA_SIG_LEN   8
 326
 327/* The EISA signature, in ASCII form, null terminated */
 328struct eisa_device_id {
 329        char          sig[EISA_SIG_LEN];
 330        kernel_ulong_t driver_data;
 331};
 332
 333#define EISA_DEVICE_MODALIAS_FMT "eisa:s%s"
 334
 335struct parisc_device_id {
 336        __u8    hw_type;        /* 5 bits used */
 337        __u8    hversion_rev;   /* 4 bits */
 338        __u16   hversion;       /* 12 bits */
 339        __u32   sversion;       /* 20 bits */
 340};
 341
 342#define PA_HWTYPE_ANY_ID        0xff
 343#define PA_HVERSION_REV_ANY_ID  0xff
 344#define PA_HVERSION_ANY_ID      0xffff
 345#define PA_SVERSION_ANY_ID      0xffffffff
 346
 347/* SDIO */
 348
 349#define SDIO_ANY_ID (~0)
 350
 351struct sdio_device_id {
 352        __u8    class;                  /* Standard interface or SDIO_ANY_ID */
 353        __u16   vendor;                 /* Vendor or SDIO_ANY_ID */
 354        __u16   device;                 /* Device ID or SDIO_ANY_ID */
 355        kernel_ulong_t driver_data;     /* Data private to the driver */
 356};
 357
 358/* SSB core, see drivers/ssb/ */
 359struct ssb_device_id {
 360        __u16   vendor;
 361        __u16   coreid;
 362        __u8    revision;
 363};
 364#define SSB_DEVICE(_vendor, _coreid, _revision)  \
 365        { .vendor = _vendor, .coreid = _coreid, .revision = _revision, }
 366#define SSB_DEVTABLE_END  \
 367        { 0, },
 368
 369#define SSB_ANY_VENDOR          0xFFFF
 370#define SSB_ANY_ID              0xFFFF
 371#define SSB_ANY_REV             0xFF
 372
 373/* Broadcom's specific AMBA core, see drivers/bcma/ */
 374struct bcma_device_id {
 375        __u16   manuf;
 376        __u16   id;
 377        __u8    rev;
 378        __u8    class;
 379};
 380#define BCMA_CORE(_manuf, _id, _rev, _class)  \
 381        { .manuf = _manuf, .id = _id, .rev = _rev, .class = _class, }
 382#define BCMA_CORETABLE_END  \
 383        { 0, },
 384
 385#define BCMA_ANY_MANUF          0xFFFF
 386#define BCMA_ANY_ID             0xFFFF
 387#define BCMA_ANY_REV            0xFF
 388#define BCMA_ANY_CLASS          0xFF
 389
 390struct virtio_device_id {
 391        __u32 device;
 392        __u32 vendor;
 393};
 394#define VIRTIO_DEV_ANY_ID       0xffffffff
 395
 396/*
 397 * For Hyper-V devices we use the device guid as the id.
 398 */
 399struct hv_vmbus_device_id {
 400        __u8 guid[16];
 401        kernel_ulong_t driver_data;     /* Data private to the driver */
 402};
 403
 404/* rpmsg */
 405
 406#define RPMSG_NAME_SIZE                 32
 407#define RPMSG_DEVICE_MODALIAS_FMT       "rpmsg:%s"
 408
 409struct rpmsg_device_id {
 410        char name[RPMSG_NAME_SIZE];
 411};
 412
 413/* i2c */
 414
 415#define I2C_NAME_SIZE   20
 416#define I2C_MODULE_PREFIX "i2c:"
 417
 418struct i2c_device_id {
 419        char name[I2C_NAME_SIZE];
 420        kernel_ulong_t driver_data;     /* Data private to the driver */
 421};
 422
 423/* spi */
 424
 425#define SPI_NAME_SIZE   32
 426#define SPI_MODULE_PREFIX "spi:"
 427
 428struct spi_device_id {
 429        char name[SPI_NAME_SIZE];
 430        kernel_ulong_t driver_data;     /* Data private to the driver */
 431};
 432
 433/* dmi */
 434enum dmi_field {
 435        DMI_NONE,
 436        DMI_BIOS_VENDOR,
 437        DMI_BIOS_VERSION,
 438        DMI_BIOS_DATE,
 439        DMI_SYS_VENDOR,
 440        DMI_PRODUCT_NAME,
 441        DMI_PRODUCT_VERSION,
 442        DMI_PRODUCT_SERIAL,
 443        DMI_PRODUCT_UUID,
 444        DMI_BOARD_VENDOR,
 445        DMI_BOARD_NAME,
 446        DMI_BOARD_VERSION,
 447        DMI_BOARD_SERIAL,
 448        DMI_BOARD_ASSET_TAG,
 449        DMI_CHASSIS_VENDOR,
 450        DMI_CHASSIS_TYPE,
 451        DMI_CHASSIS_VERSION,
 452        DMI_CHASSIS_SERIAL,
 453        DMI_CHASSIS_ASSET_TAG,
 454        DMI_STRING_MAX,
 455};
 456
 457struct dmi_strmatch {
 458        unsigned char slot;
 459        char substr[79];
 460};
 461
 462struct dmi_system_id {
 463        int (*callback)(const struct dmi_system_id *);
 464        const char *ident;
 465        struct dmi_strmatch matches[4];
 466        void *driver_data;
 467};
 468/*
 469 * struct dmi_device_id appears during expansion of
 470 * "MODULE_DEVICE_TABLE(dmi, x)". Compiler doesn't look inside it
 471 * but this is enough for gcc 3.4.6 to error out:
 472 *      error: storage size of '__mod_dmi_device_table' isn't known
 473 */
 474#define dmi_device_id dmi_system_id
 475
 476#define DMI_MATCH(a, b) { a, b }
 477
 478#define PLATFORM_NAME_SIZE      20
 479#define PLATFORM_MODULE_PREFIX  "platform:"
 480
 481struct platform_device_id {
 482        char name[PLATFORM_NAME_SIZE];
 483        kernel_ulong_t driver_data;
 484};
 485
 486#define MDIO_MODULE_PREFIX      "mdio:"
 487
 488#define MDIO_ID_FMT "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
 489#define MDIO_ID_ARGS(_id) \
 490        (_id)>>31, ((_id)>>30) & 1, ((_id)>>29) & 1, ((_id)>>28) & 1,   \
 491        ((_id)>>27) & 1, ((_id)>>26) & 1, ((_id)>>25) & 1, ((_id)>>24) & 1, \
 492        ((_id)>>23) & 1, ((_id)>>22) & 1, ((_id)>>21) & 1, ((_id)>>20) & 1, \
 493        ((_id)>>19) & 1, ((_id)>>18) & 1, ((_id)>>17) & 1, ((_id)>>16) & 1, \
 494        ((_id)>>15) & 1, ((_id)>>14) & 1, ((_id)>>13) & 1, ((_id)>>12) & 1, \
 495        ((_id)>>11) & 1, ((_id)>>10) & 1, ((_id)>>9) & 1, ((_id)>>8) & 1, \
 496        ((_id)>>7) & 1, ((_id)>>6) & 1, ((_id)>>5) & 1, ((_id)>>4) & 1, \
 497        ((_id)>>3) & 1, ((_id)>>2) & 1, ((_id)>>1) & 1, (_id) & 1
 498
 499/**
 500 * struct mdio_device_id - identifies PHY devices on an MDIO/MII bus
 501 * @phy_id: The result of
 502 *     (mdio_read(&MII_PHYSID1) << 16 | mdio_read(&PHYSID2)) & @phy_id_mask
 503 *     for this PHY type
 504 * @phy_id_mask: Defines the significant bits of @phy_id.  A value of 0
 505 *     is used to terminate an array of struct mdio_device_id.
 506 */
 507struct mdio_device_id {
 508        __u32 phy_id;
 509        __u32 phy_id_mask;
 510};
 511
 512struct zorro_device_id {
 513        __u32 id;                       /* Device ID or ZORRO_WILDCARD */
 514        kernel_ulong_t driver_data;     /* Data private to the driver */
 515};
 516
 517#define ZORRO_WILDCARD                  (0xffffffff)    /* not official */
 518
 519#define ZORRO_DEVICE_MODALIAS_FMT       "zorro:i%08X"
 520
 521#define ISAPNP_ANY_ID           0xffff
 522struct isapnp_device_id {
 523        unsigned short card_vendor, card_device;
 524        unsigned short vendor, function;
 525        kernel_ulong_t driver_data;     /* data private to the driver */
 526};
 527
 528/**
 529 * struct amba_id - identifies a device on an AMBA bus
 530 * @id: The significant bits if the hardware device ID
 531 * @mask: Bitmask specifying which bits of the id field are significant when
 532 *      matching.  A driver binds to a device when ((hardware device ID) & mask)
 533 *      == id.
 534 * @data: Private data used by the driver.
 535 */
 536struct amba_id {
 537        unsigned int            id;
 538        unsigned int            mask;
 539        void                    *data;
 540};
 541
 542/*
 543 * Match x86 CPUs for CPU specific drivers.
 544 * See documentation of "x86_match_cpu" for details.
 545 */
 546
 547struct x86_cpu_id {
 548        __u16 vendor;
 549        __u16 family;
 550        __u16 model;
 551        __u16 feature;  /* bit index */
 552        kernel_ulong_t driver_data;
 553};
 554
 555#define X86_FEATURE_MATCH(x) \
 556        { X86_VENDOR_ANY, X86_FAMILY_ANY, X86_MODEL_ANY, x }
 557
 558#define X86_VENDOR_ANY 0xffff
 559#define X86_FAMILY_ANY 0
 560#define X86_MODEL_ANY  0
 561#define X86_FEATURE_ANY 0       /* Same as FPU, you can't test for that */
 562
 563#define IPACK_ANY_FORMAT 0xff
 564#define IPACK_ANY_ID (~0)
 565struct ipack_device_id {
 566        __u8  format;                   /* Format version or IPACK_ANY_ID */
 567        __u32 vendor;                   /* Vendor ID or IPACK_ANY_ID */
 568        __u32 device;                   /* Device ID or IPACK_ANY_ID */
 569};
 570
 571#endif /* LINUX_MOD_DEVICETABLE_H */
 572
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.