USB: Add support for SuperSpeed isoc endpoints
[linux-flexiantxendom0-natty.git] / include / linux / usb / ch9.h
1 /*
2  * This file holds USB constants and structures that are needed for
3  * USB device APIs.  These are used by the USB device model, which is
4  * defined in chapter 9 of the USB 2.0 specification and in the
5  * Wireless USB 1.0 (spread around).  Linux has several APIs in C that
6  * need these:
7  *
8  * - the master/host side Linux-USB kernel driver API;
9  * - the "usbfs" user space API; and
10  * - the Linux "gadget" slave/device/peripheral side driver API.
11  *
12  * USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems
13  * act either as a USB master/host or as a USB slave/device.  That means
14  * the master and slave side APIs benefit from working well together.
15  *
16  * There's also "Wireless USB", using low power short range radios for
17  * peripheral interconnection but otherwise building on the USB framework.
18  *
19  * Note all descriptors are declared '__attribute__((packed))' so that:
20  *
21  * [a] they never get padded, either internally (USB spec writers
22  *     probably handled that) or externally;
23  *
24  * [b] so that accessing bigger-than-a-bytes fields will never
25  *     generate bus errors on any platform, even when the location of
26  *     its descriptor inside a bundle isn't "naturally aligned", and
27  *
28  * [c] for consistency, removing all doubt even when it appears to
29  *     someone that the two other points are non-issues for that
30  *     particular descriptor type.
31  */
32
33 #ifndef __LINUX_USB_CH9_H
34 #define __LINUX_USB_CH9_H
35
36 #include <linux/types.h>        /* __u8 etc */
37
38 /*-------------------------------------------------------------------------*/
39
40 /* CONTROL REQUEST SUPPORT */
41
42 /*
43  * USB directions
44  *
45  * This bit flag is used in endpoint descriptors' bEndpointAddress field.
46  * It's also one of three fields in control requests bRequestType.
47  */
48 #define USB_DIR_OUT                     0               /* to device */
49 #define USB_DIR_IN                      0x80            /* to host */
50
51 /*
52  * USB types, the second of three bRequestType fields
53  */
54 #define USB_TYPE_MASK                   (0x03 << 5)
55 #define USB_TYPE_STANDARD               (0x00 << 5)
56 #define USB_TYPE_CLASS                  (0x01 << 5)
57 #define USB_TYPE_VENDOR                 (0x02 << 5)
58 #define USB_TYPE_RESERVED               (0x03 << 5)
59
60 /*
61  * USB recipients, the third of three bRequestType fields
62  */
63 #define USB_RECIP_MASK                  0x1f
64 #define USB_RECIP_DEVICE                0x00
65 #define USB_RECIP_INTERFACE             0x01
66 #define USB_RECIP_ENDPOINT              0x02
67 #define USB_RECIP_OTHER                 0x03
68 /* From Wireless USB 1.0 */
69 #define USB_RECIP_PORT                  0x04
70 #define USB_RECIP_RPIPE         0x05
71
72 /*
73  * Standard requests, for the bRequest field of a SETUP packet.
74  *
75  * These are qualified by the bRequestType field, so that for example
76  * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved
77  * by a GET_STATUS request.
78  */
79 #define USB_REQ_GET_STATUS              0x00
80 #define USB_REQ_CLEAR_FEATURE           0x01
81 #define USB_REQ_SET_FEATURE             0x03
82 #define USB_REQ_SET_ADDRESS             0x05
83 #define USB_REQ_GET_DESCRIPTOR          0x06
84 #define USB_REQ_SET_DESCRIPTOR          0x07
85 #define USB_REQ_GET_CONFIGURATION       0x08
86 #define USB_REQ_SET_CONFIGURATION       0x09
87 #define USB_REQ_GET_INTERFACE           0x0A
88 #define USB_REQ_SET_INTERFACE           0x0B
89 #define USB_REQ_SYNCH_FRAME             0x0C
90
91 #define USB_REQ_SET_ENCRYPTION          0x0D    /* Wireless USB */
92 #define USB_REQ_GET_ENCRYPTION          0x0E
93 #define USB_REQ_RPIPE_ABORT             0x0E
94 #define USB_REQ_SET_HANDSHAKE           0x0F
95 #define USB_REQ_RPIPE_RESET             0x0F
96 #define USB_REQ_GET_HANDSHAKE           0x10
97 #define USB_REQ_SET_CONNECTION          0x11
98 #define USB_REQ_SET_SECURITY_DATA       0x12
99 #define USB_REQ_GET_SECURITY_DATA       0x13
100 #define USB_REQ_SET_WUSB_DATA           0x14
101 #define USB_REQ_LOOPBACK_DATA_WRITE     0x15
102 #define USB_REQ_LOOPBACK_DATA_READ      0x16
103 #define USB_REQ_SET_INTERFACE_DS        0x17
104
105 /* The Link Power Management (LPM) ECN defines USB_REQ_TEST_AND_SET command,
106  * used by hubs to put ports into a new L1 suspend state, except that it
107  * forgot to define its number ...
108  */
109
110 /*
111  * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and
112  * are read as a bit array returned by USB_REQ_GET_STATUS.  (So there
113  * are at most sixteen features of each type.)  Hubs may also support a
114  * new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend.
115  */
116 #define USB_DEVICE_SELF_POWERED         0       /* (read only) */
117 #define USB_DEVICE_REMOTE_WAKEUP        1       /* dev may initiate wakeup */
118 #define USB_DEVICE_TEST_MODE            2       /* (wired high speed only) */
119 #define USB_DEVICE_BATTERY              2       /* (wireless) */
120 #define USB_DEVICE_B_HNP_ENABLE         3       /* (otg) dev may initiate HNP */
121 #define USB_DEVICE_WUSB_DEVICE          3       /* (wireless)*/
122 #define USB_DEVICE_A_HNP_SUPPORT        4       /* (otg) RH port supports HNP */
123 #define USB_DEVICE_A_ALT_HNP_SUPPORT    5       /* (otg) other RH port does */
124 #define USB_DEVICE_DEBUG_MODE           6       /* (special devices only) */
125
126 /*
127  * Test Mode Selectors
128  * See USB 2.0 spec Table 9-7
129  */
130 #define TEST_J          1
131 #define TEST_K          2
132 #define TEST_SE0_NAK    3
133 #define TEST_PACKET     4
134 #define TEST_FORCE_EN   5
135
136 /*
137  * New Feature Selectors as added by USB 3.0
138  * See USB 3.0 spec Table 9-6
139  */
140 #define USB_DEVICE_U1_ENABLE    48      /* dev may initiate U1 transition */
141 #define USB_DEVICE_U2_ENABLE    49      /* dev may initiate U2 transition */
142 #define USB_DEVICE_LTM_ENABLE   50      /* dev may send LTM */
143 #define USB_INTRF_FUNC_SUSPEND  0       /* function suspend */
144
145 #define USB_INTR_FUNC_SUSPEND_OPT_MASK  0xFF00
146
147 #define USB_ENDPOINT_HALT               0       /* IN/OUT will STALL */
148
149 /* Bit array elements as returned by the USB_REQ_GET_STATUS request. */
150 #define USB_DEV_STAT_U1_ENABLED         2       /* transition into U1 state */
151 #define USB_DEV_STAT_U2_ENABLED         3       /* transition into U2 state */
152 #define USB_DEV_STAT_LTM_ENABLED        4       /* Latency tolerance messages */
153
154 /**
155  * struct usb_ctrlrequest - SETUP data for a USB device control request
156  * @bRequestType: matches the USB bmRequestType field
157  * @bRequest: matches the USB bRequest field
158  * @wValue: matches the USB wValue field (le16 byte order)
159  * @wIndex: matches the USB wIndex field (le16 byte order)
160  * @wLength: matches the USB wLength field (le16 byte order)
161  *
162  * This structure is used to send control requests to a USB device.  It matches
163  * the different fields of the USB 2.0 Spec section 9.3, table 9-2.  See the
164  * USB spec for a fuller description of the different fields, and what they are
165  * used for.
166  *
167  * Note that the driver for any interface can issue control requests.
168  * For most devices, interfaces don't coordinate with each other, so
169  * such requests may be made at any time.
170  */
171 struct usb_ctrlrequest {
172         __u8 bRequestType;
173         __u8 bRequest;
174         __le16 wValue;
175         __le16 wIndex;
176         __le16 wLength;
177 } __attribute__ ((packed));
178
179 /*-------------------------------------------------------------------------*/
180
181 /*
182  * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or
183  * (rarely) accepted by SET_DESCRIPTOR.
184  *
185  * Note that all multi-byte values here are encoded in little endian
186  * byte order "on the wire".  Within the kernel and when exposed
187  * through the Linux-USB APIs, they are not converted to cpu byte
188  * order; it is the responsibility of the client code to do this.
189  * The single exception is when device and configuration descriptors (but
190  * not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD);
191  * in this case the fields are converted to host endianness by the kernel.
192  */
193
194 /*
195  * Descriptor types ... USB 2.0 spec table 9.5
196  */
197 #define USB_DT_DEVICE                   0x01
198 #define USB_DT_CONFIG                   0x02
199 #define USB_DT_STRING                   0x03
200 #define USB_DT_INTERFACE                0x04
201 #define USB_DT_ENDPOINT                 0x05
202 #define USB_DT_DEVICE_QUALIFIER         0x06
203 #define USB_DT_OTHER_SPEED_CONFIG       0x07
204 #define USB_DT_INTERFACE_POWER          0x08
205 /* these are from a minor usb 2.0 revision (ECN) */
206 #define USB_DT_OTG                      0x09
207 #define USB_DT_DEBUG                    0x0a
208 #define USB_DT_INTERFACE_ASSOCIATION    0x0b
209 /* these are from the Wireless USB spec */
210 #define USB_DT_SECURITY                 0x0c
211 #define USB_DT_KEY                      0x0d
212 #define USB_DT_ENCRYPTION_TYPE          0x0e
213 #define USB_DT_BOS                      0x0f
214 #define USB_DT_DEVICE_CAPABILITY        0x10
215 #define USB_DT_WIRELESS_ENDPOINT_COMP   0x11
216 #define USB_DT_WIRE_ADAPTER             0x21
217 #define USB_DT_RPIPE                    0x22
218 #define USB_DT_CS_RADIO_CONTROL         0x23
219 /* From the T10 UAS specification */
220 #define USB_DT_PIPE_USAGE               0x24
221 /* From the USB 3.0 spec */
222 #define USB_DT_SS_ENDPOINT_COMP         0x30
223
224 /* Conventional codes for class-specific descriptors.  The convention is
225  * defined in the USB "Common Class" Spec (3.11).  Individual class specs
226  * are authoritative for their usage, not the "common class" writeup.
227  */
228 #define USB_DT_CS_DEVICE                (USB_TYPE_CLASS | USB_DT_DEVICE)
229 #define USB_DT_CS_CONFIG                (USB_TYPE_CLASS | USB_DT_CONFIG)
230 #define USB_DT_CS_STRING                (USB_TYPE_CLASS | USB_DT_STRING)
231 #define USB_DT_CS_INTERFACE             (USB_TYPE_CLASS | USB_DT_INTERFACE)
232 #define USB_DT_CS_ENDPOINT              (USB_TYPE_CLASS | USB_DT_ENDPOINT)
233
234 /* All standard descriptors have these 2 fields at the beginning */
235 struct usb_descriptor_header {
236         __u8  bLength;
237         __u8  bDescriptorType;
238 } __attribute__ ((packed));
239
240
241 /*-------------------------------------------------------------------------*/
242
243 /* USB_DT_DEVICE: Device descriptor */
244 struct usb_device_descriptor {
245         __u8  bLength;
246         __u8  bDescriptorType;
247
248         __le16 bcdUSB;
249         __u8  bDeviceClass;
250         __u8  bDeviceSubClass;
251         __u8  bDeviceProtocol;
252         __u8  bMaxPacketSize0;
253         __le16 idVendor;
254         __le16 idProduct;
255         __le16 bcdDevice;
256         __u8  iManufacturer;
257         __u8  iProduct;
258         __u8  iSerialNumber;
259         __u8  bNumConfigurations;
260 } __attribute__ ((packed));
261
262 #define USB_DT_DEVICE_SIZE              18
263
264
265 /*
266  * Device and/or Interface Class codes
267  * as found in bDeviceClass or bInterfaceClass
268  * and defined by www.usb.org documents
269  */
270 #define USB_CLASS_PER_INTERFACE         0       /* for DeviceClass */
271 #define USB_CLASS_AUDIO                 1
272 #define USB_CLASS_COMM                  2
273 #define USB_CLASS_HID                   3
274 #define USB_CLASS_PHYSICAL              5
275 #define USB_CLASS_STILL_IMAGE           6
276 #define USB_CLASS_PRINTER               7
277 #define USB_CLASS_MASS_STORAGE          8
278 #define USB_CLASS_HUB                   9
279 #define USB_CLASS_CDC_DATA              0x0a
280 #define USB_CLASS_CSCID                 0x0b    /* chip+ smart card */
281 #define USB_CLASS_CONTENT_SEC           0x0d    /* content security */
282 #define USB_CLASS_VIDEO                 0x0e
283 #define USB_CLASS_WIRELESS_CONTROLLER   0xe0
284 #define USB_CLASS_MISC                  0xef
285 #define USB_CLASS_APP_SPEC              0xfe
286 #define USB_CLASS_VENDOR_SPEC           0xff
287
288 #define USB_SUBCLASS_VENDOR_SPEC        0xff
289
290 /*-------------------------------------------------------------------------*/
291
292 /* USB_DT_CONFIG: Configuration descriptor information.
293  *
294  * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the
295  * descriptor type is different.  Highspeed-capable devices can look
296  * different depending on what speed they're currently running.  Only
297  * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG
298  * descriptors.
299  */
300 struct usb_config_descriptor {
301         __u8  bLength;
302         __u8  bDescriptorType;
303
304         __le16 wTotalLength;
305         __u8  bNumInterfaces;
306         __u8  bConfigurationValue;
307         __u8  iConfiguration;
308         __u8  bmAttributes;
309         __u8  bMaxPower;
310 } __attribute__ ((packed));
311
312 #define USB_DT_CONFIG_SIZE              9
313
314 /* from config descriptor bmAttributes */
315 #define USB_CONFIG_ATT_ONE              (1 << 7)        /* must be set */
316 #define USB_CONFIG_ATT_SELFPOWER        (1 << 6)        /* self powered */
317 #define USB_CONFIG_ATT_WAKEUP           (1 << 5)        /* can wakeup */
318 #define USB_CONFIG_ATT_BATTERY          (1 << 4)        /* battery powered */
319
320 /*-------------------------------------------------------------------------*/
321
322 /* USB_DT_STRING: String descriptor */
323 struct usb_string_descriptor {
324         __u8  bLength;
325         __u8  bDescriptorType;
326
327         __le16 wData[1];                /* UTF-16LE encoded */
328 } __attribute__ ((packed));
329
330 /* note that "string" zero is special, it holds language codes that
331  * the device supports, not Unicode characters.
332  */
333
334 /*-------------------------------------------------------------------------*/
335
336 /* USB_DT_INTERFACE: Interface descriptor */
337 struct usb_interface_descriptor {
338         __u8  bLength;
339         __u8  bDescriptorType;
340
341         __u8  bInterfaceNumber;
342         __u8  bAlternateSetting;
343         __u8  bNumEndpoints;
344         __u8  bInterfaceClass;
345         __u8  bInterfaceSubClass;
346         __u8  bInterfaceProtocol;
347         __u8  iInterface;
348 } __attribute__ ((packed));
349
350 #define USB_DT_INTERFACE_SIZE           9
351
352 /*-------------------------------------------------------------------------*/
353
354 /* USB_DT_ENDPOINT: Endpoint descriptor */
355 struct usb_endpoint_descriptor {
356         __u8  bLength;
357         __u8  bDescriptorType;
358
359         __u8  bEndpointAddress;
360         __u8  bmAttributes;
361         __le16 wMaxPacketSize;
362         __u8  bInterval;
363
364         /* NOTE:  these two are _only_ in audio endpoints. */
365         /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
366         __u8  bRefresh;
367         __u8  bSynchAddress;
368 } __attribute__ ((packed));
369
370 #define USB_DT_ENDPOINT_SIZE            7
371 #define USB_DT_ENDPOINT_AUDIO_SIZE      9       /* Audio extension */
372
373
374 /*
375  * Endpoints
376  */
377 #define USB_ENDPOINT_NUMBER_MASK        0x0f    /* in bEndpointAddress */
378 #define USB_ENDPOINT_DIR_MASK           0x80
379
380 #define USB_ENDPOINT_SYNCTYPE           0x0c
381 #define USB_ENDPOINT_SYNC_NONE          (0 << 2)
382 #define USB_ENDPOINT_SYNC_ASYNC         (1 << 2)
383 #define USB_ENDPOINT_SYNC_ADAPTIVE      (2 << 2)
384 #define USB_ENDPOINT_SYNC_SYNC          (3 << 2)
385
386 #define USB_ENDPOINT_XFERTYPE_MASK      0x03    /* in bmAttributes */
387 #define USB_ENDPOINT_XFER_CONTROL       0
388 #define USB_ENDPOINT_XFER_ISOC          1
389 #define USB_ENDPOINT_XFER_BULK          2
390 #define USB_ENDPOINT_XFER_INT           3
391 #define USB_ENDPOINT_MAX_ADJUSTABLE     0x80
392
393 /*-------------------------------------------------------------------------*/
394
395 /**
396  * usb_endpoint_num - get the endpoint's number
397  * @epd: endpoint to be checked
398  *
399  * Returns @epd's number: 0 to 15.
400  */
401 static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
402 {
403         return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
404 }
405
406 /**
407  * usb_endpoint_type - get the endpoint's transfer type
408  * @epd: endpoint to be checked
409  *
410  * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according
411  * to @epd's transfer type.
412  */
413 static inline int usb_endpoint_type(const struct usb_endpoint_descriptor *epd)
414 {
415         return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
416 }
417
418 /**
419  * usb_endpoint_dir_in - check if the endpoint has IN direction
420  * @epd: endpoint to be checked
421  *
422  * Returns true if the endpoint is of type IN, otherwise it returns false.
423  */
424 static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
425 {
426         return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
427 }
428
429 /**
430  * usb_endpoint_dir_out - check if the endpoint has OUT direction
431  * @epd: endpoint to be checked
432  *
433  * Returns true if the endpoint is of type OUT, otherwise it returns false.
434  */
435 static inline int usb_endpoint_dir_out(
436                                 const struct usb_endpoint_descriptor *epd)
437 {
438         return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
439 }
440
441 /**
442  * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type
443  * @epd: endpoint to be checked
444  *
445  * Returns true if the endpoint is of type bulk, otherwise it returns false.
446  */
447 static inline int usb_endpoint_xfer_bulk(
448                                 const struct usb_endpoint_descriptor *epd)
449 {
450         return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
451                 USB_ENDPOINT_XFER_BULK);
452 }
453
454 /**
455  * usb_endpoint_xfer_control - check if the endpoint has control transfer type
456  * @epd: endpoint to be checked
457  *
458  * Returns true if the endpoint is of type control, otherwise it returns false.
459  */
460 static inline int usb_endpoint_xfer_control(
461                                 const struct usb_endpoint_descriptor *epd)
462 {
463         return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
464                 USB_ENDPOINT_XFER_CONTROL);
465 }
466
467 /**
468  * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type
469  * @epd: endpoint to be checked
470  *
471  * Returns true if the endpoint is of type interrupt, otherwise it returns
472  * false.
473  */
474 static inline int usb_endpoint_xfer_int(
475                                 const struct usb_endpoint_descriptor *epd)
476 {
477         return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
478                 USB_ENDPOINT_XFER_INT);
479 }
480
481 /**
482  * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type
483  * @epd: endpoint to be checked
484  *
485  * Returns true if the endpoint is of type isochronous, otherwise it returns
486  * false.
487  */
488 static inline int usb_endpoint_xfer_isoc(
489                                 const struct usb_endpoint_descriptor *epd)
490 {
491         return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
492                 USB_ENDPOINT_XFER_ISOC);
493 }
494
495 /**
496  * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN
497  * @epd: endpoint to be checked
498  *
499  * Returns true if the endpoint has bulk transfer type and IN direction,
500  * otherwise it returns false.
501  */
502 static inline int usb_endpoint_is_bulk_in(
503                                 const struct usb_endpoint_descriptor *epd)
504 {
505         return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd);
506 }
507
508 /**
509  * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT
510  * @epd: endpoint to be checked
511  *
512  * Returns true if the endpoint has bulk transfer type and OUT direction,
513  * otherwise it returns false.
514  */
515 static inline int usb_endpoint_is_bulk_out(
516                                 const struct usb_endpoint_descriptor *epd)
517 {
518         return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd);
519 }
520
521 /**
522  * usb_endpoint_is_int_in - check if the endpoint is interrupt IN
523  * @epd: endpoint to be checked
524  *
525  * Returns true if the endpoint has interrupt transfer type and IN direction,
526  * otherwise it returns false.
527  */
528 static inline int usb_endpoint_is_int_in(
529                                 const struct usb_endpoint_descriptor *epd)
530 {
531         return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd);
532 }
533
534 /**
535  * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT
536  * @epd: endpoint to be checked
537  *
538  * Returns true if the endpoint has interrupt transfer type and OUT direction,
539  * otherwise it returns false.
540  */
541 static inline int usb_endpoint_is_int_out(
542                                 const struct usb_endpoint_descriptor *epd)
543 {
544         return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd);
545 }
546
547 /**
548  * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN
549  * @epd: endpoint to be checked
550  *
551  * Returns true if the endpoint has isochronous transfer type and IN direction,
552  * otherwise it returns false.
553  */
554 static inline int usb_endpoint_is_isoc_in(
555                                 const struct usb_endpoint_descriptor *epd)
556 {
557         return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd);
558 }
559
560 /**
561  * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT
562  * @epd: endpoint to be checked
563  *
564  * Returns true if the endpoint has isochronous transfer type and OUT direction,
565  * otherwise it returns false.
566  */
567 static inline int usb_endpoint_is_isoc_out(
568                                 const struct usb_endpoint_descriptor *epd)
569 {
570         return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd);
571 }
572
573 /*-------------------------------------------------------------------------*/
574
575 /* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */
576 struct usb_ss_ep_comp_descriptor {
577         __u8  bLength;
578         __u8  bDescriptorType;
579
580         __u8  bMaxBurst;
581         __u8  bmAttributes;
582         __u16 wBytesPerInterval;
583 } __attribute__ ((packed));
584
585 #define USB_DT_SS_EP_COMP_SIZE          6
586 /* Bits 4:0 of bmAttributes if this is a bulk endpoint */
587 #define USB_SS_MAX_STREAMS(p)           (1 << (p & 0x1f))
588 /* Bits 1:0 of bmAttributes if this is an isoc endpoint */
589 #define USB_SS_MULT(p)                  (1 + ((p) & 0x3))
590
591 /*-------------------------------------------------------------------------*/
592
593 /* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */
594 struct usb_qualifier_descriptor {
595         __u8  bLength;
596         __u8  bDescriptorType;
597
598         __le16 bcdUSB;
599         __u8  bDeviceClass;
600         __u8  bDeviceSubClass;
601         __u8  bDeviceProtocol;
602         __u8  bMaxPacketSize0;
603         __u8  bNumConfigurations;
604         __u8  bRESERVED;
605 } __attribute__ ((packed));
606
607
608 /*-------------------------------------------------------------------------*/
609
610 /* USB_DT_OTG (from OTG 1.0a supplement) */
611 struct usb_otg_descriptor {
612         __u8  bLength;
613         __u8  bDescriptorType;
614
615         __u8  bmAttributes;     /* support for HNP, SRP, etc */
616 } __attribute__ ((packed));
617
618 /* from usb_otg_descriptor.bmAttributes */
619 #define USB_OTG_SRP             (1 << 0)
620 #define USB_OTG_HNP             (1 << 1)        /* swap host/device roles */
621
622 /*-------------------------------------------------------------------------*/
623
624 /* USB_DT_DEBUG:  for special highspeed devices, replacing serial console */
625 struct usb_debug_descriptor {
626         __u8  bLength;
627         __u8  bDescriptorType;
628
629         /* bulk endpoints with 8 byte maxpacket */
630         __u8  bDebugInEndpoint;
631         __u8  bDebugOutEndpoint;
632 } __attribute__((packed));
633
634 /*-------------------------------------------------------------------------*/
635
636 /* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */
637 struct usb_interface_assoc_descriptor {
638         __u8  bLength;
639         __u8  bDescriptorType;
640
641         __u8  bFirstInterface;
642         __u8  bInterfaceCount;
643         __u8  bFunctionClass;
644         __u8  bFunctionSubClass;
645         __u8  bFunctionProtocol;
646         __u8  iFunction;
647 } __attribute__ ((packed));
648
649
650 /*-------------------------------------------------------------------------*/
651
652 /* USB_DT_SECURITY:  group of wireless security descriptors, including
653  * encryption types available for setting up a CC/association.
654  */
655 struct usb_security_descriptor {
656         __u8  bLength;
657         __u8  bDescriptorType;
658
659         __le16 wTotalLength;
660         __u8  bNumEncryptionTypes;
661 } __attribute__((packed));
662
663 /*-------------------------------------------------------------------------*/
664
665 /* USB_DT_KEY:  used with {GET,SET}_SECURITY_DATA; only public keys
666  * may be retrieved.
667  */
668 struct usb_key_descriptor {
669         __u8  bLength;
670         __u8  bDescriptorType;
671
672         __u8  tTKID[3];
673         __u8  bReserved;
674         __u8  bKeyData[0];
675 } __attribute__((packed));
676
677 /*-------------------------------------------------------------------------*/
678
679 /* USB_DT_ENCRYPTION_TYPE:  bundled in DT_SECURITY groups */
680 struct usb_encryption_descriptor {
681         __u8  bLength;
682         __u8  bDescriptorType;
683
684         __u8  bEncryptionType;
685 #define USB_ENC_TYPE_UNSECURE           0
686 #define USB_ENC_TYPE_WIRED              1       /* non-wireless mode */
687 #define USB_ENC_TYPE_CCM_1              2       /* aes128/cbc session */
688 #define USB_ENC_TYPE_RSA_1              3       /* rsa3072/sha1 auth */
689         __u8  bEncryptionValue;         /* use in SET_ENCRYPTION */
690         __u8  bAuthKeyIndex;
691 } __attribute__((packed));
692
693
694 /*-------------------------------------------------------------------------*/
695
696 /* USB_DT_BOS:  group of device-level capabilities */
697 struct usb_bos_descriptor {
698         __u8  bLength;
699         __u8  bDescriptorType;
700
701         __le16 wTotalLength;
702         __u8  bNumDeviceCaps;
703 } __attribute__((packed));
704
705 #define USB_DT_BOS_SIZE         5
706 /*-------------------------------------------------------------------------*/
707
708 /* USB_DT_DEVICE_CAPABILITY:  grouped with BOS */
709 struct usb_dev_cap_header {
710         __u8  bLength;
711         __u8  bDescriptorType;
712         __u8  bDevCapabilityType;
713 } __attribute__((packed));
714
715 #define USB_CAP_TYPE_WIRELESS_USB       1
716
717 struct usb_wireless_cap_descriptor {    /* Ultra Wide Band */
718         __u8  bLength;
719         __u8  bDescriptorType;
720         __u8  bDevCapabilityType;
721
722         __u8  bmAttributes;
723 #define USB_WIRELESS_P2P_DRD            (1 << 1)
724 #define USB_WIRELESS_BEACON_MASK        (3 << 2)
725 #define USB_WIRELESS_BEACON_SELF        (1 << 2)
726 #define USB_WIRELESS_BEACON_DIRECTED    (2 << 2)
727 #define USB_WIRELESS_BEACON_NONE        (3 << 2)
728         __le16 wPHYRates;       /* bit rates, Mbps */
729 #define USB_WIRELESS_PHY_53             (1 << 0)        /* always set */
730 #define USB_WIRELESS_PHY_80             (1 << 1)
731 #define USB_WIRELESS_PHY_107            (1 << 2)        /* always set */
732 #define USB_WIRELESS_PHY_160            (1 << 3)
733 #define USB_WIRELESS_PHY_200            (1 << 4)        /* always set */
734 #define USB_WIRELESS_PHY_320            (1 << 5)
735 #define USB_WIRELESS_PHY_400            (1 << 6)
736 #define USB_WIRELESS_PHY_480            (1 << 7)
737         __u8  bmTFITXPowerInfo; /* TFI power levels */
738         __u8  bmFFITXPowerInfo; /* FFI power levels */
739         __le16 bmBandGroup;
740         __u8  bReserved;
741 } __attribute__((packed));
742
743 /* USB 2.0 Extension descriptor */
744 #define USB_CAP_TYPE_EXT                2
745
746 struct usb_ext_cap_descriptor {         /* Link Power Management */
747         __u8  bLength;
748         __u8  bDescriptorType;
749         __u8  bDevCapabilityType;
750         __le32 bmAttributes;
751 #define USB_LPM_SUPPORT                 (1 << 1)        /* supports LPM */
752 } __attribute__((packed));
753
754 #define USB_DT_USB_EXT_CAP_SIZE 7
755
756 /*
757  * SuperSpeed USB Capability descriptor: Defines the set of SuperSpeed USB
758  * specific device level capabilities
759  */
760 #define         USB_SS_CAP_TYPE         3
761 struct usb_ss_cap_descriptor {          /* Link Power Management */
762         __u8  bLength;
763         __u8  bDescriptorType;
764         __u8  bDevCapabilityType;
765         __u8  bmAttributes;
766 #define USB_LTM_SUPPORT                 (1 << 1) /* supports LTM */
767         __le16 wSpeedSupported;
768 #define USB_LOW_SPEED_OPERATION         (1)      /* Low speed operation */
769 #define USB_FULL_SPEED_OPERATION        (1 << 1) /* Full speed operation */
770 #define USB_HIGH_SPEED_OPERATION        (1 << 2) /* High speed operation */
771 #define USB_5GBPS_OPERATION             (1 << 3) /* Operation at 5Gbps */
772         __u8  bFunctionalitySupport;
773         __u8  bU1devExitLat;
774         __le16 bU2DevExitLat;
775 } __attribute__((packed));
776
777 #define USB_DT_USB_SS_CAP_SIZE  10
778
779 /*
780  * Container ID Capability descriptor: Defines the instance unique ID used to
781  * identify the instance across all operating modes
782  */
783 #define CONTAINER_ID_TYPE       4
784 struct usb_ss_container_id_descriptor {
785         __u8  bLength;
786         __u8  bDescriptorType;
787         __u8  bDevCapabilityType;
788         __u8  bReserved;
789         __u8  ContainerID[16]; /* 128-bit number */
790 } __attribute__((packed));
791
792 #define USB_DT_USB_SS_CONTN_ID_SIZE     20
793 /*-------------------------------------------------------------------------*/
794
795 /* USB_DT_WIRELESS_ENDPOINT_COMP:  companion descriptor associated with
796  * each endpoint descriptor for a wireless device
797  */
798 struct usb_wireless_ep_comp_descriptor {
799         __u8  bLength;
800         __u8  bDescriptorType;
801
802         __u8  bMaxBurst;
803         __u8  bMaxSequence;
804         __le16 wMaxStreamDelay;
805         __le16 wOverTheAirPacketSize;
806         __u8  bOverTheAirInterval;
807         __u8  bmCompAttributes;
808 #define USB_ENDPOINT_SWITCH_MASK        0x03    /* in bmCompAttributes */
809 #define USB_ENDPOINT_SWITCH_NO          0
810 #define USB_ENDPOINT_SWITCH_SWITCH      1
811 #define USB_ENDPOINT_SWITCH_SCALE       2
812 } __attribute__((packed));
813
814 /*-------------------------------------------------------------------------*/
815
816 /* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless
817  * host and a device for connection set up, mutual authentication, and
818  * exchanging short lived session keys.  The handshake depends on a CC.
819  */
820 struct usb_handshake {
821         __u8 bMessageNumber;
822         __u8 bStatus;
823         __u8 tTKID[3];
824         __u8 bReserved;
825         __u8 CDID[16];
826         __u8 nonce[16];
827         __u8 MIC[8];
828 } __attribute__((packed));
829
830 /*-------------------------------------------------------------------------*/
831
832 /* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC).
833  * A CC may also be set up using non-wireless secure channels (including
834  * wired USB!), and some devices may support CCs with multiple hosts.
835  */
836 struct usb_connection_context {
837         __u8 CHID[16];          /* persistent host id */
838         __u8 CDID[16];          /* device id (unique w/in host context) */
839         __u8 CK[16];            /* connection key */
840 } __attribute__((packed));
841
842 /*-------------------------------------------------------------------------*/
843
844 /* USB 2.0 defines three speeds, here's how Linux identifies them */
845
846 enum usb_device_speed {
847         USB_SPEED_UNKNOWN = 0,                  /* enumerating */
848         USB_SPEED_LOW, USB_SPEED_FULL,          /* usb 1.1 */
849         USB_SPEED_HIGH,                         /* usb 2.0 */
850         USB_SPEED_WIRELESS,                     /* wireless (usb 2.5) */
851         USB_SPEED_SUPER,                        /* usb 3.0 */
852 };
853
854 enum usb_device_state {
855         /* NOTATTACHED isn't in the USB spec, and this state acts
856          * the same as ATTACHED ... but it's clearer this way.
857          */
858         USB_STATE_NOTATTACHED = 0,
859
860         /* chapter 9 and authentication (wireless) device states */
861         USB_STATE_ATTACHED,
862         USB_STATE_POWERED,                      /* wired */
863         USB_STATE_RECONNECTING,                 /* auth */
864         USB_STATE_UNAUTHENTICATED,              /* auth */
865         USB_STATE_DEFAULT,                      /* limited function */
866         USB_STATE_ADDRESS,
867         USB_STATE_CONFIGURED,                   /* most functions */
868
869         USB_STATE_SUSPENDED
870
871         /* NOTE:  there are actually four different SUSPENDED
872          * states, returning to POWERED, DEFAULT, ADDRESS, or
873          * CONFIGURED respectively when SOF tokens flow again.
874          * At this level there's no difference between L1 and L2
875          * suspend states.  (L2 being original USB 1.1 suspend.)
876          */
877 };
878
879 /*-------------------------------------------------------------------------*/
880
881 /*
882  * As per USB compliance update, a device that is actively drawing
883  * more than 100mA from USB must report itself as bus-powered in
884  * the GetStatus(DEVICE) call.
885  * http://compliance.usb.org/index.asp?UpdateFile=Electrical&Format=Standard#34
886  */
887 #define USB_SELF_POWER_VBUS_MAX_DRAW            100
888
889 #endif /* __LINUX_USB_CH9_H */