2005-04-16 15:20:36 -07:00
/*
* Device tables which are exported to userspace via
2005-08-17 16:42:59 +10:00
* scripts / mod / file2alias . c . You must keep that file in sync with this
2005-04-16 15:20:36 -07:00
* header .
*/
# ifndef LINUX_MOD_DEVICETABLE_H
# define LINUX_MOD_DEVICETABLE_H
# ifdef __KERNEL__
# include <linux/types.h>
typedef unsigned long kernel_ulong_t ;
# endif
# define PCI_ANY_ID (~0)
struct pci_device_id {
__u32 vendor , device ; /* Vendor and device ID or PCI_ANY_ID*/
__u32 subvendor , subdevice ; /* Subsystem ID's or PCI_ANY_ID */
__u32 class , class_mask ; /* (class,subclass,prog-if) triplet */
kernel_ulong_t driver_data ; /* Data private to the driver */
} ;
# define IEEE1394_MATCH_VENDOR_ID 0x0001
# define IEEE1394_MATCH_MODEL_ID 0x0002
# define IEEE1394_MATCH_SPECIFIER_ID 0x0004
# define IEEE1394_MATCH_VERSION 0x0008
struct ieee1394_device_id {
__u32 match_flags ;
__u32 vendor_id ;
__u32 model_id ;
__u32 specifier_id ;
__u32 version ;
2005-08-28 03:19:14 +01:00
kernel_ulong_t driver_data
__attribute__ ( ( aligned ( sizeof ( kernel_ulong_t ) ) ) ) ;
2005-04-16 15:20:36 -07:00
} ;
/*
* Device table entry for " new style " table - driven USB drivers .
* User mode code can read these tables to choose which modules to load .
* Declare the table as a MODULE_DEVICE_TABLE .
*
* A probe ( ) parameter will point to a matching entry from this table .
* Use the driver_info field for each match to hold information tied
* to that match : device quirks , etc .
*
* Terminate the driver ' s table with an all - zeroes entry .
* Use the flag values to control which fields are compared .
*/
/**
* struct usb_device_id - identifies USB devices for probing and hotplugging
* @ match_flags : Bit mask controlling of the other fields are used to match
* against new devices . Any field except for driver_info may be used ,
* although some only make sense in conjunction with other fields .
* This is usually set by a USB_DEVICE_ * ( ) macro , which sets all
* other fields in this structure except for driver_info .
* @ idVendor : USB vendor ID for a device ; numbers are assigned
* by the USB forum to its members .
* @ idProduct : Vendor - assigned product ID .
* @ bcdDevice_lo : Low end of range of vendor - assigned product version numbers .
* This is also used to identify individual product versions , for
* a range consisting of a single device .
* @ bcdDevice_hi : High end of version number range . The range of product
* versions is inclusive .
* @ bDeviceClass : Class of device ; numbers are assigned
* by the USB forum . Products may choose to implement classes ,
* or be vendor - specific . Device classes specify behavior of all
* the interfaces on a devices .
* @ bDeviceSubClass : Subclass of device ; associated with bDeviceClass .
* @ bDeviceProtocol : Protocol of device ; associated with bDeviceClass .
* @ bInterfaceClass : Class of interface ; numbers are assigned
* by the USB forum . Products may choose to implement classes ,
* or be vendor - specific . Interface classes specify behavior only
* of a given interface ; other interfaces may support other classes .
* @ bInterfaceSubClass : Subclass of interface ; associated with bInterfaceClass .
* @ bInterfaceProtocol : Protocol of interface ; associated with bInterfaceClass .
* @ driver_info : Holds information used by the driver . Usually it holds
* a pointer to a descriptor understood by the driver , or perhaps
* device flags .
*
* In most cases , drivers will create a table of device IDs by using
* USB_DEVICE ( ) , or similar macros designed for that purpose .
* They will then export it to userspace using MODULE_DEVICE_TABLE ( ) ,
* and provide it to the USB core through their usb_driver structure .
*
* See the usb_match_id ( ) function for information about how matches are
* performed . Briefly , you will normally use one of several macros to help
* construct these entries . Each entry you provide will either identify
* one or more specific products , or will identify a class of products
* which have agreed to behave the same . You should put the more specific
* matches towards the beginning of your table , so that driver_info can
* record quirks of specific products .
*/
struct usb_device_id {
/* which fields to match against? */
__u16 match_flags ;
/* Used for product specific matches; range is inclusive */
__u16 idVendor ;
__u16 idProduct ;
__u16 bcdDevice_lo ;
__u16 bcdDevice_hi ;
/* Used for device class matches */
__u8 bDeviceClass ;
__u8 bDeviceSubClass ;
__u8 bDeviceProtocol ;
/* Used for interface class matches */
__u8 bInterfaceClass ;
__u8 bInterfaceSubClass ;
__u8 bInterfaceProtocol ;
/* not matched against */
kernel_ulong_t driver_info ;
} ;
/* Some useful macros to use to create struct usb_device_id */
# define USB_DEVICE_ID_MATCH_VENDOR 0x0001
# define USB_DEVICE_ID_MATCH_PRODUCT 0x0002
# define USB_DEVICE_ID_MATCH_DEV_LO 0x0004
# define USB_DEVICE_ID_MATCH_DEV_HI 0x0008
# define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010
# define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020
# define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040
# define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080
# define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100
# define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200
/* s390 CCW devices */
struct ccw_device_id {
__u16 match_flags ; /* which fields to match against */
__u16 cu_type ; /* control unit type */
__u16 dev_type ; /* device type */
__u8 cu_model ; /* control unit model */
__u8 dev_model ; /* device model */
kernel_ulong_t driver_info ;
} ;
# define CCW_DEVICE_ID_MATCH_CU_TYPE 0x01
# define CCW_DEVICE_ID_MATCH_CU_MODEL 0x02
# define CCW_DEVICE_ID_MATCH_DEVICE_TYPE 0x04
# define CCW_DEVICE_ID_MATCH_DEVICE_MODEL 0x08
2006-09-20 15:58:25 +02:00
/* s390 AP bus devices */
struct ap_device_id {
__u16 match_flags ; /* which fields to match against */
__u8 dev_type ; /* device type */
__u8 pad1 ;
__u32 pad2 ;
kernel_ulong_t driver_info ;
} ;
# define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01
2008-07-14 09:58:44 +02:00
/* s390 css bus devices (subchannels) */
struct css_device_id {
2008-07-14 09:59:03 +02:00
__u8 match_flags ;
2008-07-14 09:58:44 +02:00
__u8 type ; /* subchannel type */
__u16 pad2 ;
__u32 pad3 ;
kernel_ulong_t driver_data ;
} ;
2007-08-16 16:27:15 +02:00
# define ACPI_ID_LEN 16 /* only 9 bytes needed here, 16 bytes are used */
/* to workaround crosscompile issues */
2007-07-23 14:43:51 +02:00
struct acpi_device_id {
__u8 id [ ACPI_ID_LEN ] ;
kernel_ulong_t driver_data ;
} ;
2005-04-16 15:20:36 -07:00
# define PNP_ID_LEN 8
# define PNP_MAX_DEVICES 8
struct pnp_device_id {
__u8 id [ PNP_ID_LEN ] ;
kernel_ulong_t driver_data ;
} ;
struct pnp_card_device_id {
__u8 id [ PNP_ID_LEN ] ;
kernel_ulong_t driver_data ;
struct {
__u8 id [ PNP_ID_LEN ] ;
} devs [ PNP_MAX_DEVICES ] ;
} ;
# define SERIO_ANY 0xff
struct serio_device_id {
__u8 type ;
__u8 extra ;
__u8 id ;
__u8 proto ;
} ;
2005-07-06 15:44:41 -04:00
/*
* Struct used for matching a device
*/
struct of_device_id
{
char name [ 32 ] ;
char type [ 32 ] ;
char compatible [ 128 ] ;
2005-10-01 17:00:48 +02:00
# ifdef __KERNEL__
2005-07-06 15:44:41 -04:00
void * data ;
2005-08-28 03:19:14 +01:00
# else
kernel_ulong_t data ;
# endif
2005-07-06 15:44:41 -04:00
} ;
2005-08-17 16:42:59 +10:00
/* VIO */
struct vio_device_id {
char type [ 32 ] ;
char compat [ 32 ] ;
} ;
2005-04-16 15:20:36 -07:00
2005-06-27 16:28:06 -07:00
/* PCMCIA */
struct pcmcia_device_id {
__u16 match_flags ;
__u16 manf_id ;
__u16 card_id ;
__u8 func_id ;
/* for real multi-function devices */
__u8 function ;
2005-09-25 14:39:46 +02:00
/* for pseudo multi-function devices */
2005-06-27 16:28:06 -07:00
__u8 device_no ;
2005-09-25 14:39:46 +02:00
__u32 prod_id_hash [ 4 ]
__attribute__ ( ( aligned ( sizeof ( __u32 ) ) ) ) ;
2005-06-27 16:28:06 -07:00
2005-06-27 16:28:56 -07:00
/* not matched against in kernelspace*/
# ifdef __KERNEL__
const char * prod_id [ 4 ] ;
# else
2005-08-28 03:19:14 +01:00
kernel_ulong_t prod_id [ 4 ]
__attribute__ ( ( aligned ( sizeof ( kernel_ulong_t ) ) ) ) ;
2005-06-27 16:28:56 -07:00
# endif
2005-06-27 16:28:06 -07:00
/* not matched against */
kernel_ulong_t driver_info ;
2005-06-27 16:28:56 -07:00
# ifdef __KERNEL__
2005-06-27 16:28:07 -07:00
char * cisfile ;
2005-06-27 16:28:56 -07:00
# else
kernel_ulong_t cisfile ;
# endif
2005-06-27 16:28:06 -07:00
} ;
# define PCMCIA_DEV_ID_MATCH_MANF_ID 0x0001
# define PCMCIA_DEV_ID_MATCH_CARD_ID 0x0002
# define PCMCIA_DEV_ID_MATCH_FUNC_ID 0x0004
# define PCMCIA_DEV_ID_MATCH_FUNCTION 0x0008
# define PCMCIA_DEV_ID_MATCH_PROD_ID1 0x0010
# define PCMCIA_DEV_ID_MATCH_PROD_ID2 0x0020
# define PCMCIA_DEV_ID_MATCH_PROD_ID3 0x0040
# define PCMCIA_DEV_ID_MATCH_PROD_ID4 0x0080
# define PCMCIA_DEV_ID_MATCH_DEVICE_NO 0x0100
2005-06-27 16:28:07 -07:00
# define PCMCIA_DEV_ID_MATCH_FAKE_CIS 0x0200
2005-06-27 16:28:09 -07:00
# define PCMCIA_DEV_ID_MATCH_ANONYMOUS 0x0400
2005-06-27 16:28:06 -07:00
2006-04-26 00:14:19 -04:00
/* Input */
# define INPUT_DEVICE_ID_EV_MAX 0x1f
2007-03-09 19:59:06 +01:00
# define INPUT_DEVICE_ID_KEY_MIN_INTERESTING 0x71
2006-04-26 00:14:19 -04:00
# define INPUT_DEVICE_ID_KEY_MAX 0x1ff
# define INPUT_DEVICE_ID_REL_MAX 0x0f
# define INPUT_DEVICE_ID_ABS_MAX 0x3f
# define INPUT_DEVICE_ID_MSC_MAX 0x07
# define INPUT_DEVICE_ID_LED_MAX 0x0f
# define INPUT_DEVICE_ID_SND_MAX 0x07
# define INPUT_DEVICE_ID_FF_MAX 0x7f
# define INPUT_DEVICE_ID_SW_MAX 0x0f
# define INPUT_DEVICE_ID_MATCH_BUS 1
# define INPUT_DEVICE_ID_MATCH_VENDOR 2
# define INPUT_DEVICE_ID_MATCH_PRODUCT 4
# define INPUT_DEVICE_ID_MATCH_VERSION 8
# define INPUT_DEVICE_ID_MATCH_EVBIT 0x0010
# define INPUT_DEVICE_ID_MATCH_KEYBIT 0x0020
# define INPUT_DEVICE_ID_MATCH_RELBIT 0x0040
# define INPUT_DEVICE_ID_MATCH_ABSBIT 0x0080
# define INPUT_DEVICE_ID_MATCH_MSCIT 0x0100
# define INPUT_DEVICE_ID_MATCH_LEDBIT 0x0200
# define INPUT_DEVICE_ID_MATCH_SNDBIT 0x0400
# define INPUT_DEVICE_ID_MATCH_FFBIT 0x0800
# define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
struct input_device_id {
kernel_ulong_t flags ;
__u16 bustype ;
__u16 vendor ;
__u16 product ;
__u16 version ;
kernel_ulong_t evbit [ INPUT_DEVICE_ID_EV_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t keybit [ INPUT_DEVICE_ID_KEY_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t relbit [ INPUT_DEVICE_ID_REL_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t absbit [ INPUT_DEVICE_ID_ABS_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t mscbit [ INPUT_DEVICE_ID_MSC_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t ledbit [ INPUT_DEVICE_ID_LED_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t sndbit [ INPUT_DEVICE_ID_SND_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t ffbit [ INPUT_DEVICE_ID_FF_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t swbit [ INPUT_DEVICE_ID_SW_MAX / BITS_PER_LONG + 1 ] ;
kernel_ulong_t driver_info ;
} ;
2006-09-27 01:50:56 -07:00
/* EISA */
# define EISA_SIG_LEN 8
/* The EISA signature, in ASCII form, null terminated */
struct eisa_device_id {
char sig [ EISA_SIG_LEN ] ;
kernel_ulong_t driver_data ;
} ;
# define EISA_DEVICE_MODALIAS_FMT "eisa:s%s"
2007-01-13 14:57:25 -05:00
struct parisc_device_id {
__u8 hw_type ; /* 5 bits used */
__u8 hversion_rev ; /* 4 bits */
__u16 hversion ; /* 12 bits */
__u32 sversion ; /* 20 bits */
} ;
2007-01-13 15:02:09 -05:00
# define PA_HWTYPE_ANY_ID 0xff
# define PA_HVERSION_REV_ANY_ID 0xff
# define PA_HVERSION_ANY_ID 0xffff
# define PA_SVERSION_ANY_ID 0xffffffff
2007-01-13 14:57:25 -05:00
2007-06-16 15:54:55 +02:00
/* SDIO */
# define SDIO_ANY_ID (~0)
struct sdio_device_id {
__u8 class ; /* Standard interface or SDIO_ANY_ID */
__u16 vendor ; /* Vendor or SDIO_ANY_ID */
__u16 device ; /* Device ID or SDIO_ANY_ID */
2008-02-04 22:27:29 -08:00
kernel_ulong_t driver_data /* Data private to the driver */
__attribute__ ( ( aligned ( sizeof ( kernel_ulong_t ) ) ) ) ;
2007-06-16 15:54:55 +02:00
} ;
2007-09-18 15:12:50 -04:00
/* SSB core, see drivers/ssb/ */
struct ssb_device_id {
__u16 vendor ;
__u16 coreid ;
__u8 revision ;
} ;
# define SSB_DEVICE(_vendor, _coreid, _revision) \
{ . vendor = _vendor , . coreid = _coreid , . revision = _revision , }
# define SSB_DEVTABLE_END \
{ 0 , } ,
# define SSB_ANY_VENDOR 0xFFFF
# define SSB_ANY_ID 0xFFFF
# define SSB_ANY_REV 0xFF
2007-10-22 11:03:36 +10:00
struct virtio_device_id {
__u32 device ;
__u32 vendor ;
} ;
# define VIRTIO_DEV_ANY_ID 0xffffffff
2008-04-29 23:11:39 +02:00
/* i2c */
# define I2C_NAME_SIZE 20
# define I2C_MODULE_PREFIX "i2c:"
struct i2c_device_id {
char name [ I2C_NAME_SIZE ] ;
2008-05-26 16:08:40 +02:00
kernel_ulong_t driver_data /* Data private to the driver */
__attribute__ ( ( aligned ( sizeof ( kernel_ulong_t ) ) ) ) ;
2008-04-29 23:11:39 +02:00
} ;
2005-04-16 15:20:36 -07:00
# endif /* LINUX_MOD_DEVICETABLE_H */