usb.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:39k
源码类别:

Linux/Unix编程

开发平台:

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 /* to device */
  41. #define USB_DIR_IN 0x80 /* to host */
  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. /**
  137.  * struct usb_ctrlrequest - structure used to make USB device control requests easier to create and decode
  138.  * @bRequestType: matches the USB bmRequestType field
  139.  * @bRequest: matches the USB bRequest field
  140.  * @wValue: matches the USB wValue field
  141.  * @wIndex: matches the USB wIndex field
  142.  * @wLength: matches the USB wLength field
  143.  *
  144.  * This structure is used to send control requests to a USB device.  It matches
  145.  * the different fields of the USB 2.0 Spec section 9.3, table 9-2.  See the
  146.  * USB spec for a fuller description of the different fields, and what they are
  147.  * used for.
  148.  */
  149. struct usb_ctrlrequest {
  150. __u8 bRequestType;
  151. __u8 bRequest;
  152. __u16 wValue;
  153. __u16 wIndex;
  154. __u16 wLength;
  155. } __attribute__ ((packed));
  156. /*
  157.  * USB-status codes:
  158.  * USB_ST* maps to -E* and should go away in the future
  159.  */
  160. #define USB_ST_NOERROR 0
  161. #define USB_ST_CRC (-EILSEQ)
  162. #define USB_ST_BITSTUFF (-EPROTO)
  163. #define USB_ST_NORESPONSE (-ETIMEDOUT) /* device not responding/handshaking */
  164. #define USB_ST_DATAOVERRUN (-EOVERFLOW)
  165. #define USB_ST_DATAUNDERRUN (-EREMOTEIO)
  166. #define USB_ST_BUFFEROVERRUN (-ECOMM)
  167. #define USB_ST_BUFFERUNDERRUN (-ENOSR)
  168. #define USB_ST_INTERNALERROR (-EPROTO)  /* unknown error */
  169. #define USB_ST_SHORT_PACKET (-EREMOTEIO)
  170. #define USB_ST_PARTIAL_ERROR (-EXDEV) /* ISO transfer only partially completed */
  171. #define USB_ST_URB_KILLED (-ENOENT) /* URB canceled by user */
  172. #define USB_ST_URB_PENDING (-EINPROGRESS)
  173. #define USB_ST_REMOVED (-ENODEV)  /* device not existing or removed */
  174. #define USB_ST_TIMEOUT (-ETIMEDOUT) /* communication timed out, also in urb->status**/
  175. #define USB_ST_NOTSUPPORTED (-ENOSYS)
  176. #define USB_ST_BANDWIDTH_ERROR (-ENOSPC) /* too much bandwidth used */
  177. #define USB_ST_URB_INVALID_ERROR  (-EINVAL) /* invalid value/transfer type */
  178. #define USB_ST_URB_REQUEST_ERROR  (-ENXIO) /* invalid endpoint */
  179. #define USB_ST_STALL (-EPIPE)  /* pipe stalled, also in urb->status*/
  180. /*
  181.  * USB device number allocation bitmap. There's one bitmap
  182.  * per USB tree.
  183.  */
  184. struct usb_devmap {
  185. unsigned long devicemap[128 / (8*sizeof(unsigned long))];
  186. };
  187. #define USB_MAXBUS 64
  188. struct usb_busmap {
  189. unsigned long busmap[USB_MAXBUS / (8*sizeof(unsigned long))];
  190. };
  191. /*
  192.  * This is a USB device descriptor.
  193.  *
  194.  * USB device information
  195.  */
  196. /* Everything but the endpoint maximums are aribtrary */
  197. #define USB_MAXCONFIG 8
  198. #define USB_ALTSETTINGALLOC     4
  199. #define USB_MAXALTSETTING 128  /* Hard limit */
  200. #define USB_MAXINTERFACES 32
  201. #define USB_MAXENDPOINTS 32
  202. /* All standard descriptors have these 2 fields in common */
  203. struct usb_descriptor_header {
  204. __u8  bLength;
  205. __u8  bDescriptorType;
  206. } __attribute__ ((packed));
  207. /* Device descriptor */
  208. struct usb_device_descriptor {
  209. __u8  bLength;
  210. __u8  bDescriptorType;
  211. __u16 bcdUSB;
  212. __u8  bDeviceClass;
  213. __u8  bDeviceSubClass;
  214. __u8  bDeviceProtocol;
  215. __u8  bMaxPacketSize0;
  216. __u16 idVendor;
  217. __u16 idProduct;
  218. __u16 bcdDevice;
  219. __u8  iManufacturer;
  220. __u8  iProduct;
  221. __u8  iSerialNumber;
  222. __u8  bNumConfigurations;
  223. } __attribute__ ((packed));
  224. /* Endpoint descriptor */
  225. struct usb_endpoint_descriptor {
  226. __u8  bLength __attribute__ ((packed));
  227. __u8  bDescriptorType __attribute__ ((packed));
  228. __u8  bEndpointAddress __attribute__ ((packed));
  229. __u8  bmAttributes __attribute__ ((packed));
  230. __u16 wMaxPacketSize __attribute__ ((packed));
  231. __u8  bInterval __attribute__ ((packed));
  232. __u8  bRefresh __attribute__ ((packed));
  233. __u8  bSynchAddress __attribute__ ((packed));
  234.     unsigned char *extra;   /* Extra descriptors */
  235. int extralen;
  236. };
  237. /* Interface descriptor */
  238. struct usb_interface_descriptor {
  239. __u8  bLength __attribute__ ((packed));
  240. __u8  bDescriptorType __attribute__ ((packed));
  241. __u8  bInterfaceNumber __attribute__ ((packed));
  242. __u8  bAlternateSetting __attribute__ ((packed));
  243. __u8  bNumEndpoints __attribute__ ((packed));
  244. __u8  bInterfaceClass __attribute__ ((packed));
  245. __u8  bInterfaceSubClass __attribute__ ((packed));
  246. __u8  bInterfaceProtocol __attribute__ ((packed));
  247. __u8  iInterface __attribute__ ((packed));
  248.    struct usb_endpoint_descriptor *endpoint;
  249.     unsigned char *extra;   /* Extra descriptors */
  250. int extralen;
  251. };
  252. struct usb_interface {
  253. struct usb_interface_descriptor *altsetting;
  254. int act_altsetting; /* active alternate setting */
  255. int num_altsetting; /* number of alternate settings */
  256. int max_altsetting;             /* total memory allocated */
  257.  
  258. struct usb_driver *driver; /* driver */
  259. void *private_data;
  260. };
  261. /* Configuration descriptor information.. */
  262. struct usb_config_descriptor {
  263. __u8  bLength __attribute__ ((packed));
  264. __u8  bDescriptorType __attribute__ ((packed));
  265. __u16 wTotalLength __attribute__ ((packed));
  266. __u8  bNumInterfaces __attribute__ ((packed));
  267. __u8  bConfigurationValue __attribute__ ((packed));
  268. __u8  iConfiguration __attribute__ ((packed));
  269. __u8  bmAttributes __attribute__ ((packed));
  270. __u8  MaxPower __attribute__ ((packed));
  271. struct usb_interface *interface;
  272.     unsigned char *extra;   /* Extra descriptors */
  273. int extralen;
  274. };
  275. /* String descriptor */
  276. struct usb_string_descriptor {
  277. __u8  bLength;
  278. __u8  bDescriptorType;
  279. __u16 wData[1];
  280. } __attribute__ ((packed));
  281. struct usb_device;
  282. /*
  283.  * Device table entry for "new style" table-driven USB drivers.
  284.  * User mode code can read these tables to choose which modules to load.
  285.  * Declare the table as __devinitdata, and as a MODULE_DEVICE_TABLE.
  286.  *
  287.  * With a device table provide bind() instead of probe().  Then the
  288.  * third bind() parameter will point to a matching entry from this
  289.  * table.  (Null value reserved.)
  290.  * 
  291.  * Terminate the driver's table with an all-zeroes entry.
  292.  * Init the fields you care about; zeroes are not used in comparisons.
  293.  */
  294. #define USB_DEVICE_ID_MATCH_VENDOR 0x0001
  295. #define USB_DEVICE_ID_MATCH_PRODUCT 0x0002
  296. #define USB_DEVICE_ID_MATCH_DEV_LO 0x0004
  297. #define USB_DEVICE_ID_MATCH_DEV_HI 0x0008
  298. #define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010
  299. #define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020
  300. #define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040
  301. #define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080
  302. #define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100
  303. #define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200
  304. #define USB_DEVICE_ID_MATCH_DEVICE (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
  305. #define USB_DEVICE_ID_MATCH_DEV_RANGE (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)
  306. #define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)
  307. #define USB_DEVICE_ID_MATCH_DEV_INFO 
  308. (USB_DEVICE_ID_MATCH_DEV_CLASS | USB_DEVICE_ID_MATCH_DEV_SUBCLASS | USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
  309. #define USB_DEVICE_ID_MATCH_INT_INFO 
  310. (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS | USB_DEVICE_ID_MATCH_INT_PROTOCOL)
  311. /* Some useful macros */
  312. #define USB_DEVICE(vend,prod) 
  313. match_flags: USB_DEVICE_ID_MATCH_DEVICE, idVendor: (vend), idProduct: (prod)
  314. #define USB_DEVICE_VER(vend,prod,lo,hi) 
  315. match_flags: USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, idVendor: (vend), idProduct: (prod), bcdDevice_lo: (lo), bcdDevice_hi: (hi)
  316. #define USB_DEVICE_INFO(cl,sc,pr) 
  317. match_flags: USB_DEVICE_ID_MATCH_DEV_INFO, bDeviceClass: (cl), bDeviceSubClass: (sc), bDeviceProtocol: (pr)
  318. #define USB_INTERFACE_INFO(cl,sc,pr) 
  319. match_flags: USB_DEVICE_ID_MATCH_INT_INFO, bInterfaceClass: (cl), bInterfaceSubClass: (sc), bInterfaceProtocol: (pr)
  320. struct usb_device_id {
  321. /* This bitmask is used to determine which of the following fields
  322.  * are to be used for matching.
  323.  */
  324. __u16 match_flags;
  325. /*
  326.  * vendor/product codes are checked, if vendor is nonzero
  327.  * Range is for device revision (bcdDevice), inclusive;
  328.  * zero values here mean range isn't considered
  329.  */
  330. __u16 idVendor;
  331. __u16 idProduct;
  332. __u16 bcdDevice_lo, bcdDevice_hi;
  333. /*
  334.  * if device class != 0, these can be match criteria;
  335.  * but only if this bDeviceClass value is nonzero
  336.  */
  337. __u8 bDeviceClass;
  338. __u8 bDeviceSubClass;
  339. __u8 bDeviceProtocol;
  340. /*
  341.  * if interface class != 0, these can be match criteria;
  342.  * but only if this bInterfaceClass value is nonzero
  343.  */
  344. __u8 bInterfaceClass;
  345. __u8 bInterfaceSubClass;
  346. __u8 bInterfaceProtocol;
  347. /*
  348.  * for driver's use; not involved in driver matching.
  349.  */
  350. unsigned long driver_info;
  351. };
  352. /**
  353.  * struct usb_driver - identifies USB driver to usbcore
  354.  * @owner: Pointer to the module owner of this driver; initialize
  355.  *      it using THIS_MODULE.
  356.  * @name: The driver name should be unique among USB drivers,
  357.  *      and should normally be the same as the module name.
  358.  * @probe: Called to see if the driver is willing to manage a particular
  359.  *      interface on a device.  The probe routine returns a handle that 
  360.  *      will later be provided to disconnect(), or a null pointer to
  361.  *      indicate that the driver will not handle the interface.
  362.  *      The handle is normally a pointer to driver-specific data.
  363.  *      If the probe() routine needs to access the interface
  364.  *      structure itself, use usb_ifnum_to_if() to make sure it's using
  365.  *      the right one.
  366.  * @disconnect: Called when the interface is no longer accessible, usually
  367.  *      because its device has been (or is being) disconnected.  The
  368.  *      handle passed is what was returned by probe(), or was provided
  369.  *      to usb_driver_claim_interface().
  370.  * @ioctl: Used for drivers that want to talk to userspace through
  371.  *      the "usbfs" filesystem.  This lets devices provide ways to
  372.  *      expose information to user space regardless of where they
  373.  *      do (or don't) show up otherwise in the filesystem.
  374.  * @fops: pointer to a fops structure if the driver wants to use the USB
  375.  * major number.
  376.  * @minor: the starting minor number for this driver, if the fops
  377.  * pointer is set.
  378.  * @id_table: USB drivers use ID table to support hotplugging.
  379.  *      Export this with MODULE_DEVICE_TABLE(usb,...), or use NULL to
  380.  *      say that probe() should be called for any unclaimed interface.
  381.  *
  382.  * USB drivers must provide a name, probe() and disconnect() methods,
  383.  * and an id_table.  Other driver fields are optional.
  384.  *
  385.  * The id_table is used in hotplugging.  It holds a set of descriptors,
  386.  * and specialized data may be associated with each entry.  That table
  387.  * is used by both user and kernel mode hotplugging support.
  388.  * The probe() and disconnect() methods are called in a context where
  389.  * they can sleep, but they should avoid abusing the privilege.  Most
  390.  * work to connect to a device should be done when the device is opened,
  391.  * and undone at the last close.  The disconnect code needs to address
  392.  * concurrency issues with respect to open() and close() methods, as
  393.  * well as forcing all pending I/O requests to complete (by unlinking
  394.  * them as necessary, and blocking until the unlinks complete).
  395.  */
  396. struct usb_driver {
  397. struct module *owner;
  398. const char *name;
  399. void *(*probe)(
  400.     struct usb_device *dev, /* the device */
  401.     unsigned intf, /* what interface */
  402.     const struct usb_device_id *id /* from id_table */
  403.     );
  404. void (*disconnect)(struct usb_device *, void *);
  405. struct list_head driver_list;
  406. struct file_operations *fops;
  407. int minor;
  408. struct semaphore serialize;
  409. int (*ioctl)(struct usb_device *dev, unsigned int code, void *buf);
  410. const struct usb_device_id *id_table;
  411. };
  412. /*----------------------------------------------------------------------------* 
  413.  * New USB Structures                                                         *
  414.  *----------------------------------------------------------------------------*/
  415. /*
  416.  * urb->transfer_flags:
  417.  */
  418. #define USB_DISABLE_SPD 0x0001
  419. #define URB_SHORT_NOT_OK USB_DISABLE_SPD
  420. #define USB_ISO_ASAP 0x0002
  421. #define USB_ASYNC_UNLINK 0x0008
  422. #define USB_QUEUE_BULK 0x0010
  423. #define USB_NO_FSBR 0x0020
  424. #define USB_ZERO_PACKET 0x0040  // Finish bulk OUTs always with zero length packet
  425. #define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt needed */
  426. /* ... less overhead for QUEUE_BULK */
  427. #define USB_TIMEOUT_KILLED 0x1000 // only set by HCD!
  428. struct iso_packet_descriptor
  429. {
  430. unsigned int offset;
  431. unsigned int length; // expected length
  432. unsigned int actual_length;
  433. unsigned int status;
  434. };
  435. #define usb_iso_packet_descriptor iso_packet_descriptor
  436. struct urb;
  437. typedef void (*usb_complete_t)(struct urb *);
  438. struct urb
  439. {
  440. spinlock_t lock; // lock for the URB
  441. void *hcpriv; // private data for host controller
  442. struct list_head urb_list; // list pointer to all active urbs 
  443. struct urb *next; // pointer to next URB
  444. struct usb_device *dev; // pointer to associated USB device
  445. unsigned int pipe; // pipe information
  446. int status; // returned status
  447. unsigned int transfer_flags; // USB_DISABLE_SPD | USB_ISO_ASAP | etc.
  448. void *transfer_buffer; // associated data buffer
  449. dma_addr_t transfer_dma; // dma addr for transfer_buffer
  450. int transfer_buffer_length; // data buffer length
  451. int actual_length;              // actual data buffer length
  452. int bandwidth; // bandwidth for this transfer request (INT or ISO)
  453. unsigned char *setup_packet; // setup packet (control only)
  454. dma_addr_t setup_dma; // dma addr for setup_packet
  455. //
  456. int start_frame; // start frame (iso/irq only)
  457. int number_of_packets; // number of packets in this request (iso)
  458. int interval;                   // polling interval (irq only)
  459. int error_count; // number of errors in this transfer (iso only)
  460. int timeout; // timeout (in jiffies)
  461. //
  462. void *context; // context for completion routine
  463. usb_complete_t complete; // pointer to completion routine
  464. //
  465. struct iso_packet_descriptor iso_frame_desc[0];
  466. };
  467. /**
  468.  * FILL_CONTROL_URB - macro to help initialize a control urb
  469.  * @URB: pointer to the urb to initialize.
  470.  * @DEV: pointer to the struct usb_device for this urb.
  471.  * @PIPE: the endpoint pipe
  472.  * @SETUP_PACKET: pointer to the setup_packet buffer
  473.  * @TRANSFER_BUFFER: pointer to the transfer buffer
  474.  * @BUFFER_LENGTH: length of the transfer buffer
  475.  * @COMPLETE: pointer to the usb_complete_t function
  476.  * @CONTEXT: what to set the urb context to.
  477.  *
  478.  * Initializes a control urb with the proper information needed to submit
  479.  * it to a device.  This macro is depreciated, the usb_fill_control_urb()
  480.  * function should be used instead.
  481.  */
  482. #define FILL_CONTROL_URB(URB,DEV,PIPE,SETUP_PACKET,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT) 
  483.     do {
  484. spin_lock_init(&(URB)->lock);
  485. (URB)->dev=DEV;
  486. (URB)->pipe=PIPE;
  487. (URB)->setup_packet=SETUP_PACKET;
  488. (URB)->transfer_buffer=TRANSFER_BUFFER;
  489. (URB)->transfer_buffer_length=BUFFER_LENGTH;
  490. (URB)->complete=COMPLETE;
  491. (URB)->context=CONTEXT;
  492.     } while (0)
  493. /**
  494.  * FILL_BULK_URB - macro to help initialize a bulk urb
  495.  * @URB: pointer to the urb to initialize.
  496.  * @DEV: pointer to the struct usb_device for this urb.
  497.  * @PIPE: the endpoint pipe
  498.  * @TRANSFER_BUFFER: pointer to the transfer buffer
  499.  * @BUFFER_LENGTH: length of the transfer buffer
  500.  * @COMPLETE: pointer to the usb_complete_t function
  501.  * @CONTEXT: what to set the urb context to.
  502.  *
  503.  * Initializes a bulk urb with the proper information needed to submit it
  504.  * to a device.  This macro is depreciated, the usb_fill_bulk_urb()
  505.  * function should be used instead.
  506.  */
  507. #define FILL_BULK_URB(URB,DEV,PIPE,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT) 
  508.     do {
  509. spin_lock_init(&(URB)->lock);
  510. (URB)->dev=DEV;
  511. (URB)->pipe=PIPE;
  512. (URB)->transfer_buffer=TRANSFER_BUFFER;
  513. (URB)->transfer_buffer_length=BUFFER_LENGTH;
  514. (URB)->complete=COMPLETE;
  515. (URB)->context=CONTEXT;
  516.     } while (0)
  517.     
  518. /**
  519.  * FILL_INT_URB - macro to help initialize a interrupt urb
  520.  * @URB: pointer to the urb to initialize.
  521.  * @DEV: pointer to the struct usb_device for this urb.
  522.  * @PIPE: the endpoint pipe
  523.  * @TRANSFER_BUFFER: pointer to the transfer buffer
  524.  * @BUFFER_LENGTH: length of the transfer buffer
  525.  * @COMPLETE: pointer to the usb_complete_t function
  526.  * @CONTEXT: what to set the urb context to.
  527.  * @INTERVAL: what to set the urb interval to.
  528.  *
  529.  * Initializes a interrupt urb with the proper information needed to submit
  530.  * it to a device.  This macro is depreciated, the usb_fill_int_urb()
  531.  * function should be used instead.
  532.  */
  533. #define FILL_INT_URB(URB,DEV,PIPE,TRANSFER_BUFFER,BUFFER_LENGTH,COMPLETE,CONTEXT,INTERVAL) 
  534.     do {
  535. spin_lock_init(&(URB)->lock);
  536. (URB)->dev=DEV;
  537. (URB)->pipe=PIPE;
  538. (URB)->transfer_buffer=TRANSFER_BUFFER;
  539. (URB)->transfer_buffer_length=BUFFER_LENGTH;
  540. (URB)->complete=COMPLETE;
  541. (URB)->context=CONTEXT;
  542. (URB)->interval=INTERVAL;
  543. (URB)->start_frame=-1;
  544.     } while (0)
  545. #define FILL_CONTROL_URB_TO(a,aa,b,c,d,e,f,g,h) 
  546.     do {
  547. spin_lock_init(&(a)->lock);
  548. (a)->dev=aa;
  549. (a)->pipe=b;
  550. (a)->setup_packet=c;
  551. (a)->transfer_buffer=d;
  552. (a)->transfer_buffer_length=e;
  553. (a)->complete=f;
  554. (a)->context=g;
  555. (a)->timeout=h;
  556.     } while (0)
  557. #define FILL_BULK_URB_TO(a,aa,b,c,d,e,f,g) 
  558.     do {
  559. spin_lock_init(&(a)->lock);
  560. (a)->dev=aa;
  561. (a)->pipe=b;
  562. (a)->transfer_buffer=c;
  563. (a)->transfer_buffer_length=d;
  564. (a)->complete=e;
  565. (a)->context=f;
  566. (a)->timeout=g;
  567.     } while (0)
  568.  
  569. /**
  570.  * usb_fill_control_urb - initializes a control urb
  571.  * @urb: pointer to the urb to initialize.
  572.  * @dev: pointer to the struct usb_device for this urb.
  573.  * @pipe: the endpoint pipe
  574.  * @setup_packet: pointer to the setup_packet buffer
  575.  * @transfer_buffer: pointer to the transfer buffer
  576.  * @buffer_length: length of the transfer buffer
  577.  * @complete: pointer to the usb_complete_t function
  578.  * @context: what to set the urb context to.
  579.  *
  580.  * Initializes a control urb with the proper information needed to submit
  581.  * it to a device.
  582.  */
  583. static inline void usb_fill_control_urb (struct urb *urb,
  584.  struct usb_device *dev,
  585.  unsigned int pipe,
  586.  unsigned char *setup_packet,
  587.  void *transfer_buffer,
  588.  int buffer_length,
  589.  usb_complete_t complete,
  590.  void *context)
  591. {
  592. spin_lock_init(&urb->lock);
  593. urb->dev = dev;
  594. urb->pipe = pipe;
  595. urb->setup_packet = setup_packet;
  596. urb->transfer_buffer = transfer_buffer;
  597. urb->transfer_buffer_length = buffer_length;
  598. urb->complete = complete;
  599. urb->context = context;
  600. }
  601. /**
  602.  * usb_fill_bulk_urb - macro to help initialize a bulk urb
  603.  * @urb: pointer to the urb to initialize.
  604.  * @dev: pointer to the struct usb_device for this urb.
  605.  * @pipe: the endpoint pipe
  606.  * @transfer_buffer: pointer to the transfer buffer
  607.  * @buffer_length: length of the transfer buffer
  608.  * @complete: pointer to the usb_complete_t function
  609.  * @context: what to set the urb context to.
  610.  *
  611.  * Initializes a bulk urb with the proper information needed to submit it
  612.  * to a device.
  613.  */
  614. static inline void usb_fill_bulk_urb (struct urb *urb,
  615.       struct usb_device *dev,
  616.       unsigned int pipe,
  617.       void *transfer_buffer,
  618.       int buffer_length,
  619.       usb_complete_t complete,
  620.       void *context)
  621.       
  622. {
  623. spin_lock_init(&urb->lock);
  624. urb->dev = dev;
  625. urb->pipe = pipe;
  626. urb->transfer_buffer = transfer_buffer;
  627. urb->transfer_buffer_length = buffer_length;
  628. urb->complete = complete;
  629. urb->context = context;
  630. }
  631.     
  632. /**
  633.  * usb_fill_int_urb - macro to help initialize a interrupt urb
  634.  * @urb: pointer to the urb to initialize.
  635.  * @dev: pointer to the struct usb_device for this urb.
  636.  * @pipe: the endpoint pipe
  637.  * @transfer_buffer: pointer to the transfer buffer
  638.  * @buffer_length: length of the transfer buffer
  639.  * @complete: pointer to the usb_complete_t function
  640.  * @context: what to set the urb context to.
  641.  * @interval: what to set the urb interval to.
  642.  *
  643.  * Initializes a interrupt urb with the proper information needed to submit
  644.  * it to a device.
  645.  */
  646. static inline void usb_fill_int_urb (struct urb *urb,
  647.      struct usb_device *dev,
  648.      unsigned int pipe,
  649.      void *transfer_buffer,
  650.      int buffer_length,
  651.      usb_complete_t complete,
  652.      void *context,
  653.      int interval)
  654. {
  655. spin_lock_init(&urb->lock);
  656. urb->dev = dev;
  657. urb->pipe = pipe;
  658. urb->transfer_buffer = transfer_buffer;
  659. urb->transfer_buffer_length = buffer_length;
  660. urb->complete = complete;
  661. urb->context = context;
  662. urb->interval = interval;
  663. urb->start_frame = -1;
  664. }
  665. struct urb *usb_alloc_urb(int iso_packets);
  666. void usb_free_urb (struct urb *urb);
  667. int usb_submit_urb(struct urb *urb);
  668. int usb_unlink_urb(struct urb *urb);
  669. int usb_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, struct usb_ctrlrequest *cmd,  void *data, int len, int timeout);
  670. int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout);
  671. /*-------------------------------------------------------------------*
  672.  *                         SYNCHRONOUS CALL SUPPORT                  *
  673.  *-------------------------------------------------------------------*/
  674. struct usb_api_data
  675. {
  676. wait_queue_head_t wqh;
  677. int done;
  678. /* void* stuff; */ /* Possible extension later. */
  679. };
  680. /* -------------------------------------------------------------------------- */
  681. struct usb_operations {
  682. int (*allocate)(struct usb_device *);
  683. int (*deallocate)(struct usb_device *);
  684. int (*get_frame_number) (struct usb_device *usb_dev);
  685. int (*submit_urb) (struct urb* purb);
  686. int (*unlink_urb) (struct urb* purb);
  687. };
  688. #define DEVNUM_ROUND_ROBIN /***** OPTION *****/
  689. /*
  690.  * Allocated per bus we have
  691.  */
  692. struct usb_bus {
  693. int busnum; /* Bus number (in order of reg) */
  694. char *bus_name; /* stable id (PCI slot_name etc) */
  695. #ifdef DEVNUM_ROUND_ROBIN
  696. int devnum_next;                /* Next open device number in round-robin allocation */
  697. #endif /* DEVNUM_ROUND_ROBIN */
  698. struct usb_devmap devmap;       /* Device map */
  699. struct usb_operations *op;      /* Operations (specific to the HC) */
  700. struct usb_device *root_hub;    /* Root hub */
  701. struct list_head bus_list;
  702. void *hcpriv;                   /* Host Controller private data */
  703. int bandwidth_allocated; /* on this Host Controller; */
  704.   /* applies to Int. and Isoc. pipes; */
  705.   /* measured in microseconds/frame; */
  706.   /* range is 0..900, where 900 = */
  707.   /* 90% of a 1-millisecond frame */
  708. int bandwidth_int_reqs; /* number of Interrupt requesters */
  709. int bandwidth_isoc_reqs; /* number of Isoc. requesters */
  710. /* usbdevfs inode list */
  711. struct list_head inodes;
  712. atomic_t refcnt;
  713. };
  714. /*
  715.  * As of USB 2.0, full/low speed devices are segregated into trees.
  716.  * One type grows from USB 1.1 host controllers (OHCI, UHCI etc).
  717.  * The other type grows from high speed hubs when they connect to
  718.  * full/low speed devices using "Transaction Translators" (TTs).
  719.  *
  720.  * TTs should only be known to the hub driver, and high speed bus
  721.  * drivers (only EHCI for now).  They affect periodic scheduling and
  722.  * sometimes control/bulk error recovery.
  723.  */
  724. struct usb_tt {
  725. struct usb_device *hub; /* upstream highspeed hub */
  726. int multi; /* true means one TT per port */
  727. };
  728. /* This is arbitrary.
  729.  * From USB 2.0 spec Table 11-13, offset 7, a hub can
  730.  * have up to 255 ports. The most yet reported is 10.
  731.  */
  732. #define USB_MAXCHILDREN (16)
  733. struct usb_device {
  734. int devnum; /* Address on USB bus */
  735. char devpath [16]; /* Use in messages: /port/port/... */
  736. enum {
  737. USB_SPEED_UNKNOWN = 0, /* enumerating */
  738. USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */
  739. USB_SPEED_HIGH /* usb 2.0 */
  740. } speed;
  741. struct usb_tt *tt;  /* low/full speed dev, highspeed hub */
  742. int ttport; /* device port on that tt hub */
  743. atomic_t refcnt; /* Reference count */
  744. struct semaphore serialize;
  745. unsigned int toggle[2]; /* one bit for each endpoint ([0] = IN, [1] = OUT) */
  746. unsigned int halted[2]; /* endpoint halts; one bit per endpoint # & direction; */
  747. /* [0] = IN, [1] = OUT */
  748. int epmaxpacketin[16]; /* INput endpoint specific maximums */
  749. int epmaxpacketout[16]; /* OUTput endpoint specific maximums */
  750. struct usb_device *parent;
  751. struct usb_bus *bus; /* Bus we're part of */
  752. struct usb_device_descriptor descriptor;/* Descriptor */
  753. struct usb_config_descriptor *config; /* All of the configs */
  754. struct usb_config_descriptor *actconfig;/* the active configuration */
  755. char **rawdescriptors; /* Raw descriptors for each config */
  756. int have_langid; /* whether string_langid is valid yet */
  757. int string_langid; /* language ID for strings */
  758.   
  759. void *hcpriv; /* Host Controller private data */
  760.         /* usbdevfs inode list */
  761. struct list_head inodes;
  762. struct list_head filelist;
  763. /*
  764.  * Child devices - these can be either new devices
  765.  * (if this is a hub device), or different instances
  766.  * of this same device.
  767.  *
  768.  * Each instance needs its own set of data structures.
  769.  */
  770. int maxchild; /* Number of ports if hub */
  771. struct usb_device *children[USB_MAXCHILDREN];
  772. };
  773. extern struct usb_interface *usb_ifnum_to_if(struct usb_device *dev, unsigned ifnum);
  774. extern struct usb_endpoint_descriptor *usb_epnum_to_ep_desc(struct usb_device *dev, unsigned epnum);
  775. extern int usb_register(struct usb_driver *);
  776. extern void usb_deregister(struct usb_driver *);
  777. extern void usb_scan_devices(void);
  778. /* used these for multi-interface device registration */
  779. extern void usb_driver_claim_interface(struct usb_driver *driver, struct usb_interface *iface, void* priv);
  780. extern int usb_interface_claimed(struct usb_interface *iface);
  781. extern void usb_driver_release_interface(struct usb_driver *driver, struct usb_interface *iface);
  782. const struct usb_device_id *usb_match_id(struct usb_device *dev,
  783.  struct usb_interface *interface,
  784.  const struct usb_device_id *id);
  785. extern struct usb_bus *usb_alloc_bus(struct usb_operations *);
  786. extern void usb_free_bus(struct usb_bus *);
  787. extern void usb_register_bus(struct usb_bus *);
  788. extern void usb_deregister_bus(struct usb_bus *);
  789. extern struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bus *);
  790. extern void usb_free_dev(struct usb_device *);
  791. extern void usb_inc_dev_use(struct usb_device *);
  792. #define usb_dec_dev_use usb_free_dev
  793. 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);
  794. extern int usb_root_hub_string(int id, int serial, char *type, __u8 *data, int len);
  795. extern void usb_connect(struct usb_device *dev);
  796. extern void usb_disconnect(struct usb_device **);
  797. extern void usb_destroy_configuration(struct usb_device *dev);
  798. int usb_get_current_frame_number (struct usb_device *usb_dev);
  799. /**
  800.  * usb_make_path - returns stable device path in the usb tree
  801.  * @dev: the device whose path is being constructed
  802.  * @buf: where to put the string
  803.  * @size: how big is "buf"?
  804.  *
  805.  * Returns length of the string (> 0) or negative if size was too small.
  806.  *
  807.  * This identifier is intended to be "stable", reflecting physical paths in
  808.  * hardware such as physical bus addresses for host controllers or ports on
  809.  * USB hubs.  That makes it stay the same until systems are physically
  810.  * reconfigured, by re-cabling a tree of USB devices or by moving USB host
  811.  * controllers.  Adding and removing devices, including virtual root hubs
  812.  * in host controller driver modules, does not change these path identifers;
  813.  * neither does rebooting or re-enumerating.  These are more useful identifiers
  814.  * than changeable ("unstable") ones like bus numbers or device addresses.
  815.  * (The stability of the id depends on stability of the bus_name associated
  816.  * with the bus the device uses; that is normally stable.)
  817.  *
  818.  * With a partial exception for devices connected to USB 2.0 root hubs, these
  819.  * identifiers are also predictable.  So long as the device tree isn't changed,
  820.  * plugging any USB device into a given hub port always gives it the same path.
  821.  * Because of the use of "companion" controllers, devices connected to ports on
  822.  * USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are
  823.  * high speed, and a different one if they are full or low speed.
  824.  */
  825. static inline int usb_make_path (struct usb_device *dev, char *buf, size_t size)
  826. {
  827. int actual;
  828. actual = snprintf (buf, size, "usb-%s-%s",
  829. dev->bus->bus_name, dev->devpath);
  830. return (actual >= size) ? -1 : actual;
  831. }
  832. /*
  833.  * Calling this entity a "pipe" is glorifying it. A USB pipe
  834.  * is something embarrassingly simple: it basically consists
  835.  * of the following information:
  836.  *  - device number (7 bits)
  837.  *  - endpoint number (4 bits)
  838.  *  - current Data0/1 state (1 bit)
  839.  *  - direction (1 bit)
  840.  *  - speed (1 bit)
  841.  *  - max packet size (2 bits: 8, 16, 32 or 64) [Historical; now gone.]
  842.  *  - pipe type (2 bits: control, interrupt, bulk, isochronous)
  843.  *
  844.  * That's 18 bits. Really. Nothing more. And the USB people have
  845.  * documented these eighteen bits as some kind of glorious
  846.  * virtual data structure.
  847.  *
  848.  * Let's not fall in that trap. We'll just encode it as a simple
  849.  * unsigned int. The encoding is:
  850.  *
  851.  *  - max size: bits 0-1 (00 = 8, 01 = 16, 10 = 32, 11 = 64) [Historical; now gone.]
  852.  *  - direction: bit 7 (0 = Host-to-Device [Out], 1 = Device-to-Host [In])
  853.  *  - device: bits 8-14
  854.  *  - endpoint: bits 15-18
  855.  *  - Data0/1: bit 19
  856.  *  - speed: bit 26 (0 = Full, 1 = Low Speed)
  857.  *  - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, 10 = control, 11 = bulk)
  858.  *
  859.  * Why? Because it's arbitrary, and whatever encoding we select is really
  860.  * up to us. This one happens to share a lot of bit positions with the UHCI
  861.  * specification, so that much of the uhci driver can just mask the bits
  862.  * appropriately.
  863.  *
  864.  * NOTE:  there's no encoding (yet?) for a "high speed" endpoint; treat them
  865.  * like full speed devices.
  866.  */
  867. #define PIPE_ISOCHRONOUS 0
  868. #define PIPE_INTERRUPT 1
  869. #define PIPE_CONTROL 2
  870. #define PIPE_BULK 3
  871. #define usb_maxpacket(dev, pipe, out) (out 
  872. ? (dev)->epmaxpacketout[usb_pipeendpoint(pipe)] 
  873. : (dev)->epmaxpacketin [usb_pipeendpoint(pipe)] )
  874. #define usb_packetid(pipe) (((pipe) & USB_DIR_IN) ? USB_PID_IN : USB_PID_OUT)
  875. #define usb_pipeout(pipe) ((((pipe) >> 7) & 1) ^ 1)
  876. #define usb_pipein(pipe) (((pipe) >> 7) & 1)
  877. #define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f)
  878. #define usb_pipe_endpdev(pipe) (((pipe) >> 8) & 0x7ff)
  879. #define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf)
  880. #define usb_pipedata(pipe) (((pipe) >> 19) & 1)
  881. #define usb_pipeslow(pipe) (((pipe) >> 26) & 1)
  882. #define usb_pipetype(pipe) (((pipe) >> 30) & 3)
  883. #define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)
  884. #define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT)
  885. #define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL)
  886. #define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK)
  887. #define PIPE_DEVEP_MASK 0x0007ff00
  888. /* The D0/D1 toggle bits */
  889. #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> ep) & 1)
  890. #define usb_dotoggle(dev, ep, out)  ((dev)->toggle[out] ^= (1 << ep))
  891. #define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << ep)) | ((bit) << ep))
  892. /* Endpoint halt control/status */
  893. #define usb_endpoint_out(ep_dir) (((ep_dir >> 7) & 1) ^ 1)
  894. #define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
  895. #define usb_endpoint_running(dev, ep, out) ((dev)->halted[out] &= ~(1 << (ep)))
  896. #define usb_endpoint_halted(dev, ep, out) ((dev)->halted[out] & (1 << (ep)))
  897. static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint)
  898. {
  899. return (dev->devnum << 8) | (endpoint << 15) |
  900. ((dev->speed == USB_SPEED_LOW) << 26);
  901. }
  902. static inline unsigned int __default_pipe(struct usb_device *dev)
  903. {
  904. return ((dev->speed == USB_SPEED_LOW) << 26);
  905. }
  906. /* Create various pipes... */
  907. #define usb_sndctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint))
  908. #define usb_rcvctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
  909. #define usb_sndisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint))
  910. #define usb_rcvisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
  911. #define usb_sndbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint))
  912. #define usb_rcvbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
  913. #define usb_sndintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint))
  914. #define usb_rcvintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
  915. #define usb_snddefctrl(dev) ((PIPE_CONTROL << 30) | __default_pipe(dev))
  916. #define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | __default_pipe(dev) | USB_DIR_IN)
  917. /*
  918.  * Send and receive control messages..
  919.  */
  920. int usb_new_device(struct usb_device *dev);
  921. int usb_reset_device(struct usb_device *dev);
  922. int usb_set_address(struct usb_device *dev);
  923. int usb_get_descriptor(struct usb_device *dev, unsigned char desctype,
  924. unsigned char descindex, void *buf, int size);
  925. int usb_get_class_descriptor(struct usb_device *dev, int ifnum, unsigned char desctype,
  926. unsigned char descindex, void *buf, int size);
  927. int usb_get_device_descriptor(struct usb_device *dev);
  928. int __usb_get_extra_descriptor(char *buffer, unsigned size, unsigned char type, void **ptr);
  929. int usb_get_status(struct usb_device *dev, int type, int target, void *data);
  930. int usb_get_configuration(struct usb_device *dev);
  931. int usb_get_protocol(struct usb_device *dev, int ifnum);
  932. int usb_set_protocol(struct usb_device *dev, int ifnum, int protocol);
  933. int usb_set_interface(struct usb_device *dev, int ifnum, int alternate);
  934. int usb_set_idle(struct usb_device *dev, int ifnum, int duration, int report_id);
  935. int usb_set_configuration(struct usb_device *dev, int configuration);
  936. int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type,
  937. unsigned char id, void *buf, int size);
  938. int usb_set_report(struct usb_device *dev, int ifnum, unsigned char type,
  939. unsigned char id, void *buf, int size);
  940. int usb_string(struct usb_device *dev, int index, char *buf, size_t size);
  941. int usb_clear_halt(struct usb_device *dev, int pipe);
  942. void usb_set_maxpacket(struct usb_device *dev);
  943. #define usb_get_extra_descriptor(ifpoint,type,ptr)
  944. __usb_get_extra_descriptor((ifpoint)->extra,(ifpoint)->extralen,type,(void**)ptr)
  945. /*
  946.  * Debugging helpers..
  947.  */
  948. void usb_show_device_descriptor(struct usb_device_descriptor *);
  949. void usb_show_config_descriptor(struct usb_config_descriptor *);
  950. void usb_show_interface_descriptor(struct usb_interface_descriptor *);
  951. void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor *);
  952. void usb_show_device(struct usb_device *);
  953. void usb_show_string(struct usb_device *dev, char *id, int index);
  954. #ifdef DEBUG
  955. #define dbg(format, arg...) printk(KERN_DEBUG __FILE__ ": " format "n" , ## arg)
  956. #else
  957. #define dbg(format, arg...) do {} while (0)
  958. #endif
  959. #define err(format, arg...) printk(KERN_ERR __FILE__ ": " format "n" , ## arg)
  960. #define info(format, arg...) printk(KERN_INFO __FILE__ ": " format "n" , ## arg)
  961. #define warn(format, arg...) printk(KERN_WARNING __FILE__ ": " format "n" , ## arg)
  962. /*
  963.  * bus and driver list
  964.  */
  965. extern struct list_head usb_driver_list;
  966. extern struct list_head usb_bus_list;
  967. extern struct semaphore usb_bus_list_lock;
  968. /*
  969.  * USB device fs stuff
  970.  */
  971. #ifdef CONFIG_USB_DEVICEFS
  972. /*
  973.  * these are expected to be called from the USB core/hub thread
  974.  * with the kernel lock held
  975.  */
  976. extern void usbdevfs_add_bus(struct usb_bus *bus);
  977. extern void usbdevfs_remove_bus(struct usb_bus *bus);
  978. extern void usbdevfs_add_device(struct usb_device *dev);
  979. extern void usbdevfs_remove_device(struct usb_device *dev);
  980. extern int usbdevfs_init(void);
  981. extern void usbdevfs_cleanup(void);
  982. #else /* CONFIG_USB_DEVICEFS */
  983. static inline void usbdevfs_add_bus(struct usb_bus *bus) {}
  984. static inline void usbdevfs_remove_bus(struct usb_bus *bus) {}
  985. static inline void usbdevfs_add_device(struct usb_device *dev) {}
  986. static inline void usbdevfs_remove_device(struct usb_device *dev) {}
  987. static inline int usbdevfs_init(void) { return 0; }
  988. static inline void usbdevfs_cleanup(void) { }
  989. #endif /* CONFIG_USB_DEVICEFS */
  990. #endif  /* __KERNEL__ */
  991. #endif