home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / mod_devicetable.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  8.8 KB  |  301 lines

  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>
  12. typedef unsigned long kernel_ulong_t;
  13. #endif
  14.  
  15. #define PCI_ANY_ID (~0)
  16.  
  17. struct 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.  
  30. struct 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.         __attribute__((aligned(sizeof(kernel_ulong_t))));
  38. };
  39.  
  40.  
  41. /*
  42.  * Device table entry for "new style" table-driven USB drivers.
  43.  * User mode code can read these tables to choose which modules to load.
  44.  * Declare the table as a MODULE_DEVICE_TABLE.
  45.  *
  46.  * A probe() parameter will point to a matching entry from this table.
  47.  * Use the driver_info field for each match to hold information tied
  48.  * to that match:  device quirks, etc.
  49.  *
  50.  * Terminate the driver's table with an all-zeroes entry.
  51.  * Use the flag values to control which fields are compared.
  52.  */
  53.  
  54. /**
  55.  * struct usb_device_id - identifies USB devices for probing and hotplugging
  56.  * @match_flags: Bit mask controlling of the other fields are used to match
  57.  *    against new devices.  Any field except for driver_info may be used,
  58.  *    although some only make sense in conjunction with other fields.
  59.  *    This is usually set by a USB_DEVICE_*() macro, which sets all
  60.  *    other fields in this structure except for driver_info.
  61.  * @idVendor: USB vendor ID for a device; numbers are assigned
  62.  *    by the USB forum to its members.
  63.  * @idProduct: Vendor-assigned product ID.
  64.  * @bcdDevice_lo: Low end of range of vendor-assigned product version numbers.
  65.  *    This is also used to identify individual product versions, for
  66.  *    a range consisting of a single device.
  67.  * @bcdDevice_hi: High end of version number range.  The range of product
  68.  *    versions is inclusive.
  69.  * @bDeviceClass: Class of device; numbers are assigned
  70.  *    by the USB forum.  Products may choose to implement classes,
  71.  *    or be vendor-specific.  Device classes specify behavior of all
  72.  *    the interfaces on a devices.
  73.  * @bDeviceSubClass: Subclass of device; associated with bDeviceClass.
  74.  * @bDeviceProtocol: Protocol of device; associated with bDeviceClass.
  75.  * @bInterfaceClass: Class of interface; numbers are assigned
  76.  *    by the USB forum.  Products may choose to implement classes,
  77.  *    or be vendor-specific.  Interface classes specify behavior only
  78.  *    of a given interface; other interfaces may support other classes.
  79.  * @bInterfaceSubClass: Subclass of interface; associated with bInterfaceClass.
  80.  * @bInterfaceProtocol: Protocol of interface; associated with bInterfaceClass.
  81.  * @driver_info: Holds information used by the driver.  Usually it holds
  82.  *    a pointer to a descriptor understood by the driver, or perhaps
  83.  *    device flags.
  84.  *
  85.  * In most cases, drivers will create a table of device IDs by using
  86.  * USB_DEVICE(), or similar macros designed for that purpose.
  87.  * They will then export it to userspace using MODULE_DEVICE_TABLE(),
  88.  * and provide it to the USB core through their usb_driver structure.
  89.  *
  90.  * See the usb_match_id() function for information about how matches are
  91.  * performed.  Briefly, you will normally use one of several macros to help
  92.  * construct these entries.  Each entry you provide will either identify
  93.  * one or more specific products, or will identify a class of products
  94.  * which have agreed to behave the same.  You should put the more specific
  95.  * matches towards the beginning of your table, so that driver_info can
  96.  * record quirks of specific products.
  97.  */
  98. struct usb_device_id {
  99.     /* which fields to match against? */
  100.     __u16        match_flags;
  101.  
  102.     /* Used for product specific matches; range is inclusive */
  103.     __u16        idVendor;
  104.     __u16        idProduct;
  105.     __u16        bcdDevice_lo;
  106.     __u16        bcdDevice_hi;
  107.  
  108.     /* Used for device class matches */
  109.     __u8        bDeviceClass;
  110.     __u8        bDeviceSubClass;
  111.     __u8        bDeviceProtocol;
  112.  
  113.     /* Used for interface class matches */
  114.     __u8        bInterfaceClass;
  115.     __u8        bInterfaceSubClass;
  116.     __u8        bInterfaceProtocol;
  117.  
  118.     /* not matched against */
  119.     kernel_ulong_t    driver_info;
  120. };
  121.  
  122. /* Some useful macros to use to create struct usb_device_id */
  123. #define USB_DEVICE_ID_MATCH_VENDOR        0x0001
  124. #define USB_DEVICE_ID_MATCH_PRODUCT        0x0002
  125. #define USB_DEVICE_ID_MATCH_DEV_LO        0x0004
  126. #define USB_DEVICE_ID_MATCH_DEV_HI        0x0008
  127. #define USB_DEVICE_ID_MATCH_DEV_CLASS        0x0010
  128. #define USB_DEVICE_ID_MATCH_DEV_SUBCLASS    0x0020
  129. #define USB_DEVICE_ID_MATCH_DEV_PROTOCOL    0x0040
  130. #define USB_DEVICE_ID_MATCH_INT_CLASS        0x0080
  131. #define USB_DEVICE_ID_MATCH_INT_SUBCLASS    0x0100
  132. #define USB_DEVICE_ID_MATCH_INT_PROTOCOL    0x0200
  133.  
  134. /* s390 CCW devices */
  135. struct ccw_device_id {
  136.     __u16    match_flags;    /* which fields to match against */
  137.  
  138.     __u16    cu_type;    /* control unit type     */
  139.     __u16    dev_type;    /* device type           */
  140.     __u8    cu_model;    /* control unit model    */
  141.     __u8    dev_model;    /* device model          */
  142.  
  143.     kernel_ulong_t driver_info;
  144. };
  145.  
  146. #define CCW_DEVICE_ID_MATCH_CU_TYPE        0x01
  147. #define CCW_DEVICE_ID_MATCH_CU_MODEL        0x02
  148. #define CCW_DEVICE_ID_MATCH_DEVICE_TYPE        0x04
  149. #define CCW_DEVICE_ID_MATCH_DEVICE_MODEL    0x08
  150.  
  151.  
  152. #define PNP_ID_LEN    8
  153. #define PNP_MAX_DEVICES    8
  154.  
  155. struct pnp_device_id {
  156.     __u8 id[PNP_ID_LEN];
  157.     kernel_ulong_t driver_data;
  158. };
  159.  
  160. struct pnp_card_device_id {
  161.     __u8 id[PNP_ID_LEN];
  162.     kernel_ulong_t driver_data;
  163.     struct {
  164.         __u8 id[PNP_ID_LEN];
  165.     } devs[PNP_MAX_DEVICES];
  166. };
  167.  
  168.  
  169. #define SERIO_ANY    0xff
  170.  
  171. struct serio_device_id {
  172.     __u8 type;
  173.     __u8 extra;
  174.     __u8 id;
  175.     __u8 proto;
  176. };
  177.  
  178. /*
  179.  * Struct used for matching a device
  180.  */
  181. struct of_device_id
  182. {
  183.     char    name[32];
  184.     char    type[32];
  185.     char    compatible[128];
  186. #ifdef __KERNEL__
  187.     void    *data;
  188. #else
  189.     kernel_ulong_t data;
  190. #endif
  191. };
  192.  
  193. /* VIO */
  194. struct vio_device_id {
  195.     char type[32];
  196.     char compat[32];
  197. };
  198.  
  199. /* PCMCIA */
  200.  
  201. struct pcmcia_device_id {
  202.     __u16        match_flags;
  203.  
  204.     __u16        manf_id;
  205.     __u16         card_id;
  206.  
  207.     __u8          func_id;
  208.  
  209.     /* for real multi-function devices */
  210.     __u8          function;
  211.  
  212.     /* for pseudo multi-function devices */
  213.     __u8          device_no;
  214.  
  215.     __u32         prod_id_hash[4]
  216.         __attribute__((aligned(sizeof(__u32))));
  217.  
  218.     /* not matched against in kernelspace*/
  219. #ifdef __KERNEL__
  220.     const char *    prod_id[4];
  221. #else
  222.     kernel_ulong_t    prod_id[4]
  223.         __attribute__((aligned(sizeof(kernel_ulong_t))));
  224. #endif
  225.  
  226.     /* not matched against */
  227.     kernel_ulong_t    driver_info;
  228. #ifdef __KERNEL__
  229.     char *        cisfile;
  230. #else
  231.     kernel_ulong_t    cisfile;
  232. #endif
  233. };
  234.  
  235. #define PCMCIA_DEV_ID_MATCH_MANF_ID    0x0001
  236. #define PCMCIA_DEV_ID_MATCH_CARD_ID    0x0002
  237. #define PCMCIA_DEV_ID_MATCH_FUNC_ID    0x0004
  238. #define PCMCIA_DEV_ID_MATCH_FUNCTION    0x0008
  239. #define PCMCIA_DEV_ID_MATCH_PROD_ID1    0x0010
  240. #define PCMCIA_DEV_ID_MATCH_PROD_ID2    0x0020
  241. #define PCMCIA_DEV_ID_MATCH_PROD_ID3    0x0040
  242. #define PCMCIA_DEV_ID_MATCH_PROD_ID4    0x0080
  243. #define PCMCIA_DEV_ID_MATCH_DEVICE_NO    0x0100
  244. #define PCMCIA_DEV_ID_MATCH_FAKE_CIS    0x0200
  245. #define PCMCIA_DEV_ID_MATCH_ANONYMOUS    0x0400
  246.  
  247. /* I2C */
  248. struct i2c_device_id {
  249.     __u16 id;
  250. };
  251.  
  252. /* Input */
  253. #define INPUT_DEVICE_ID_EV_MAX        0x1f
  254. #define INPUT_DEVICE_ID_KEY_MAX        0x1ff
  255. #define INPUT_DEVICE_ID_REL_MAX        0x0f
  256. #define INPUT_DEVICE_ID_ABS_MAX        0x3f
  257. #define INPUT_DEVICE_ID_MSC_MAX        0x07
  258. #define INPUT_DEVICE_ID_LED_MAX        0x0f
  259. #define INPUT_DEVICE_ID_SND_MAX        0x07
  260. #define INPUT_DEVICE_ID_FF_MAX        0x7f
  261. #define INPUT_DEVICE_ID_SW_MAX        0x0f
  262.  
  263. #define INPUT_DEVICE_ID_MATCH_BUS    1
  264. #define INPUT_DEVICE_ID_MATCH_VENDOR    2
  265. #define INPUT_DEVICE_ID_MATCH_PRODUCT    4
  266. #define INPUT_DEVICE_ID_MATCH_VERSION    8
  267.  
  268. #define INPUT_DEVICE_ID_MATCH_EVBIT    0x0010
  269. #define INPUT_DEVICE_ID_MATCH_KEYBIT    0x0020
  270. #define INPUT_DEVICE_ID_MATCH_RELBIT    0x0040
  271. #define INPUT_DEVICE_ID_MATCH_ABSBIT    0x0080
  272. #define INPUT_DEVICE_ID_MATCH_MSCIT    0x0100
  273. #define INPUT_DEVICE_ID_MATCH_LEDBIT    0x0200
  274. #define INPUT_DEVICE_ID_MATCH_SNDBIT    0x0400
  275. #define INPUT_DEVICE_ID_MATCH_FFBIT    0x0800
  276. #define INPUT_DEVICE_ID_MATCH_SWBIT    0x1000
  277.  
  278. struct input_device_id {
  279.  
  280.     kernel_ulong_t flags;
  281.  
  282.     __u16 bustype;
  283.     __u16 vendor;
  284.     __u16 product;
  285.     __u16 version;
  286.  
  287.     kernel_ulong_t evbit[INPUT_DEVICE_ID_EV_MAX / BITS_PER_LONG + 1];
  288.     kernel_ulong_t keybit[INPUT_DEVICE_ID_KEY_MAX / BITS_PER_LONG + 1];
  289.     kernel_ulong_t relbit[INPUT_DEVICE_ID_REL_MAX / BITS_PER_LONG + 1];
  290.     kernel_ulong_t absbit[INPUT_DEVICE_ID_ABS_MAX / BITS_PER_LONG + 1];
  291.     kernel_ulong_t mscbit[INPUT_DEVICE_ID_MSC_MAX / BITS_PER_LONG + 1];
  292.     kernel_ulong_t ledbit[INPUT_DEVICE_ID_LED_MAX / BITS_PER_LONG + 1];
  293.     kernel_ulong_t sndbit[INPUT_DEVICE_ID_SND_MAX / BITS_PER_LONG + 1];
  294.     kernel_ulong_t ffbit[INPUT_DEVICE_ID_FF_MAX / BITS_PER_LONG + 1];
  295.     kernel_ulong_t swbit[INPUT_DEVICE_ID_SW_MAX / BITS_PER_LONG + 1];
  296.  
  297.     kernel_ulong_t driver_info;
  298. };
  299.  
  300. #endif /* LINUX_MOD_DEVICETABLE_H */
  301.