1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33#ifndef __LINUX_USB_CH9_H
34#define __LINUX_USB_CH9_H
35
36#include <linux/types.h>
37#include <asm/byteorder.h>
38#include <asm/unaligned.h>
39
40
41
42
43
44
45
46
47
48
49
50#define USB_DIR_OUT 0
51#define USB_DIR_IN 0x80
52
53
54
55
56#define USB_TYPE_MASK (0x03 << 5)
57#define USB_TYPE_STANDARD (0x00 << 5)
58#define USB_TYPE_CLASS (0x01 << 5)
59#define USB_TYPE_VENDOR (0x02 << 5)
60#define USB_TYPE_RESERVED (0x03 << 5)
61
62
63
64
65#define USB_RECIP_MASK 0x1f
66#define USB_RECIP_DEVICE 0x00
67#define USB_RECIP_INTERFACE 0x01
68#define USB_RECIP_ENDPOINT 0x02
69#define USB_RECIP_OTHER 0x03
70
71#define USB_RECIP_PORT 0x04
72#define USB_RECIP_RPIPE 0x05
73
74
75
76
77
78
79
80
81#define USB_REQ_GET_STATUS 0x00
82#define USB_REQ_CLEAR_FEATURE 0x01
83#define USB_REQ_SET_FEATURE 0x03
84#define USB_REQ_SET_ADDRESS 0x05
85#define USB_REQ_GET_DESCRIPTOR 0x06
86#define USB_REQ_SET_DESCRIPTOR 0x07
87#define USB_REQ_GET_CONFIGURATION 0x08
88#define USB_REQ_SET_CONFIGURATION 0x09
89#define USB_REQ_GET_INTERFACE 0x0A
90#define USB_REQ_SET_INTERFACE 0x0B
91#define USB_REQ_SYNCH_FRAME 0x0C
92#define USB_REQ_SET_SEL 0x30
93#define USB_REQ_SET_ISOCH_DELAY 0x31
94
95#define USB_REQ_SET_ENCRYPTION 0x0D
96#define USB_REQ_GET_ENCRYPTION 0x0E
97#define USB_REQ_RPIPE_ABORT 0x0E
98#define USB_REQ_SET_HANDSHAKE 0x0F
99#define USB_REQ_RPIPE_RESET 0x0F
100#define USB_REQ_GET_HANDSHAKE 0x10
101#define USB_REQ_SET_CONNECTION 0x11
102#define USB_REQ_SET_SECURITY_DATA 0x12
103#define USB_REQ_GET_SECURITY_DATA 0x13
104#define USB_REQ_SET_WUSB_DATA 0x14
105#define USB_REQ_LOOPBACK_DATA_WRITE 0x15
106#define USB_REQ_LOOPBACK_DATA_READ 0x16
107#define USB_REQ_SET_INTERFACE_DS 0x17
108
109
110
111
112
113
114
115
116
117
118
119
120#define USB_DEVICE_SELF_POWERED 0
121#define USB_DEVICE_REMOTE_WAKEUP 1
122#define USB_DEVICE_TEST_MODE 2
123#define USB_DEVICE_BATTERY 2
124#define USB_DEVICE_B_HNP_ENABLE 3
125#define USB_DEVICE_WUSB_DEVICE 3
126#define USB_DEVICE_A_HNP_SUPPORT 4
127#define USB_DEVICE_A_ALT_HNP_SUPPORT 5
128#define USB_DEVICE_DEBUG_MODE 6
129
130
131
132
133
134#define TEST_J 1
135#define TEST_K 2
136#define TEST_SE0_NAK 3
137#define TEST_PACKET 4
138#define TEST_FORCE_EN 5
139
140
141
142
143
144#define USB_DEVICE_U1_ENABLE 48
145#define USB_DEVICE_U2_ENABLE 49
146#define USB_DEVICE_LTM_ENABLE 50
147#define USB_INTRF_FUNC_SUSPEND 0
148
149#define USB_INTR_FUNC_SUSPEND_OPT_MASK 0xFF00
150
151
152
153#define USB_INTRF_FUNC_SUSPEND_LP (1 << (8 + 0))
154#define USB_INTRF_FUNC_SUSPEND_RW (1 << (8 + 1))
155
156#define USB_ENDPOINT_HALT 0
157
158
159#define USB_DEV_STAT_U1_ENABLED 2
160#define USB_DEV_STAT_U2_ENABLED 3
161#define USB_DEV_STAT_LTM_ENABLED 4
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180struct usb_ctrlrequest {
181 __u8 bRequestType;
182 __u8 bRequest;
183 __le16 wValue;
184 __le16 wIndex;
185 __le16 wLength;
186} __attribute__ ((packed));
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206#define USB_DT_DEVICE 0x01
207#define USB_DT_CONFIG 0x02
208#define USB_DT_STRING 0x03
209#define USB_DT_INTERFACE 0x04
210#define USB_DT_ENDPOINT 0x05
211#define USB_DT_DEVICE_QUALIFIER 0x06
212#define USB_DT_OTHER_SPEED_CONFIG 0x07
213#define USB_DT_INTERFACE_POWER 0x08
214
215#define USB_DT_OTG 0x09
216#define USB_DT_DEBUG 0x0a
217#define USB_DT_INTERFACE_ASSOCIATION 0x0b
218
219#define USB_DT_SECURITY 0x0c
220#define USB_DT_KEY 0x0d
221#define USB_DT_ENCRYPTION_TYPE 0x0e
222#define USB_DT_BOS 0x0f
223#define USB_DT_DEVICE_CAPABILITY 0x10
224#define USB_DT_WIRELESS_ENDPOINT_COMP 0x11
225#define USB_DT_WIRE_ADAPTER 0x21
226#define USB_DT_RPIPE 0x22
227#define USB_DT_CS_RADIO_CONTROL 0x23
228
229#define USB_DT_PIPE_USAGE 0x24
230
231#define USB_DT_SS_ENDPOINT_COMP 0x30
232
233#define USB_DT_HID_REPORT 0x22
234
235
236
237
238
239#define USB_DT_CS_DEVICE (USB_TYPE_CLASS | USB_DT_DEVICE)
240#define USB_DT_CS_CONFIG (USB_TYPE_CLASS | USB_DT_CONFIG)
241#define USB_DT_CS_STRING (USB_TYPE_CLASS | USB_DT_STRING)
242#define USB_DT_CS_INTERFACE (USB_TYPE_CLASS | USB_DT_INTERFACE)
243#define USB_DT_CS_ENDPOINT (USB_TYPE_CLASS | USB_DT_ENDPOINT)
244
245
246struct usb_descriptor_header {
247 __u8 bLength;
248 __u8 bDescriptorType;
249} __attribute__ ((packed));
250
251
252
253
254
255struct usb_device_descriptor {
256 __u8 bLength;
257 __u8 bDescriptorType;
258
259 __le16 bcdUSB;
260 __u8 bDeviceClass;
261 __u8 bDeviceSubClass;
262 __u8 bDeviceProtocol;
263 __u8 bMaxPacketSize0;
264 __le16 idVendor;
265 __le16 idProduct;
266 __le16 bcdDevice;
267 __u8 iManufacturer;
268 __u8 iProduct;
269 __u8 iSerialNumber;
270 __u8 bNumConfigurations;
271} __attribute__ ((packed));
272
273#define USB_DT_DEVICE_SIZE 18
274
275
276
277
278
279
280
281#define USB_CLASS_PER_INTERFACE 0
282#define USB_CLASS_AUDIO 1
283#define USB_CLASS_COMM 2
284#define USB_CLASS_HID 3
285#define USB_CLASS_PHYSICAL 5
286#define USB_CLASS_STILL_IMAGE 6
287#define USB_CLASS_PRINTER 7
288#define USB_CLASS_MASS_STORAGE 8
289#define USB_CLASS_HUB 9
290#define USB_CLASS_CDC_DATA 0x0a
291#define USB_CLASS_CSCID 0x0b
292#define USB_CLASS_CONTENT_SEC 0x0d
293#define USB_CLASS_VIDEO 0x0e
294#define USB_CLASS_WIRELESS_CONTROLLER 0xe0
295#define USB_CLASS_MISC 0xef
296#define USB_CLASS_APP_SPEC 0xfe
297#define USB_CLASS_VENDOR_SPEC 0xff
298
299#define USB_SUBCLASS_VENDOR_SPEC 0xff
300
301
302
303
304
305
306
307
308
309
310
311struct usb_config_descriptor {
312 __u8 bLength;
313 __u8 bDescriptorType;
314
315 __le16 wTotalLength;
316 __u8 bNumInterfaces;
317 __u8 bConfigurationValue;
318 __u8 iConfiguration;
319 __u8 bmAttributes;
320 __u8 bMaxPower;
321} __attribute__ ((packed));
322
323#define USB_DT_CONFIG_SIZE 9
324
325
326#define USB_CONFIG_ATT_ONE (1 << 7)
327#define USB_CONFIG_ATT_SELFPOWER (1 << 6)
328#define USB_CONFIG_ATT_WAKEUP (1 << 5)
329#define USB_CONFIG_ATT_BATTERY (1 << 4)
330
331
332
333
334struct usb_string_descriptor {
335 __u8 bLength;
336 __u8 bDescriptorType;
337
338 __le16 wData[1];
339} __attribute__ ((packed));
340
341
342
343
344
345
346
347
348struct usb_interface_descriptor {
349 __u8 bLength;
350 __u8 bDescriptorType;
351
352 __u8 bInterfaceNumber;
353 __u8 bAlternateSetting;
354 __u8 bNumEndpoints;
355 __u8 bInterfaceClass;
356 __u8 bInterfaceSubClass;
357 __u8 bInterfaceProtocol;
358 __u8 iInterface;
359} __attribute__ ((packed));
360
361#define USB_DT_INTERFACE_SIZE 9
362
363
364
365
366struct usb_endpoint_descriptor {
367 __u8 bLength;
368 __u8 bDescriptorType;
369
370 __u8 bEndpointAddress;
371 __u8 bmAttributes;
372 __le16 wMaxPacketSize;
373 __u8 bInterval;
374
375
376
377 __u8 bRefresh;
378 __u8 bSynchAddress;
379} __attribute__ ((packed));
380
381#define USB_DT_ENDPOINT_SIZE 7
382#define USB_DT_ENDPOINT_AUDIO_SIZE 9
383
384
385struct usb_generic_descriptor {
386 __u8 bLength;
387 __u8 bDescriptorType;
388};
389
390struct __packed usb_class_hid_descriptor {
391 u8 bLength;
392 u8 bDescriptorType;
393 u16 bcdCDC;
394 u8 bCountryCode;
395 u8 bNumDescriptors;
396 u8 bDescriptorType0;
397 u16 wDescriptorLength0;
398
399};
400
401struct __packed usb_class_report_descriptor {
402 u8 bLength;
403 u8 bDescriptorType;
404 u16 wLength;
405 u8 bData[0];
406};
407
408
409
410
411#define USB_ENDPOINT_NUMBER_MASK 0x0f
412#define USB_ENDPOINT_DIR_MASK 0x80
413
414#define USB_ENDPOINT_XFERTYPE_MASK 0x03
415#define USB_ENDPOINT_XFER_CONTROL 0
416#define USB_ENDPOINT_XFER_ISOC 1
417#define USB_ENDPOINT_XFER_BULK 2
418#define USB_ENDPOINT_XFER_INT 3
419#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80
420
421#define USB_ENDPOINT_MAXP_MASK 0x07ff
422#define USB_EP_MAXP_MULT_SHIFT 11
423#define USB_EP_MAXP_MULT_MASK (3 << USB_EP_MAXP_MULT_SHIFT)
424#define USB_EP_MAXP_MULT(m) \
425 (((m) & USB_EP_MAXP_MULT_MASK) >> USB_EP_MAXP_MULT_SHIFT)
426
427
428#define USB_ENDPOINT_INTRTYPE 0x30
429#define USB_ENDPOINT_INTR_PERIODIC (0 << 4)
430#define USB_ENDPOINT_INTR_NOTIFICATION (1 << 4)
431
432#define USB_ENDPOINT_SYNCTYPE 0x0c
433#define USB_ENDPOINT_SYNC_NONE (0 << 2)
434#define USB_ENDPOINT_SYNC_ASYNC (1 << 2)
435#define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2)
436#define USB_ENDPOINT_SYNC_SYNC (3 << 2)
437
438#define USB_ENDPOINT_USAGE_MASK 0x30
439#define USB_ENDPOINT_USAGE_DATA 0x00
440#define USB_ENDPOINT_USAGE_FEEDBACK 0x10
441#define USB_ENDPOINT_USAGE_IMPLICIT_FB 0x20
442
443
444
445
446
447
448
449
450
451static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
452{
453 return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
454}
455
456
457
458
459
460
461
462
463static inline int usb_endpoint_type(const struct usb_endpoint_descriptor *epd)
464{
465 return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
466}
467
468
469
470
471
472
473
474static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
475{
476 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
477}
478
479
480
481
482
483
484
485static inline int usb_endpoint_dir_out(
486 const struct usb_endpoint_descriptor *epd)
487{
488 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
489}
490
491
492
493
494
495
496
497static inline int usb_endpoint_xfer_bulk(
498 const struct usb_endpoint_descriptor *epd)
499{
500 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
501 USB_ENDPOINT_XFER_BULK);
502}
503
504
505
506
507
508
509
510static inline int usb_endpoint_xfer_control(
511 const struct usb_endpoint_descriptor *epd)
512{
513 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
514 USB_ENDPOINT_XFER_CONTROL);
515}
516
517
518
519
520
521
522
523
524static inline int usb_endpoint_xfer_int(
525 const struct usb_endpoint_descriptor *epd)
526{
527 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
528 USB_ENDPOINT_XFER_INT);
529}
530
531
532
533
534
535
536
537
538static inline int usb_endpoint_xfer_isoc(
539 const struct usb_endpoint_descriptor *epd)
540{
541 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
542 USB_ENDPOINT_XFER_ISOC);
543}
544
545
546
547
548
549
550
551
552static inline int usb_endpoint_is_bulk_in(
553 const struct usb_endpoint_descriptor *epd)
554{
555 return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd);
556}
557
558
559
560
561
562
563
564
565static inline int usb_endpoint_is_bulk_out(
566 const struct usb_endpoint_descriptor *epd)
567{
568 return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd);
569}
570
571
572
573
574
575
576
577
578static inline int usb_endpoint_is_int_in(
579 const struct usb_endpoint_descriptor *epd)
580{
581 return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd);
582}
583
584
585
586
587
588
589
590
591static inline int usb_endpoint_is_int_out(
592 const struct usb_endpoint_descriptor *epd)
593{
594 return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd);
595}
596
597
598
599
600
601
602
603
604static inline int usb_endpoint_is_isoc_in(
605 const struct usb_endpoint_descriptor *epd)
606{
607 return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd);
608}
609
610
611
612
613
614
615
616
617static inline int usb_endpoint_is_isoc_out(
618 const struct usb_endpoint_descriptor *epd)
619{
620 return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd);
621}
622
623
624
625
626
627
628
629static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd)
630{
631 return __le16_to_cpu(get_unaligned(&epd->wMaxPacketSize));
632}
633
634
635
636
637
638
639
640static inline int
641usb_endpoint_maxp_mult(const struct usb_endpoint_descriptor *epd)
642{
643 int maxp = __le16_to_cpu(epd->wMaxPacketSize);
644
645 return USB_EP_MAXP_MULT(maxp) + 1;
646}
647
648static inline int usb_endpoint_interrupt_type(
649 const struct usb_endpoint_descriptor *epd)
650{
651 return epd->bmAttributes & USB_ENDPOINT_INTRTYPE;
652}
653
654
655
656
657struct usb_ss_ep_comp_descriptor {
658 __u8 bLength;
659 __u8 bDescriptorType;
660
661 __u8 bMaxBurst;
662 __u8 bmAttributes;
663 __le16 wBytesPerInterval;
664} __attribute__ ((packed));
665
666#define USB_DT_SS_EP_COMP_SIZE 6
667
668
669static inline int
670usb_ss_max_streams(const struct usb_ss_ep_comp_descriptor *comp)
671{
672 int max_streams;
673
674 if (!comp)
675 return 0;
676
677 max_streams = comp->bmAttributes & 0x1f;
678
679 if (!max_streams)
680 return 0;
681
682 max_streams = 1 << max_streams;
683
684 return max_streams;
685}
686
687
688#define USB_SS_MULT(p) (1 + ((p) & 0x3))
689
690
691
692
693struct usb_qualifier_descriptor {
694 __u8 bLength;
695 __u8 bDescriptorType;
696
697 __le16 bcdUSB;
698 __u8 bDeviceClass;
699 __u8 bDeviceSubClass;
700 __u8 bDeviceProtocol;
701 __u8 bMaxPacketSize0;
702 __u8 bNumConfigurations;
703 __u8 bRESERVED;
704} __attribute__ ((packed));
705
706
707
708
709
710struct usb_otg_descriptor {
711 __u8 bLength;
712 __u8 bDescriptorType;
713
714 __u8 bmAttributes;
715} __attribute__ ((packed));
716
717
718#define USB_OTG_SRP (1 << 0)
719#define USB_OTG_HNP (1 << 1)
720
721
722
723
724struct usb_debug_descriptor {
725 __u8 bLength;
726 __u8 bDescriptorType;
727
728
729 __u8 bDebugInEndpoint;
730 __u8 bDebugOutEndpoint;
731} __attribute__((packed));
732
733
734
735
736struct usb_interface_assoc_descriptor {
737 __u8 bLength;
738 __u8 bDescriptorType;
739
740 __u8 bFirstInterface;
741 __u8 bInterfaceCount;
742 __u8 bFunctionClass;
743 __u8 bFunctionSubClass;
744 __u8 bFunctionProtocol;
745 __u8 iFunction;
746} __attribute__ ((packed));
747
748
749
750
751
752
753
754struct usb_security_descriptor {
755 __u8 bLength;
756 __u8 bDescriptorType;
757
758 __le16 wTotalLength;
759 __u8 bNumEncryptionTypes;
760} __attribute__((packed));
761
762
763
764
765
766
767struct usb_key_descriptor {
768 __u8 bLength;
769 __u8 bDescriptorType;
770
771 __u8 tTKID[3];
772 __u8 bReserved;
773 __u8 bKeyData[0];
774} __attribute__((packed));
775
776
777
778
779struct usb_encryption_descriptor {
780 __u8 bLength;
781 __u8 bDescriptorType;
782
783 __u8 bEncryptionType;
784#define USB_ENC_TYPE_UNSECURE 0
785#define USB_ENC_TYPE_WIRED 1
786#define USB_ENC_TYPE_CCM_1 2
787#define USB_ENC_TYPE_RSA_1 3
788 __u8 bEncryptionValue;
789 __u8 bAuthKeyIndex;
790} __attribute__((packed));
791
792
793
794
795
796struct usb_bos_descriptor {
797 __u8 bLength;
798 __u8 bDescriptorType;
799
800 __le16 wTotalLength;
801 __u8 bNumDeviceCaps;
802} __attribute__((packed));
803
804#define USB_DT_BOS_SIZE 5
805
806
807
808struct usb_dev_cap_header {
809 __u8 bLength;
810 __u8 bDescriptorType;
811 __u8 bDevCapabilityType;
812} __attribute__((packed));
813
814#define USB_CAP_TYPE_WIRELESS_USB 1
815
816struct usb_wireless_cap_descriptor {
817 __u8 bLength;
818 __u8 bDescriptorType;
819 __u8 bDevCapabilityType;
820
821 __u8 bmAttributes;
822#define USB_WIRELESS_P2P_DRD (1 << 1)
823#define USB_WIRELESS_BEACON_MASK (3 << 2)
824#define USB_WIRELESS_BEACON_SELF (1 << 2)
825#define USB_WIRELESS_BEACON_DIRECTED (2 << 2)
826#define USB_WIRELESS_BEACON_NONE (3 << 2)
827 __le16 wPHYRates;
828#define USB_WIRELESS_PHY_53 (1 << 0)
829#define USB_WIRELESS_PHY_80 (1 << 1)
830#define USB_WIRELESS_PHY_107 (1 << 2)
831#define USB_WIRELESS_PHY_160 (1 << 3)
832#define USB_WIRELESS_PHY_200 (1 << 4)
833#define USB_WIRELESS_PHY_320 (1 << 5)
834#define USB_WIRELESS_PHY_400 (1 << 6)
835#define USB_WIRELESS_PHY_480 (1 << 7)
836 __u8 bmTFITXPowerInfo;
837 __u8 bmFFITXPowerInfo;
838 __le16 bmBandGroup;
839 __u8 bReserved;
840} __attribute__((packed));
841
842
843#define USB_CAP_TYPE_EXT 2
844
845struct usb_ext_cap_descriptor {
846 __u8 bLength;
847 __u8 bDescriptorType;
848 __u8 bDevCapabilityType;
849 __le32 bmAttributes;
850#define USB_LPM_SUPPORT (1 << 1)
851#define USB_BESL_SUPPORT (1 << 2)
852#define USB_BESL_BASELINE_VALID (1 << 3)
853#define USB_BESL_DEEP_VALID (1 << 4)
854#define USB_GET_BESL_BASELINE(p) (((p) & (0xf << 8)) >> 8)
855#define USB_GET_BESL_DEEP(p) (((p) & (0xf << 12)) >> 12)
856} __attribute__((packed));
857
858#define USB_DT_USB_EXT_CAP_SIZE 7
859
860
861
862
863
864#define USB_SS_CAP_TYPE 3
865struct usb_ss_cap_descriptor {
866 __u8 bLength;
867 __u8 bDescriptorType;
868 __u8 bDevCapabilityType;
869 __u8 bmAttributes;
870#define USB_LTM_SUPPORT (1 << 1)
871 __le16 wSpeedSupported;
872#define USB_LOW_SPEED_OPERATION (1)
873#define USB_FULL_SPEED_OPERATION (1 << 1)
874#define USB_HIGH_SPEED_OPERATION (1 << 2)
875#define USB_5GBPS_OPERATION (1 << 3)
876 __u8 bFunctionalitySupport;
877 __u8 bU1devExitLat;
878 __le16 bU2DevExitLat;
879} __attribute__((packed));
880
881#define USB_DT_USB_SS_CAP_SIZE 10
882
883
884
885
886
887#define CONTAINER_ID_TYPE 4
888struct usb_ss_container_id_descriptor {
889 __u8 bLength;
890 __u8 bDescriptorType;
891 __u8 bDevCapabilityType;
892 __u8 bReserved;
893 __u8 ContainerID[16];
894} __attribute__((packed));
895
896#define USB_DT_USB_SS_CONTN_ID_SIZE 20
897
898
899
900
901
902struct usb_wireless_ep_comp_descriptor {
903 __u8 bLength;
904 __u8 bDescriptorType;
905
906 __u8 bMaxBurst;
907 __u8 bMaxSequence;
908 __le16 wMaxStreamDelay;
909 __le16 wOverTheAirPacketSize;
910 __u8 bOverTheAirInterval;
911 __u8 bmCompAttributes;
912#define USB_ENDPOINT_SWITCH_MASK 0x03
913#define USB_ENDPOINT_SWITCH_NO 0
914#define USB_ENDPOINT_SWITCH_SWITCH 1
915#define USB_ENDPOINT_SWITCH_SCALE 2
916} __attribute__((packed));
917
918
919
920
921
922
923
924struct usb_handshake {
925 __u8 bMessageNumber;
926 __u8 bStatus;
927 __u8 tTKID[3];
928 __u8 bReserved;
929 __u8 CDID[16];
930 __u8 nonce[16];
931 __u8 MIC[8];
932} __attribute__((packed));
933
934
935
936
937
938
939
940struct usb_connection_context {
941 __u8 CHID[16];
942 __u8 CDID[16];
943 __u8 CK[16];
944} __attribute__((packed));
945
946
947
948
949
950enum usb_device_speed {
951 USB_SPEED_UNKNOWN = 0,
952 USB_SPEED_LOW, USB_SPEED_FULL,
953 USB_SPEED_HIGH,
954 USB_SPEED_WIRELESS,
955 USB_SPEED_SUPER,
956};
957
958#ifdef __KERNEL__
959
960
961
962
963
964
965
966extern const char *usb_speed_string(enum usb_device_speed speed);
967
968#endif
969
970enum usb_device_state {
971
972
973
974 USB_STATE_NOTATTACHED = 0,
975
976
977 USB_STATE_ATTACHED,
978 USB_STATE_POWERED,
979 USB_STATE_RECONNECTING,
980 USB_STATE_UNAUTHENTICATED,
981 USB_STATE_DEFAULT,
982 USB_STATE_ADDRESS,
983 USB_STATE_CONFIGURED,
984
985 USB_STATE_SUSPENDED
986
987
988
989
990
991
992
993};
994
995enum usb3_link_state {
996 USB3_LPM_U0 = 0,
997 USB3_LPM_U1,
998 USB3_LPM_U2,
999 USB3_LPM_U3
1000};
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020#define USB3_LPM_DISABLED 0x0
1021#define USB3_LPM_U1_MAX_TIMEOUT 0x7F
1022#define USB3_LPM_U2_MAX_TIMEOUT 0xFE
1023#define USB3_LPM_DEVICE_INITIATED 0xFF
1024
1025struct usb_set_sel_req {
1026 __u8 u1_sel;
1027 __u8 u1_pel;
1028 __le16 u2_sel;
1029 __le16 u2_pel;
1030} __attribute__ ((packed));
1031
1032
1033
1034
1035
1036
1037#define USB3_LPM_MAX_U1_SEL_PEL 0xFF
1038#define USB3_LPM_MAX_U2_SEL_PEL 0xFFFF
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048#define USB_SELF_POWER_VBUS_MAX_DRAW 100
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058struct usb_string {
1059 u8 id;
1060 const char *s;
1061};
1062
1063#endif
1064