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