usb.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:35k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef __LINUX_USB_H
  2. #define __LINUX_USB_H
  3. /* USB constants */
  4. /*
  5.  * Device and/or Interface Class codes
  6.  */
  7. #define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
  8. #define USB_CLASS_AUDIO 1
  9. #define USB_CLASS_COMM 2
  10. #define USB_CLASS_HID 3
  11. #define USB_CLASS_PHYSICAL 5
  12. #define USB_CLASS_STILL_IMAGE 6
  13. #define USB_CLASS_PRINTER 7
  14. #define USB_CLASS_MASS_STORAGE 8
  15. #define USB_CLASS_HUB 9
  16. #define USB_CLASS_CDC_DATA 0x0a
  17. #define USB_CLASS_CSCID 0x0b /* chip+ smart card */
  18. #define USB_CLASS_CONTENT_SEC 0x0d /* content security */
  19. #define USB_CLASS_APP_SPEC 0xfe
  20. #define USB_CLASS_VENDOR_SPEC 0xff
  21. /*
  22.  * USB types
  23.  */
  24. #define USB_TYPE_MASK (0x03 << 5)
  25. #define USB_TYPE_STANDARD (0x00 << 5)
  26. #define USB_TYPE_CLASS (0x01 << 5)
  27. #define USB_TYPE_VENDOR (0x02 << 5)
  28. #define USB_TYPE_RESERVED (0x03 << 5)
  29. /*
  30.  * USB recipients
  31.  */
  32. #define USB_RECIP_MASK 0x1f
  33. #define USB_RECIP_DEVICE 0x00
  34. #define USB_RECIP_INTERFACE 0x01
  35. #define USB_RECIP_ENDPOINT 0x02
  36. #define USB_RECIP_OTHER 0x03
  37. /*
  38.  * USB directions
  39.  */
  40. #define USB_DIR_OUT 0
  41. #define USB_DIR_IN 0x80
  42. /*
  43.  * Descriptor types
  44.  */
  45. #define USB_DT_DEVICE 0x01
  46. #define USB_DT_CONFIG 0x02
  47. #define USB_DT_STRING 0x03
  48. #define USB_DT_INTERFACE 0x04
  49. #define USB_DT_ENDPOINT 0x05
  50. #define USB_DT_HID (USB_TYPE_CLASS | 0x01)
  51. #define USB_DT_REPORT (USB_TYPE_CLASS | 0x02)
  52. #define USB_DT_PHYSICAL (USB_TYPE_CLASS | 0x03)
  53. #define USB_DT_HUB (USB_TYPE_CLASS | 0x09)
  54. /*
  55.  * Descriptor sizes per descriptor type
  56.  */
  57. #define USB_DT_DEVICE_SIZE 18
  58. #define USB_DT_CONFIG_SIZE 9
  59. #define USB_DT_INTERFACE_SIZE 9
  60. #define USB_DT_ENDPOINT_SIZE 7
  61. #define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
  62. #define USB_DT_HUB_NONVAR_SIZE 7
  63. #define USB_DT_HID_SIZE 9
  64. /*
  65.  * Endpoints
  66.  */
  67. #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */
  68. #define USB_ENDPOINT_DIR_MASK 0x80
  69. #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
  70. #define USB_ENDPOINT_XFER_CONTROL 0
  71. #define USB_ENDPOINT_XFER_ISOC 1
  72. #define USB_ENDPOINT_XFER_BULK 2
  73. #define USB_ENDPOINT_XFER_INT 3
  74. /*
  75.  * USB Packet IDs (PIDs)
  76.  */
  77. #define USB_PID_UNDEF_0                        0xf0
  78. #define USB_PID_OUT                            0xe1
  79. #define USB_PID_ACK                            0xd2
  80. #define USB_PID_DATA0                          0xc3
  81. #define USB_PID_PING                           0xb4 /* USB 2.0 */
  82. #define USB_PID_SOF                            0xa5
  83. #define USB_PID_NYET                           0x96 /* USB 2.0 */
  84. #define USB_PID_DATA2                          0x87 /* USB 2.0 */
  85. #define USB_PID_SPLIT                          0x78 /* USB 2.0 */
  86. #define USB_PID_IN                             0x69
  87. #define USB_PID_NAK                            0x5a
  88. #define USB_PID_DATA1                          0x4b
  89. #define USB_PID_PREAMBLE                       0x3c /* Token mode */
  90. #define USB_PID_ERR                            0x3c /* USB 2.0: handshake mode */
  91. #define USB_PID_SETUP                          0x2d
  92. #define USB_PID_STALL                          0x1e
  93. #define USB_PID_MDATA                          0x0f /* USB 2.0 */
  94. /*
  95.  * Standard requests
  96.  */
  97. #define USB_REQ_GET_STATUS 0x00
  98. #define USB_REQ_CLEAR_FEATURE 0x01
  99. #define USB_REQ_SET_FEATURE 0x03
  100. #define USB_REQ_SET_ADDRESS 0x05
  101. #define USB_REQ_GET_DESCRIPTOR 0x06
  102. #define USB_REQ_SET_DESCRIPTOR 0x07
  103. #define USB_REQ_GET_CONFIGURATION 0x08
  104. #define USB_REQ_SET_CONFIGURATION 0x09
  105. #define USB_REQ_GET_INTERFACE 0x0A
  106. #define USB_REQ_SET_INTERFACE 0x0B
  107. #define USB_REQ_SYNCH_FRAME 0x0C
  108. /*
  109.  * HID requests
  110.  */
  111. #define USB_REQ_GET_REPORT 0x01
  112. #define USB_REQ_GET_IDLE 0x02
  113. #define USB_REQ_GET_PROTOCOL 0x03
  114. #define USB_REQ_SET_REPORT 0x09
  115. #define USB_REQ_SET_IDLE 0x0A
  116. #define USB_REQ_SET_PROTOCOL 0x0B
  117. #ifdef __KERNEL__
  118. #include <linux/types.h>
  119. #include <linux/ioctl.h>
  120. #include <linux/version.h>
  121. #include <linux/sched.h>
  122. #include <linux/delay.h>
  123. #include <linux/interrupt.h> /* for in_interrupt() */
  124. #include <linux/config.h>
  125. #include <linux/list.h>
  126. #define USB_MAJOR 180
  127. static __inline__ void wait_ms(unsigned int ms)
  128. {
  129. if(!in_interrupt()) {
  130. current->state = TASK_UNINTERRUPTIBLE;
  131. schedule_timeout(1 + ms * HZ / 1000);
  132. }
  133. else
  134. mdelay(ms);
  135. }
  136. typedef struct {
  137. __u8 requesttype;
  138. __u8 request;
  139. __u16 value;
  140. __u16 index;
  141. __u16 length;
  142. } devrequest __attribute__ ((packed));
  143. /*
  144.  * USB-status codes:
  145.  * USB_ST* maps to -E* and should go away in the future
  146.  */
  147. #define USB_ST_NOERROR 0
  148. #define USB_ST_CRC (-EILSEQ)
  149. #define USB_ST_BITSTUFF (-EPROTO)
  150. #define USB_ST_NORESPONSE (-ETIMEDOUT) /* device not responding/handshaking */
  151. #define USB_ST_DATAOVERRUN (-EOVERFLOW)
  152. #define USB_ST_DATAUNDERRUN (-EREMOTEIO)
  153. #define USB_ST_BUFFEROVERRUN (-ECOMM)
  154. #define USB_ST_BUFFERUNDERRUN (-ENOSR)
  155. #define USB_ST_INTERNALERROR (-EPROTO)  /* unknown error */
  156. #define USB_ST_SHORT_PACKET     (-EREMOTEIO)
  157. #define USB_ST_PARTIAL_ERROR   (-EXDEV) /* ISO transfer only partially completed */
  158. #define USB_ST_URB_KILLED      (-ENOENT) /* URB canceled by user */
  159. #define USB_ST_URB_PENDING       (-EINPROGRESS)
  160. #define USB_ST_REMOVED (-ENODEV)  /* device not existing or removed */
  161. #define USB_ST_TIMEOUT (-ETIMEDOUT) /* communication timed out, also in urb->status**/
  162. #define USB_ST_NOTSUPPORTED (-ENOSYS)
  163. #define USB_ST_BANDWIDTH_ERROR (-ENOSPC) /* too much bandwidth used */
  164. #define USB_ST_URB_INVALID_ERROR  (-EINVAL) /* invalid value/transfer type */
  165. #define USB_ST_URB_REQUEST_ERROR  (-ENXIO) /* invalid endpoint */
  166. #define USB_ST_STALL (-EPIPE)  /* pipe stalled, also in urb->status*/
  167. /*
  168.  * USB device number allocation bitmap. There's one bitmap
  169.  * per USB tree.
  170.  */
  171. struct usb_devmap {
  172. unsigned long devicemap[128 / (8*sizeof(unsigned long))];
  173. };
  174. #define USB_MAXBUS 64
  175. struct usb_busmap {
  176. unsigned long busmap[USB_MAXBUS / (8*sizeof(unsigned long))];
  177. };
  178. /*
  179.  * This is a USB device descriptor.
  180.  *
  181.  * USB device information
  182.  */
  183. /* Everything but the endpoint maximums are aribtrary */
  184. #define USB_MAXCONFIG 8
  185. #define USB_ALTSETTINGALLOC     4
  186. #define USB_MAXALTSETTING 128  /* Hard limit */
  187. #define USB_MAXINTERFACES 32
  188. #define USB_MAXENDPOINTS 32
  189. /* All standard descriptors have these 2 fields in common */
  190. struct usb_descriptor_header {
  191. __u8  bLength;
  192. __u8  bDescriptorType;
  193. } __attribute__ ((packed));
  194. /* Device descriptor */
  195. struct usb_device_descriptor {
  196. __u8  bLength;
  197. __u8  bDescriptorType;
  198. __u16 bcdUSB;
  199. __u8  bDeviceClass;
  200. __u8  bDeviceSubClass;
  201. __u8  bDeviceProtocol;
  202. __u8  bMaxPacketSize0;
  203. __u16 idVendor;
  204. __u16 idProduct;
  205. __u16 bcdDevice;
  206. __u8  iManufacturer;
  207. __u8  iProduct;
  208. __u8  iSerialNumber;
  209. __u8  bNumConfigurations;
  210. } __attribute__ ((packed));
  211. /* Endpoint descriptor */
  212. struct usb_endpoint_descriptor {
  213. __u8  bLength __attribute__ ((packed));
  214. __u8  bDescriptorType __attribute__ ((packed));
  215. __u8  bEndpointAddress __attribute__ ((packed));
  216. __u8  bmAttributes __attribute__ ((packed));
  217. __u16 wMaxPacketSize __attribute__ ((packed));
  218. __u8  bInterval __attribute__ ((packed));
  219. __u8  bRefresh __attribute__ ((packed));
  220. __u8  bSynchAddress __attribute__ ((packed));
  221.     unsigned char *extra;   /* Extra descriptors */
  222. int extralen;
  223. };
  224. /* Interface descriptor */
  225. struct usb_interface_descriptor {
  226. __u8  bLength __attribute__ ((packed));
  227. __u8  bDescriptorType __attribute__ ((packed));
  228. __u8  bInterfaceNumber __attribute__ ((packed));
  229. __u8  bAlternateSetting __attribute__ ((packed));
  230. __u8  bNumEndpoints __attribute__ ((packed));
  231. __u8  bInterfaceClass __attribute__ ((packed));
  232. __u8  bInterfaceSubClass __attribute__ ((packed));
  233. __u8  bInterfaceProtocol __attribute__ ((packed));
  234. __u8  iInterface __attribute__ ((packed));
  235.    struct usb_endpoint_descriptor *endpoint;
  236.     unsigned char *extra;   /* Extra descriptors */
  237. int extralen;
  238. };
  239. struct usb_interface {
  240. struct usb_interface_descriptor *altsetting;
  241. int act_altsetting; /* active alternate setting */
  242. int num_altsetting; /* number of alternate settings */
  243. int max_altsetting;             /* total memory allocated */
  244.  
  245. struct usb_driver *driver; /* driver */
  246. void *private_data;
  247. };
  248. /* Configuration descriptor information.. */
  249. struct usb_config_descriptor {
  250. __u8  bLength __attribute__ ((packed));
  251. __u8  bDescriptorType __attribute__ ((packed));
  252. __u16 wTotalLength __attribute__ ((packed));
  253. __u8  bNumInterfaces __attribute__ ((packed));
  254. __u8  bConfigurationValue __attribute__ ((packed));
  255. __u8  iConfiguration __attribute__ ((packed));
  256. __u8  bmAttributes __attribute__ ((packed));
  257. __u8  MaxPower __attribute__ ((packed));
  258. struct usb_interface *interface;
  259.     unsigned char *extra;   /* Extra descriptors */
  260. int extralen;
  261. };
  262. /* String descriptor */
  263. struct usb_string_descriptor {
  264. __u8  bLength;
  265. __u8  bDescriptorType;
  266. __u16 wData[1];
  267. } __attribute__ ((packed));
  268. struct usb_device;
  269. /*
  270.  * Device table entry for "new style" table-driven USB drivers.
  271.  * User mode code can read these tables to choose which modules to load.
  272.  * Declare the table as __devinitdata, and as a MODULE_DEVICE_TABLE.
  273.  *
  274.  * With a device table provide bind() instead of probe().  Then the
  275.  * third bind() parameter will point to a matching entry from this
  276.  * table.  (Null value reserved.)
  277.  * 
  278.  * Terminate the driver's table with an all-zeroes entry.
  279.  * Init the fields you care about; zeroes are not used in comparisons.
  280.  */
  281. #define USB_DEVICE_ID_MATCH_VENDOR 0x0001
  282. #define USB_DEVICE_ID_MATCH_PRODUCT 0x0002
  283. #define USB_DEVICE_ID_MATCH_DEV_LO 0x0004
  284. #define USB_DEVICE_ID_MATCH_DEV_HI 0x0008
  285. #define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010
  286. #define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020
  287. #define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040
  288. #define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080
  289. #define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100
  290. #define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200
  291. #define USB_DEVICE_ID_MATCH_DEVICE (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
  292. #define USB_DEVICE_ID_MATCH_DEV_RANGE (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)
  293. #define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)
  294. #define USB_DEVICE_ID_MATCH_DEV_INFO 
  295. (USB_DEVICE_ID_MATCH_DEV_CLASS | USB_DEVICE_ID_MATCH_DEV_SUBCLASS | USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
  296. #define USB_DEVICE_ID_MATCH_INT_INFO 
  297. (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS | USB_DEVICE_ID_MATCH_INT_PROTOCOL)
  298. /* Some useful macros */
  299. #define USB_DEVICE(vend,prod) 
  300. match_flags: USB_DEVICE_ID_MATCH_DEVICE, idVendor: (vend), idProduct: (prod)
  301. #define USB_DEVICE_VER(vend,prod,lo,hi) 
  302. match_flags: USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, idVendor: (vend), idProduct: (prod), bcdDevice_lo: (lo), bcdDevice_hi: (hi)
  303. #define USB_DEVICE_INFO(cl,sc,pr) 
  304. match_flags: USB_DEVICE_ID_MATCH_DEV_INFO, bDeviceClass: (cl), bDeviceSubClass: (sc), bDeviceProtocol: (pr)
  305. #define USB_INTERFACE_INFO(cl,sc,pr) 
  306. match_flags: USB_DEVICE_ID_MATCH_INT_INFO, bInterfaceClass: (cl), bInterfaceSubClass: (sc), bInterfaceProtocol: (pr)
  307. struct usb_device_id {
  308. /* This bitmask is used to determine which of the following fields
  309.  * are to be used for matching.
  310.  */
  311. __u16 match_flags;
  312. /*
  313.  * vendor/product codes are checked, if vendor is nonzero
  314.  * Range is for device revision (bcdDevice), inclusive;
  315.  * zero values here mean range isn't considered
  316.  */
  317. __u16 idVendor;
  318. __u16 idProduct;
  319. __u16 bcdDevice_lo, bcdDevice_hi;
  320. /*
  321.  * if device class != 0, these can be match criteria;
  322.  * but only if this bDeviceClass value is nonzero
  323.  */
  324. __u8 bDeviceClass;
  325. __u8 bDeviceSubClass;
  326. __u8 bDeviceProtocol;
  327. /*
  328.  * if interface class != 0, these can be match criteria;
  329.  * but only if this bInterfaceClass value is nonzero
  330.  */
  331. __u8 bInterfaceClass;
  332. __u8 bInterfaceSubClass;
  333. __u8 bInterfaceProtocol;
  334. /*
  335.  * for driver's use; not involved in driver matching.
  336.  */
  337. unsigned long driver_info;
  338. };
  339. struct usb_driver {
  340. const char *name;
  341. void *(*probe)(
  342.     struct usb_device *dev, /* the device */
  343.     unsigned intf, /* what interface */
  344.     const struct usb_device_id *id /* from id_table */
  345.     );
  346. void (*disconnect)(struct usb_device *, void *);
  347. struct list_head driver_list;
  348. struct file_operations *fops;
  349. int minor;
  350. struct semaphore serialize;
  351. /* ioctl -- userspace apps can talk to drivers through usbdevfs */
  352. int (*ioctl)(struct usb_device *dev, unsigned int code, void *buf);
  353. /* support for "new-style" USB hotplugging
  354.  * binding policy can be driven from user mode too
  355.  */
  356. const struct usb_device_id *id_table;
  357. /* suspend before the bus suspends;
  358.  * disconnect or resume when the bus resumes */
  359. // void (*suspend)(struct usb_device *dev);
  360. // void (*resume)(struct usb_device *dev);
  361. };
  362. /*----------------------------------------------------------------------------* 
  363.  * New USB Structures                                                         *
  364.  *----------------------------------------------------------------------------*/
  365. /*
  366.  * urb->transfer_flags:
  367.  */
  368. #define USB_DISABLE_SPD         0x0001
  369. #define USB_ISO_ASAP            0x0002
  370. #define USB_ASYNC_UNLINK        0x0008
  371. #define USB_QUEUE_BULK          0x0010
  372. #define USB_NO_FSBR 0x0020
  373. #define USB_ZERO_PACKET         0x0040  // Finish bulk OUTs always with zero length packet
  374. #define USB_TIMEOUT_KILLED 0x1000 // only set by HCD!
  375. typedef struct
  376. {
  377. unsigned int offset;
  378. unsigned int length; // expected length
  379. unsigned int actual_length;
  380. unsigned int status;
  381. } iso_packet_descriptor_t, *piso_packet_descriptor_t;
  382. struct urb;
  383. typedef void (*usb_complete_t)(struct urb *);
  384. typedef struct urb
  385. {
  386. spinlock_t lock; // lock for the URB
  387. void *hcpriv; // private data for host controller
  388. struct list_head urb_list; // list pointer to all active urbs 
  389. struct urb *next; // pointer to next URB
  390. struct usb_device *dev; // pointer to associated USB device
  391. unsigned int pipe; // pipe information
  392. int status; // returned status
  393. unsigned int transfer_flags; // USB_DISABLE_SPD | USB_ISO_ASAP | etc.
  394. void *transfer_buffer; // associated data buffer
  395. int transfer_buffer_length; // data buffer length
  396. int actual_length;              // actual data buffer length
  397. int bandwidth; // bandwidth for this transfer request (INT or ISO)
  398. unsigned char *setup_packet; // setup packet (control only)
  399. //
  400. int start_frame; // start frame (iso/irq only)
  401. int number_of_packets; // number of packets in this request (iso)
  402. int interval;                   // polling interval (irq only)
  403. int error_count; // number of errors in this transfer (iso only)
  404. int timeout; // timeout (in jiffies)
  405. //
  406. void *context; // context for completion routine
  407. usb_complete_t complete; // pointer to completion routine
  408. //
  409. iso_packet_descriptor_t iso_frame_desc[0];
  410. } urb_t, *purb_t;
  411. /**
  412.  * FILL_CONTROL_URB - macro to help initialize a control urb
  413.  * @URB: pointer to the urb to initialize.
  414.  * @DEV: pointer to the struct usb_device for this urb.
  415.  * @PIPE: the endpoint pipe
  416.  * @SETUP_PACKET: pointer to the setup_packet buffer
  417.  * @TRANSFER_BUFFER: pointer to the transfer buffer
  418.  * @BUFFER_LENGTH: length of the transfer buffer
  419.  * @COMPLETE: pointer to the usb_complete_t function
  420.  * @CONTEXT: what to set the urb context to.
  421.  *
  422.  * Initializes a control urb with the proper information needed to submit
  423.  * it to a device.  This macro is depreciated, the usb_fill_control_urb()
  424.  * function should be used instead.
  425.  */
  426. #define FILL_CONTROL_URB(URB,DEV,PIPE,SETUP_PACKET,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT) 
  427.     do {
  428. spin_lock_init(&(URB)->lock);
  429. (URB)->dev=DEV;
  430. (URB)->pipe=PIPE;
  431. (URB)->setup_packet=SETUP_PACKET;
  432. (URB)->transfer_buffer=TRANSFER_BUFFER;
  433. (URB)->transfer_buffer_length=BUFFER_LENGTH;
  434. (URB)->complete=COMPLETE;
  435. (URB)->context=CONTEXT;
  436.     } while (0)
  437. /**
  438.  * FILL_BULK_URB - macro to help initialize a bulk urb
  439.  * @URB: pointer to the urb to initialize.
  440.  * @DEV: pointer to the struct usb_device for this urb.
  441.  * @PIPE: the endpoint pipe
  442.  * @TRANSFER_BUFFER: pointer to the transfer buffer
  443.  * @BUFFER_LENGTH: length of the transfer buffer
  444.  * @COMPLETE: pointer to the usb_complete_t function
  445.  * @CONTEXT: what to set the urb context to.
  446.  *
  447.  * Initializes a bulk urb with the proper information needed to submit it
  448.  * to a device.  This macro is depreciated, the usb_fill_bulk_urb()
  449.  * function should be used instead.
  450.  */
  451. #define FILL_BULK_URB(URB,DEV,PIPE,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT) 
  452.     do {
  453. spin_lock_init(&(URB)->lock);
  454. (URB)->dev=DEV;
  455. (URB)->pipe=PIPE;
  456. (URB)->transfer_buffer=TRANSFER_BUFFER;
  457. (URB)->transfer_buffer_length=BUFFER_LENGTH;
  458. (URB)->complete=COMPLETE;
  459. (URB)->context=CONTEXT;
  460.     } while (0)
  461.     
  462. /**
  463.  * FILL_INT_URB - macro to help initialize a interrupt urb
  464.  * @URB: pointer to the urb to initialize.
  465.  * @DEV: pointer to the struct usb_device for this urb.
  466.  * @PIPE: the endpoint pipe
  467.  * @TRANSFER_BUFFER: pointer to the transfer buffer
  468.  * @BUFFER_LENGTH: length of the transfer buffer
  469.  * @COMPLETE: pointer to the usb_complete_t function
  470.  * @CONTEXT: what to set the urb context to.
  471.  * @INTERVAL: what to set the urb interval to.
  472.  *
  473.  * Initializes a interrupt urb with the proper information needed to submit
  474.  * it to a device.  This macro is depreciated, the usb_fill_int_urb()
  475.  * function should be used instead.
  476.  */
  477. #define FILL_INT_URB(URB,DEV,PIPE,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT,INTERVAL) 
  478.     do {
  479. spin_lock_init(&(URB)->lock);
  480. (URB)->dev=DEV;
  481. (URB)->pipe=PIPE;
  482. (URB)->transfer_buffer=TRANSFER_BUFFER;
  483. (URB)->transfer_buffer_length=BUFFER_LENGTH;
  484. (URB)->complete=COMPLETE;
  485. (URB)->context=CONTEXT;
  486. (URB)->interval=INTERVAL;
  487. (URB)->start_frame=-1;
  488.     } while (0)
  489. #define FILL_CONTROL_URB_TO(a,aa,b,c,d,e,f,g,h) 
  490.     do {
  491. spin_lock_init(&(a)->lock);
  492. (a)->dev=aa;
  493. (a)->pipe=b;
  494. (a)->setup_packet=c;
  495. (a)->transfer_buffer=d;
  496. (a)->transfer_buffer_length=e;
  497. (a)->complete=f;
  498. (a)->context=g;
  499. (a)->timeout=h;
  500.     } while (0)
  501. #define FILL_BULK_URB_TO(a,aa,b,c,d,e,f,g) 
  502.     do {
  503. spin_lock_init(&(a)->lock);
  504. (a)->dev=aa;
  505. (a)->pipe=b;
  506. (a)->transfer_buffer=c;
  507. (a)->transfer_buffer_length=d;
  508. (a)->complete=e;
  509. (a)->context=f;
  510. (a)->timeout=g;
  511.     } while (0)
  512.  
  513. /**
  514.  * usb_fill_control_urb - initializes a control urb
  515.  * @urb: pointer to the urb to initialize.
  516.  * @dev: pointer to the struct usb_device for this urb.
  517.  * @pipe: the endpoint pipe
  518.  * @setup_packet: pointer to the setup_packet buffer
  519.  * @transfer_buffer: pointer to the transfer buffer
  520.  * @buffer_length: length of the transfer buffer
  521.  * @complete: pointer to the usb_complete_t function
  522.  * @context: what to set the urb context to.
  523.  *
  524.  * Initializes a control urb with the proper information needed to submit
  525.  * it to a device.
  526.  */
  527. static inline void usb_fill_control_urb (struct urb *urb,
  528.  struct usb_device *dev,
  529.  unsigned int pipe,
  530.  unsigned char *setup_packet,
  531.  void *transfer_buffer,
  532.  int buffer_length,
  533.  usb_complete_t complete,
  534.  void *context)
  535. {
  536. spin_lock_init(&urb->lock);
  537. urb->dev = dev;
  538. urb->pipe = pipe;
  539. urb->setup_packet = setup_packet;
  540. urb->transfer_buffer = transfer_buffer;
  541. urb->transfer_buffer_length = buffer_length;
  542. urb->complete = complete;
  543. urb->context = context;
  544. }
  545. /**
  546.  * usb_fill_bulk_urb - macro to help initialize a bulk urb
  547.  * @urb: pointer to the urb to initialize.
  548.  * @dev: pointer to the struct usb_device for this urb.
  549.  * @pipe: the endpoint pipe
  550.  * @transfer_buffer: pointer to the transfer buffer
  551.  * @buffer_length: length of the transfer buffer
  552.  * @complete: pointer to the usb_complete_t function
  553.  * @context: what to set the urb context to.
  554.  *
  555.  * Initializes a bulk urb with the proper information needed to submit it
  556.  * to a device.
  557.  */
  558. static inline void usb_fill_bulk_urb (struct urb *urb,
  559.       struct usb_device *dev,
  560.       unsigned int pipe,
  561.       void *transfer_buffer,
  562.       int buffer_length,
  563.       usb_complete_t complete,
  564.       void *context)
  565.       
  566. {
  567. spin_lock_init(&urb->lock);
  568. urb->dev = dev;
  569. urb->pipe = pipe;
  570. urb->transfer_buffer = transfer_buffer;
  571. urb->transfer_buffer_length = buffer_length;
  572. urb->complete = complete;
  573. urb->context = context;
  574. }
  575.     
  576. /**
  577.  * usb_fill_int_urb - macro to help initialize a interrupt urb
  578.  * @urb: pointer to the urb to initialize.
  579.  * @dev: pointer to the struct usb_device for this urb.
  580.  * @pipe: the endpoint pipe
  581.  * @transfer_buffer: pointer to the transfer buffer
  582.  * @buffer_length: length of the transfer buffer
  583.  * @complete: pointer to the usb_complete_t function
  584.  * @context: what to set the urb context to.
  585.  * @interval: what to set the urb interval to.
  586.  *
  587.  * Initializes a interrupt urb with the proper information needed to submit
  588.  * it to a device.
  589.  */
  590. static inline void usb_fill_int_urb (struct urb *urb,
  591.      struct usb_device *dev,
  592.      unsigned int pipe,
  593.      void *transfer_buffer,
  594.      int buffer_length,
  595.      usb_complete_t complete,
  596.      void *context,
  597.      int interval)
  598. {
  599. spin_lock_init(&urb->lock);
  600. urb->dev = dev;
  601. urb->pipe = pipe;
  602. urb->transfer_buffer = transfer_buffer;
  603. urb->transfer_buffer_length = buffer_length;
  604. urb->complete = complete;
  605. urb->context = context;
  606. urb->interval = interval;
  607. urb->start_frame = -1;
  608. }
  609. purb_t usb_alloc_urb(int iso_packets);
  610. void usb_free_urb (purb_t purb);
  611. int usb_submit_urb(purb_t purb);
  612. int usb_unlink_urb(purb_t purb);
  613. int usb_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, devrequest *cmd,  void *data, int len, int timeout);
  614. int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout);
  615. /*-------------------------------------------------------------------*
  616.  *                         SYNCHRONOUS CALL SUPPORT                  *
  617.  *-------------------------------------------------------------------*/
  618. struct usb_api_data
  619. {
  620. wait_queue_head_t wqh;
  621. int done;
  622. /* void* stuff; */ /* Possible extension later. */
  623. };
  624. /* -------------------------------------------------------------------------- */
  625. struct usb_operations {
  626. int (*allocate)(struct usb_device *);
  627. int (*deallocate)(struct usb_device *);
  628. int (*get_frame_number) (struct usb_device *usb_dev);
  629. int (*submit_urb) (struct urb* purb);
  630. int (*unlink_urb) (struct urb* purb);
  631. };
  632. #define DEVNUM_ROUND_ROBIN /***** OPTION *****/
  633. /*
  634.  * Allocated per bus we have
  635.  */
  636. struct usb_bus {
  637. int busnum; /* Bus number (in order of reg) */
  638. #ifdef DEVNUM_ROUND_ROBIN
  639. int devnum_next;                /* Next open device number in round-robin allocation */
  640. #endif /* DEVNUM_ROUND_ROBIN */
  641. struct usb_devmap devmap;       /* Device map */
  642. struct usb_operations *op;      /* Operations (specific to the HC) */
  643. struct usb_device *root_hub;    /* Root hub */
  644. struct list_head bus_list;
  645. void *hcpriv;                   /* Host Controller private data */
  646. int bandwidth_allocated; /* on this Host Controller; */
  647.   /* applies to Int. and Isoc. pipes; */
  648.   /* measured in microseconds/frame; */
  649.   /* range is 0..900, where 900 = */
  650.   /* 90% of a 1-millisecond frame */
  651. int bandwidth_int_reqs; /* number of Interrupt requesters */
  652. int bandwidth_isoc_reqs; /* number of Isoc. requesters */
  653. /* usbdevfs inode list */
  654. struct list_head inodes;
  655. atomic_t refcnt;
  656. };
  657. /* This is arbitrary.
  658.  * From USB 2.0 spec Table 11-13, offset 7, a hub can
  659.  * have up to 255 ports. The most yet reported is 10.
  660.  */
  661. #define USB_MAXCHILDREN (16)
  662. struct usb_device {
  663. int devnum; /* Device number on USB bus */
  664. enum {
  665. USB_SPEED_UNKNOWN = 0, /* enumerating */
  666. USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */
  667. USB_SPEED_HIGH /* usb 2.0 */
  668. } speed;
  669. struct usb_device *tt; /* usb1.1 device on usb2.0 bus */
  670. int ttport; /* device/hub port on that tt */
  671. atomic_t refcnt; /* Reference count */
  672. struct semaphore serialize;
  673. unsigned int toggle[2]; /* one bit for each endpoint ([0] = IN, [1] = OUT) */
  674. unsigned int halted[2]; /* endpoint halts; one bit per endpoint # & direction; */
  675. /* [0] = IN, [1] = OUT */
  676. int epmaxpacketin[16]; /* INput endpoint specific maximums */
  677. int epmaxpacketout[16]; /* OUTput endpoint specific maximums */
  678. struct usb_device *parent;
  679. struct usb_bus *bus; /* Bus we're part of */
  680. struct usb_device_descriptor descriptor;/* Descriptor */
  681. struct usb_config_descriptor *config; /* All of the configs */
  682. struct usb_config_descriptor *actconfig;/* the active configuration */
  683. char **rawdescriptors; /* Raw descriptors for each config */
  684. int have_langid; /* whether string_langid is valid yet */
  685. int string_langid; /* language ID for strings */
  686.   
  687. void *hcpriv; /* Host Controller private data */
  688.         /* usbdevfs inode list */
  689. struct list_head inodes;
  690. struct list_head filelist;
  691. /*
  692.  * Child devices - these can be either new devices
  693.  * (if this is a hub device), or different instances
  694.  * of this same device.
  695.  *
  696.  * Each instance needs its own set of data structures.
  697.  */
  698. int maxchild; /* Number of ports if hub */
  699. struct usb_device *children[USB_MAXCHILDREN];
  700. };
  701. extern struct usb_interface *usb_ifnum_to_if(struct usb_device *dev, unsigned ifnum);
  702. extern struct usb_endpoint_descriptor *usb_epnum_to_ep_desc(struct usb_device *dev, unsigned epnum);
  703. extern int usb_register(struct usb_driver *);
  704. extern void usb_deregister(struct usb_driver *);
  705. extern void usb_scan_devices(void);
  706. /* used these for multi-interface device registration */
  707. extern void usb_driver_claim_interface(struct usb_driver *driver, struct usb_interface *iface, void* priv);
  708. extern int usb_interface_claimed(struct usb_interface *iface);
  709. extern void usb_driver_release_interface(struct usb_driver *driver, struct usb_interface *iface);
  710. const struct usb_device_id *usb_match_id(struct usb_device *dev,
  711.  struct usb_interface *interface,
  712.  const struct usb_device_id *id);
  713. extern struct usb_bus *usb_alloc_bus(struct usb_operations *);
  714. extern void usb_free_bus(struct usb_bus *);
  715. extern void usb_register_bus(struct usb_bus *);
  716. extern void usb_deregister_bus(struct usb_bus *);
  717. extern struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bus *);
  718. extern void usb_free_dev(struct usb_device *);
  719. extern void usb_inc_dev_use(struct usb_device *);
  720. #define usb_dec_dev_use usb_free_dev
  721. extern int usb_check_bandwidth (struct usb_device *dev, struct urb *urb);
  722. extern void usb_claim_bandwidth (struct usb_device *dev, struct urb *urb, int bustime, int isoc);
  723. extern void usb_release_bandwidth(struct usb_device *dev, struct urb *urb, int isoc);
  724. extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout);
  725. extern int usb_root_hub_string(int id, int serial, char *type, __u8 *data, int len);
  726. extern void usb_connect(struct usb_device *dev);
  727. extern void usb_disconnect(struct usb_device **);
  728. extern void usb_destroy_configuration(struct usb_device *dev);
  729. int usb_get_current_frame_number (struct usb_device *usb_dev);
  730. /*
  731.  * Calling this entity a "pipe" is glorifying it. A USB pipe
  732.  * is something embarrassingly simple: it basically consists
  733.  * of the following information:
  734.  *  - device number (7 bits)
  735.  *  - endpoint number (4 bits)
  736.  *  - current Data0/1 state (1 bit)
  737.  *  - direction (1 bit)
  738.  *  - speed (1 bit)
  739.  *  - max packet size (2 bits: 8, 16, 32 or 64) [Historical; now gone.]
  740.  *  - pipe type (2 bits: control, interrupt, bulk, isochronous)
  741.  *
  742.  * That's 18 bits. Really. Nothing more. And the USB people have
  743.  * documented these eighteen bits as some kind of glorious
  744.  * virtual data structure.
  745.  *
  746.  * Let's not fall in that trap. We'll just encode it as a simple
  747.  * unsigned int. The encoding is:
  748.  *
  749.  *  - max size: bits 0-1 (00 = 8, 01 = 16, 10 = 32, 11 = 64) [Historical; now gone.]
  750.  *  - direction: bit 7 (0 = Host-to-Device [Out], 1 = Device-to-Host [In])
  751.  *  - device: bits 8-14
  752.  *  - endpoint: bits 15-18
  753.  *  - Data0/1: bit 19
  754.  *  - speed: bit 26 (0 = Full, 1 = Low Speed)
  755.  *  - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, 10 = control, 11 = bulk)
  756.  *
  757.  * Why? Because it's arbitrary, and whatever encoding we select is really
  758.  * up to us. This one happens to share a lot of bit positions with the UHCI
  759.  * specification, so that much of the uhci driver can just mask the bits
  760.  * appropriately.
  761.  *
  762.  * NOTE:  there's no encoding (yet?) for a "high speed" endpoint; treat them
  763.  * like full speed devices.
  764.  */
  765. #define PIPE_ISOCHRONOUS 0
  766. #define PIPE_INTERRUPT 1
  767. #define PIPE_CONTROL 2
  768. #define PIPE_BULK 3
  769. #define usb_maxpacket(dev, pipe, out) (out 
  770. ? (dev)->epmaxpacketout[usb_pipeendpoint(pipe)] 
  771. : (dev)->epmaxpacketin [usb_pipeendpoint(pipe)] )
  772. #define usb_packetid(pipe) (((pipe) & USB_DIR_IN) ? USB_PID_IN : USB_PID_OUT)
  773. #define usb_pipeout(pipe) ((((pipe) >> 7) & 1) ^ 1)
  774. #define usb_pipein(pipe) (((pipe) >> 7) & 1)
  775. #define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f)
  776. #define usb_pipe_endpdev(pipe) (((pipe) >> 8) & 0x7ff)
  777. #define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf)
  778. #define usb_pipedata(pipe) (((pipe) >> 19) & 1)
  779. #define usb_pipeslow(pipe) (((pipe) >> 26) & 1)
  780. #define usb_pipetype(pipe) (((pipe) >> 30) & 3)
  781. #define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)
  782. #define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT)
  783. #define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL)
  784. #define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK)
  785. #define PIPE_DEVEP_MASK 0x0007ff00
  786. /* The D0/D1 toggle bits */
  787. #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> ep) & 1)
  788. #define usb_dotoggle(dev, ep, out)  ((dev)->toggle[out] ^= (1 << ep))
  789. #define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << ep)) | ((bit) << ep))
  790. /* Endpoint halt control/status */
  791. #define usb_endpoint_out(ep_dir) (((ep_dir >> 7) & 1) ^ 1)
  792. #define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
  793. #define usb_endpoint_running(dev, ep, out) ((dev)->halted[out] &= ~(1 << (ep)))
  794. #define usb_endpoint_halted(dev, ep, out) ((dev)->halted[out] & (1 << (ep)))
  795. static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint)
  796. {
  797. return (dev->devnum << 8) | (endpoint << 15) |
  798. ((dev->speed == USB_SPEED_LOW) << 26);
  799. }
  800. static inline unsigned int __default_pipe(struct usb_device *dev)
  801. {
  802. return ((dev->speed == USB_SPEED_LOW) << 26);
  803. }
  804. /* Create various pipes... */
  805. #define usb_sndctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint))
  806. #define usb_rcvctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
  807. #define usb_sndisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint))
  808. #define usb_rcvisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
  809. #define usb_sndbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint))
  810. #define usb_rcvbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
  811. #define usb_sndintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint))
  812. #define usb_rcvintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
  813. #define usb_snddefctrl(dev) ((PIPE_CONTROL << 30) | __default_pipe(dev))
  814. #define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | __default_pipe(dev) | USB_DIR_IN)
  815. /*
  816.  * Send and receive control messages..
  817.  */
  818. int usb_new_device(struct usb_device *dev);
  819. int usb_reset_device(struct usb_device *dev);
  820. int usb_set_address(struct usb_device *dev);
  821. int usb_get_descriptor(struct usb_device *dev, unsigned char desctype,
  822. unsigned char descindex, void *buf, int size);
  823. int usb_get_class_descriptor(struct usb_device *dev, int ifnum, unsigned char desctype,
  824. unsigned char descindex, void *buf, int size);
  825. int usb_get_device_descriptor(struct usb_device *dev);
  826. int __usb_get_extra_descriptor(char *buffer, unsigned size, unsigned char type, void **ptr);
  827. int usb_get_status(struct usb_device *dev, int type, int target, void *data);
  828. int usb_get_configuration(struct usb_device *dev);
  829. int usb_get_protocol(struct usb_device *dev, int ifnum);
  830. int usb_set_protocol(struct usb_device *dev, int ifnum, int protocol);
  831. int usb_set_interface(struct usb_device *dev, int ifnum, int alternate);
  832. int usb_set_idle(struct usb_device *dev, int ifnum, int duration, int report_id);
  833. int usb_set_configuration(struct usb_device *dev, int configuration);
  834. int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type,
  835. unsigned char id, void *buf, int size);
  836. int usb_set_report(struct usb_device *dev, int ifnum, unsigned char type,
  837. unsigned char id, void *buf, int size);
  838. int usb_string(struct usb_device *dev, int index, char *buf, size_t size);
  839. int usb_clear_halt(struct usb_device *dev, int pipe);
  840. void usb_set_maxpacket(struct usb_device *dev);
  841. #define usb_get_extra_descriptor(ifpoint,type,ptr)
  842. __usb_get_extra_descriptor((ifpoint)->extra,(ifpoint)->extralen,type,(void**)ptr)
  843. /*
  844.  * Some USB bandwidth allocation constants.
  845.  */
  846. #define BW_HOST_DELAY 1000L /* nanoseconds */
  847. #define BW_HUB_LS_SETUP 333L /* nanoseconds */
  848.                         /* 4 full-speed bit times (est.) */
  849. #define FRAME_TIME_BITS         12000L /* frame = 1 millisecond */
  850. #define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L)
  851. #define FRAME_TIME_USECS 1000L
  852. #define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L)
  853. #define BitTime(bytecount)  (7 * 8 * bytecount / 6)  /* with integer truncation */
  854. /* Trying not to use worst-case bit-stuffing
  855.                    of (7/6 * 8 * bytecount) = 9.33 * bytecount */
  856. /* bytecount = data payload byte count */
  857. #define NS_TO_US(ns) ((ns + 500L) / 1000L)
  858. /* convert & round nanoseconds to microseconds */
  859. /*
  860.  * Debugging helpers..
  861.  */
  862. void usb_show_device_descriptor(struct usb_device_descriptor *);
  863. void usb_show_config_descriptor(struct usb_config_descriptor *);
  864. void usb_show_interface_descriptor(struct usb_interface_descriptor *);
  865. void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor *);
  866. void usb_show_device(struct usb_device *);
  867. void usb_show_string(struct usb_device *dev, char *id, int index);
  868. #ifdef DEBUG
  869. #define dbg(format, arg...) printk(KERN_DEBUG __FILE__ ": " format "n" , ## arg)
  870. #else
  871. #define dbg(format, arg...) do {} while (0)
  872. #endif
  873. #define err(format, arg...) printk(KERN_ERR __FILE__ ": " format "n" , ## arg)
  874. #define info(format, arg...) printk(KERN_INFO __FILE__ ": " format "n" , ## arg)
  875. #define warn(format, arg...) printk(KERN_WARNING __FILE__ ": " format "n" , ## arg)
  876. /*
  877.  * bus and driver list
  878.  */
  879. extern struct list_head usb_driver_list;
  880. extern struct list_head usb_bus_list;
  881. extern struct semaphore usb_bus_list_lock;
  882. /*
  883.  * USB device fs stuff
  884.  */
  885. #ifdef CONFIG_USB_DEVICEFS
  886. /*
  887.  * these are expected to be called from the USB core/hub thread
  888.  * with the kernel lock held
  889.  */
  890. extern void usbdevfs_add_bus(struct usb_bus *bus);
  891. extern void usbdevfs_remove_bus(struct usb_bus *bus);
  892. extern void usbdevfs_add_device(struct usb_device *dev);
  893. extern void usbdevfs_remove_device(struct usb_device *dev);
  894. extern int usbdevfs_init(void);
  895. extern void usbdevfs_cleanup(void);
  896. #else /* CONFIG_USB_DEVICEFS */
  897. static inline void usbdevfs_add_bus(struct usb_bus *bus) {}
  898. static inline void usbdevfs_remove_bus(struct usb_bus *bus) {}
  899. static inline void usbdevfs_add_device(struct usb_device *dev) {}
  900. static inline void usbdevfs_remove_device(struct usb_device *dev) {}
  901. static inline int usbdevfs_init(void) { return 0; }
  902. static inline void usbdevfs_cleanup(void) { }
  903. #endif /* CONFIG_USB_DEVICEFS */
  904. #endif  /* __KERNEL__ */
  905. #endif