1655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng/**************************************************************************** 2655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng **************************************************************************** 3655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** 4655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** This header was automatically generated from a Linux kernel header 5655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** of the same name, to make information necessary for userspace to 6655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** call into the kernel available to libc. It contains only constants, 7655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** structures, and macros generated from the original header, and thus, 8655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** contains no copyrightable information. 9655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** 10655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** To edit the content of this header, modify the corresponding 11655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** source file (e.g. under external/kernel-headers/original/) then 12655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** run bionic/libc/kernel/tools/update_all.py 13655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** 14655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** Any manual change here will be lost the next time this script will 15655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** be run. You've been warned! 16655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng *** 17655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng **************************************************************************** 18655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng ****************************************************************************/ 19655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#ifndef _UAPI__LINUX_USB_CH9_H 20655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define _UAPI__LINUX_USB_CH9_H 21655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#include <linux/types.h> 22655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#include <asm/byteorder.h> 23655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DIR_OUT 0 24655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DIR_IN 0x80 25655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_TYPE_MASK (0x03 << 5) 26655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_TYPE_STANDARD (0x00 << 5) 27655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_TYPE_CLASS (0x01 << 5) 28655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_TYPE_VENDOR (0x02 << 5) 29655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_TYPE_RESERVED (0x03 << 5) 30655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_RECIP_MASK 0x1f 31655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_RECIP_DEVICE 0x00 32655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_RECIP_INTERFACE 0x01 33655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_RECIP_ENDPOINT 0x02 34655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_RECIP_OTHER 0x03 35655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_RECIP_PORT 0x04 36655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_RECIP_RPIPE 0x05 37655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_GET_STATUS 0x00 38655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_CLEAR_FEATURE 0x01 39655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_FEATURE 0x03 40655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_ADDRESS 0x05 41655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_GET_DESCRIPTOR 0x06 42655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_DESCRIPTOR 0x07 43655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_GET_CONFIGURATION 0x08 44655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_CONFIGURATION 0x09 45655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_GET_INTERFACE 0x0A 46655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_INTERFACE 0x0B 47655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SYNCH_FRAME 0x0C 48655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_SEL 0x30 49655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_ISOCH_DELAY 0x31 50655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_ENCRYPTION 0x0D 51655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_GET_ENCRYPTION 0x0E 52655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_RPIPE_ABORT 0x0E 53655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_HANDSHAKE 0x0F 54655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_RPIPE_RESET 0x0F 55655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_GET_HANDSHAKE 0x10 56655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_CONNECTION 0x11 57655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_SECURITY_DATA 0x12 58655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_GET_SECURITY_DATA 0x13 59655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_WUSB_DATA 0x14 60655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_LOOPBACK_DATA_WRITE 0x15 61655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_LOOPBACK_DATA_READ 0x16 62655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_REQ_SET_INTERFACE_DS 0x17 63106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_REQ_GET_PARTNER_PDO 20 64106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_REQ_GET_BATTERY_STATUS 21 65106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_REQ_SET_PDO 22 66106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_REQ_GET_VDM 23 67106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_REQ_SEND_VDM 24 68655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_SELF_POWERED 0 69655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_REMOTE_WAKEUP 1 70655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_TEST_MODE 2 71106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DEVICE_BATTERY 2 72655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_B_HNP_ENABLE 3 73655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_WUSB_DEVICE 3 74655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_A_HNP_SUPPORT 4 75106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DEVICE_A_ALT_HNP_SUPPORT 5 76655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_DEBUG_MODE 6 77655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define TEST_J 1 78655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define TEST_K 2 79106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define TEST_SE0_NAK 3 80655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define TEST_PACKET 4 81655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define TEST_FORCE_EN 5 82934ec9495505d234b2c2fa284470c2f44aae9de9Christopher Ferris#define USB_STATUS_TYPE_STANDARD 0 83934ec9495505d234b2c2fa284470c2f44aae9de9Christopher Ferris#define USB_STATUS_TYPE_PTM 1 84655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_U1_ENABLE 48 85106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DEVICE_U2_ENABLE 49 86655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEVICE_LTM_ENABLE 50 87655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_INTRF_FUNC_SUSPEND 0 88655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_INTR_FUNC_SUSPEND_OPT_MASK 0xFF00 89106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_INTRF_FUNC_SUSPEND_LP (1 << (8 + 0)) 90655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_INTRF_FUNC_SUSPEND_RW (1 << (8 + 1)) 91655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_INTRF_STAT_FUNC_RW_CAP 1 92655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_INTRF_STAT_FUNC_RW 2 93106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_ENDPOINT_HALT 0 94655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEV_STAT_U1_ENABLED 2 95655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEV_STAT_U2_ENABLED 3 96655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DEV_STAT_LTM_ENABLED 4 97106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DEVICE_BATTERY_WAKE_MASK 40 98106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DEVICE_OS_IS_PD_AWARE 41 99106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DEVICE_POLICY_MODE 42 100106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PORT_PR_SWAP 43 101106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PORT_GOTO_MIN 44 102106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PORT_RETURN_POWER 45 103106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PORT_ACCEPT_PD_REQUEST 46 104106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PORT_REJECT_PD_REQUEST 47 105106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PORT_PORT_PD_RESET 48 106106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PORT_C_PORT_PD_CHANGE 49 107106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PORT_CABLE_PD_RESET 50 108106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DEVICE_CHARGING_POLICY 54 109106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferrisstruct usb_ctrlrequest { 110d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bRequestType; 111d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bRequest; 112d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wValue; 113106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 wIndex; 114d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wLength; 115d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 116655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_DEVICE 0x01 117106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_CONFIG 0x02 118655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_STRING 0x03 119655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_INTERFACE 0x04 120655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_ENDPOINT 0x05 121106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_DEVICE_QUALIFIER 0x06 122655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_OTHER_SPEED_CONFIG 0x07 123655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_INTERFACE_POWER 0x08 124655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_OTG 0x09 125106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_DEBUG 0x0a 126655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_INTERFACE_ASSOCIATION 0x0b 127655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_SECURITY 0x0c 128655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_KEY 0x0d 129106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_ENCRYPTION_TYPE 0x0e 130655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_BOS 0x0f 131655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_DEVICE_CAPABILITY 0x10 132655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 133106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_WIRE_ADAPTER 0x21 134655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_RPIPE 0x22 135655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_CS_RADIO_CONTROL 0x23 136655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_PIPE_USAGE 0x24 137106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_SS_ENDPOINT_COMP 0x30 138106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_SSP_ISOC_ENDPOINT_COMP 0x31 139655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_CS_DEVICE (USB_TYPE_CLASS | USB_DT_DEVICE) 140655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_CS_CONFIG (USB_TYPE_CLASS | USB_DT_CONFIG) 141655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_CS_STRING (USB_TYPE_CLASS | USB_DT_STRING) 142655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_CS_INTERFACE (USB_TYPE_CLASS | USB_DT_INTERFACE) 143655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_CS_ENDPOINT (USB_TYPE_CLASS | USB_DT_ENDPOINT) 144655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_descriptor_header { 145d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 146d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 147d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 148655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_device_descriptor { 149d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 150d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 151d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 bcdUSB; 152d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDeviceClass; 153d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDeviceSubClass; 154d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDeviceProtocol; 155d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bMaxPacketSize0; 156d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 idVendor; 157d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 idProduct; 158d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 bcdDevice; 159d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 iManufacturer; 160d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 iProduct; 161d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 iSerialNumber; 162d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bNumConfigurations; 163d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 164655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_DEVICE_SIZE 18 165655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_PER_INTERFACE 0 166655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_AUDIO 1 167655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_COMM 2 168655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_HID 3 169655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_PHYSICAL 5 170655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_STILL_IMAGE 6 171655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_PRINTER 7 172655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_MASS_STORAGE 8 173655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_HUB 9 174655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_CDC_DATA 0x0a 175655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_CSCID 0x0b 176655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_CONTENT_SEC 0x0d 177655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_VIDEO 0x0e 178655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_WIRELESS_CONTROLLER 0xe0 179655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_MISC 0xef 180655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_APP_SPEC 0xfe 181655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CLASS_VENDOR_SPEC 0xff 182655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_SUBCLASS_VENDOR_SPEC 0xff 183655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_config_descriptor { 184d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 185d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 186d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wTotalLength; 187d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bNumInterfaces; 188d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bConfigurationValue; 189d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 iConfiguration; 190d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmAttributes; 191d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bMaxPower; 192d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 193655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_CONFIG_SIZE 9 194655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CONFIG_ATT_ONE (1 << 7) 195655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CONFIG_ATT_SELFPOWER (1 << 6) 196655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CONFIG_ATT_WAKEUP (1 << 5) 197655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CONFIG_ATT_BATTERY (1 << 4) 198655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_string_descriptor { 199d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 200d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 201d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wData[1]; 202d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 203655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_interface_descriptor { 204d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 205d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 206d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bInterfaceNumber; 207d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bAlternateSetting; 208d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bNumEndpoints; 209d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bInterfaceClass; 210d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bInterfaceSubClass; 211d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bInterfaceProtocol; 212d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 iInterface; 213d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 214655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_INTERFACE_SIZE 9 215655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_endpoint_descriptor { 216d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 217d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 218d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bEndpointAddress; 219d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmAttributes; 220d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wMaxPacketSize; 221d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bInterval; 222d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bRefresh; 223d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bSynchAddress; 224d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 225655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_ENDPOINT_SIZE 7 226655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_ENDPOINT_AUDIO_SIZE 9 227655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_NUMBER_MASK 0x0f 228655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_DIR_MASK 0x80 229655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_XFERTYPE_MASK 0x03 230655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_XFER_CONTROL 0 231655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_XFER_ISOC 1 232655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_XFER_BULK 2 233655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_XFER_INT 3 234655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 23548af7cb2e205dcc2f09a1a1b8a1a37c93e1943f0Christopher Ferris#define USB_ENDPOINT_MAXP_MASK 0x07ff 23648af7cb2e205dcc2f09a1a1b8a1a37c93e1943f0Christopher Ferris#define USB_EP_MAXP_MULT_SHIFT 11 23748af7cb2e205dcc2f09a1a1b8a1a37c93e1943f0Christopher Ferris#define USB_EP_MAXP_MULT_MASK (3 << USB_EP_MAXP_MULT_SHIFT) 23848af7cb2e205dcc2f09a1a1b8a1a37c93e1943f0Christopher Ferris#define USB_EP_MAXP_MULT(m) (((m) & USB_EP_MAXP_MULT_MASK) >> USB_EP_MAXP_MULT_SHIFT) 239655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_INTRTYPE 0x30 240655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_INTR_PERIODIC (0 << 4) 241655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_INTR_NOTIFICATION (1 << 4) 242655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_SYNCTYPE 0x0c 243655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_SYNC_NONE (0 << 2) 244655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_SYNC_ASYNC (1 << 2) 245655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2) 246655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_SYNC_SYNC (3 << 2) 247655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_USAGE_MASK 0x30 248655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_USAGE_DATA 0x00 249655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_USAGE_FEEDBACK 0x10 250655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_USAGE_IMPLICIT_FB 0x20 251106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferrisstruct usb_ssp_isoc_ep_comp_descriptor { 252106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bLength; 253106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDescriptorType; 254106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 wReseved; 255106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 dwBytesPerInterval; 256106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris} __attribute__((packed)); 257106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_SSP_ISOC_EP_COMP_SIZE 8 258655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_ss_ep_comp_descriptor { 259d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 260d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 261106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bMaxBurst; 262d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmAttributes; 263d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wBytesPerInterval; 264d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 265106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_SS_EP_COMP_SIZE 6 266655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_SS_MULT(p) (1 + ((p) & 0x3)) 267106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_SS_SSP_ISOC_COMP(p) ((p) & (1 << 7)) 268655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_qualifier_descriptor { 269d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 270d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 271d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 bcdUSB; 272d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDeviceClass; 273d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDeviceSubClass; 274d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDeviceProtocol; 275d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bMaxPacketSize0; 276d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bNumConfigurations; 277d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bRESERVED; 278d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 279655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_otg_descriptor { 280d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 281d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 282d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmAttributes; 283d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 28405d08e9716b5974d6ed08973f44930804890b902Christopher Ferrisstruct usb_otg20_descriptor { 28505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bLength; 28605d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bDescriptorType; 28705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bmAttributes; 28805d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __le16 bcdOTG; 28905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris} __attribute__((packed)); 290655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_OTG_SRP (1 << 0) 291655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_OTG_HNP (1 << 1) 29205d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_OTG_ADP (1 << 2) 293106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define OTG_STS_SELECTOR 0xF000 294655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_debug_descriptor { 295d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 296d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 297d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDebugInEndpoint; 298d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDebugOutEndpoint; 299655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 300655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_interface_assoc_descriptor { 301d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 302d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 303d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bFirstInterface; 304d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bInterfaceCount; 305d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bFunctionClass; 306d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bFunctionSubClass; 307d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bFunctionProtocol; 308d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 iFunction; 309d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 3101308ad3ab33294c3abfd96da12b6df58b381ce52Christopher Ferris#define USB_DT_INTERFACE_ASSOCIATION_SIZE 8 311655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_security_descriptor { 312d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 313d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 314d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wTotalLength; 315d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bNumEncryptionTypes; 316655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 317655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_key_descriptor { 318d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 319d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 320d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 tTKID[3]; 321d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bReserved; 322d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bKeyData[0]; 323655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 324655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_encryption_descriptor { 325d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 326d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 327d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bEncryptionType; 328655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENC_TYPE_UNSECURE 0 329655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENC_TYPE_WIRED 1 330655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENC_TYPE_CCM_1 2 331655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENC_TYPE_RSA_1 3 332d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bEncryptionValue; 333d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bAuthKeyIndex; 334655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 335655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_bos_descriptor { 336d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 337d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 338d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wTotalLength; 339d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bNumDeviceCaps; 340655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 341655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_BOS_SIZE 5 342655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_dev_cap_header { 343d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 344d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 345d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDevCapabilityType; 346655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 347655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CAP_TYPE_WIRELESS_USB 1 348655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_wireless_cap_descriptor { 349d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 350d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 351d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDevCapabilityType; 352d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmAttributes; 353655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_P2P_DRD (1 << 1) 354655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_BEACON_MASK (3 << 2) 355655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_BEACON_SELF (1 << 2) 356655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_BEACON_DIRECTED (2 << 2) 357655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_BEACON_NONE (3 << 2) 358d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wPHYRates; 359655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_PHY_53 (1 << 0) 360655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_PHY_80 (1 << 1) 361655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_PHY_107 (1 << 2) 362655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_PHY_160 (1 << 3) 363655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_PHY_200 (1 << 4) 364655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_PHY_320 (1 << 5) 365655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_PHY_400 (1 << 6) 366655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_WIRELESS_PHY_480 (1 << 7) 367d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmTFITXPowerInfo; 368d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmFFITXPowerInfo; 369d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 bmBandGroup; 370d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bReserved; 371655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 372934ec9495505d234b2c2fa284470c2f44aae9de9Christopher Ferris#define USB_DT_USB_WIRELESS_CAP_SIZE 11 373655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_CAP_TYPE_EXT 2 374655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_ext_cap_descriptor { 375d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 376d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 377d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDevCapabilityType; 378d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le32 bmAttributes; 379655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_LPM_SUPPORT (1 << 1) 380655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_BESL_SUPPORT (1 << 2) 381655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_BESL_BASELINE_VALID (1 << 3) 382655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_BESL_DEEP_VALID (1 << 4) 383655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_GET_BESL_BASELINE(p) (((p) & (0xf << 8)) >> 8) 384655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_GET_BESL_DEEP(p) (((p) & (0xf << 12)) >> 12) 385655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 386655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_USB_EXT_CAP_SIZE 7 387655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_SS_CAP_TYPE 3 388655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_ss_cap_descriptor { 389d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 390d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 391d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDevCapabilityType; 392d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmAttributes; 393655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_LTM_SUPPORT (1 << 1) 394d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wSpeedSupported; 395655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_LOW_SPEED_OPERATION (1) 396655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_FULL_SPEED_OPERATION (1 << 1) 397655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_HIGH_SPEED_OPERATION (1 << 2) 398655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_5GBPS_OPERATION (1 << 3) 399d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bFunctionalitySupport; 400d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bU1devExitLat; 401d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 bU2DevExitLat; 402655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 403655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_USB_SS_CAP_SIZE 10 404655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define CONTAINER_ID_TYPE 4 405655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_ss_container_id_descriptor { 406d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 407d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 408d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDevCapabilityType; 409d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bReserved; 410d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 ContainerID[16]; 411655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 412655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_DT_USB_SS_CONTN_ID_SIZE 20 41305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_CAP_TYPE 0xa 41405d08e9716b5974d6ed08973f44930804890b902Christopher Ferrisstruct usb_ssp_cap_descriptor { 41505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bLength; 41605d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bDescriptorType; 41705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bDevCapabilityType; 41805d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bReserved; 41905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __le32 bmAttributes; 42005d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_SUBLINK_SPEED_ATTRIBS (0x1f << 0) 42105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_SUBLINK_SPEED_IDS (0xf << 5) 422106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 wFunctionalitySupport; 42305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_MIN_SUBLINK_SPEED_ATTRIBUTE_ID (0xf) 42405d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_MIN_RX_LANE_COUNT (0xf << 8) 42505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_MIN_TX_LANE_COUNT (0xf << 12) 42605d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __le16 wReserved; 42705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __le32 bmSublinkSpeedAttr[1]; 42805d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_SUBLINK_SPEED_SSID (0xf) 42905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_SUBLINK_SPEED_LSE (0x3 << 4) 43005d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_SUBLINK_SPEED_ST (0x3 << 6) 43105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_SUBLINK_SPEED_RSVD (0x3f << 8) 43205d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_SUBLINK_SPEED_LP (0x3 << 14) 43305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_SSP_SUBLINK_SPEED_LSM (0xff << 16) 434106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris} __attribute__((packed)); 435106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_POWER_DELIVERY_CAPABILITY 0x06 436106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_BATTERY_INFO_CAPABILITY 0x07 437106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_PD_CONSUMER_PORT_CAPABILITY 0x08 438106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_PD_PROVIDER_PORT_CAPABILITY 0x09 439106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferrisstruct usb_pd_cap_descriptor { 440106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bLength; 441106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDescriptorType; 442106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDevCapabilityType; 443106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bReserved; 444106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 bmAttributes; 445106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_BATTERY_CHARGING (1 << 1) 446106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_USB_PD (1 << 2) 447106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_PROVIDER (1 << 3) 448106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_CONSUMER (1 << 4) 449106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_CHARGING_POLICY (1 << 5) 450106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_TYPE_C_CURRENT (1 << 6) 451106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_PWR_AC (1 << 8) 452106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_PWR_BAT (1 << 9) 453106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_PWR_USE_V_BUS (1 << 14) 454106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 bmProviderPorts; 455106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 bmConsumerPorts; 456106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 bcdBCVersion; 457106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 bcdPDVersion; 458106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 bcdUSBTypeCVersion; 45905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris} __attribute__((packed)); 460106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferrisstruct usb_pd_cap_battery_info_descriptor { 461106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bLength; 462106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDescriptorType; 463106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDevCapabilityType; 464106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 iBattery; 465106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 iSerial; 466106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 iManufacturer; 467106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bBatteryId; 468106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bReserved; 469106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 dwChargedThreshold; 470106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 dwWeakThreshold; 471106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 dwBatteryDesignCapacity; 472106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 dwBatteryLastFullchargeCapacity; 473106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris} __attribute__((packed)); 474106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferrisstruct usb_pd_cap_consumer_port_descriptor { 475106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bLength; 476106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDescriptorType; 477106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDevCapabilityType; 478106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bReserved; 479106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bmCapabilities; 480106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_CONSUMER_BC (1 << 0) 481106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_CONSUMER_PD (1 << 1) 482106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_CONSUMER_TYPE_C (1 << 2) 483106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 wMinVoltage; 484106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le16 wMaxVoltage; 485106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u16 wReserved; 486106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 dwMaxOperatingPower; 487106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 dwMaxPeakPower; 488106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 dwMaxPeakPowerTime; 489106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_CONSUMER_UNKNOWN_PEAK_POWER_TIME 0xffff 490106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris} __attribute__((packed)); 491106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferrisstruct usb_pd_cap_provider_port_descriptor { 492d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bLength; 493d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bDescriptorType; 494106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDevCapabilityType; 495106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bReserved1; 496106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bmCapabilities; 497106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_PROVIDER_BC (1 << 0) 498106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_PROVIDER_PD (1 << 1) 499106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PD_CAP_PROVIDER_TYPE_C (1 << 2) 500106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bNumOfPDObjects; 501106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bReserved2; 502106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __le32 wPowerDataObject[]; 503106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris} __attribute__((packed)); 504106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_PTM_CAP_TYPE 0xb 505106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferrisstruct usb_ptm_cap_descriptor { 506106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bLength; 507106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDescriptorType; 508106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDevCapabilityType; 509106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris} __attribute__((packed)); 510934ec9495505d234b2c2fa284470c2f44aae9de9Christopher Ferris#define USB_DT_USB_PTM_ID_SIZE 3 511106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris#define USB_DT_USB_SSP_CAP_SIZE(ssac) (16 + ssac * 4) 512106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferrisstruct usb_wireless_ep_comp_descriptor { 513106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bLength; 514106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris __u8 bDescriptorType; 51505d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bMaxBurst; 516d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bMaxSequence; 517d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wMaxStreamDelay; 518d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 wOverTheAirPacketSize; 51905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bOverTheAirInterval; 520d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bmCompAttributes; 521655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_SWITCH_MASK 0x03 522655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_SWITCH_NO 0 52305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB_ENDPOINT_SWITCH_SWITCH 1 524655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_ENDPOINT_SWITCH_SCALE 2 525655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 526655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_handshake { 52705d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 bMessageNumber; 528d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bStatus; 529d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 tTKID[3]; 530d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 bReserved; 53105d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 CDID[16]; 532d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 nonce[16]; 533d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 MIC[8]; 534655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng} __attribute__((packed)); 53505d08e9716b5974d6ed08973f44930804890b902Christopher Ferrisstruct usb_connection_context { 536d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 CHID[16]; 537d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 CDID[16]; 538d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 CK[16]; 53905d08e9716b5974d6ed08973f44930804890b902Christopher Ferris} __attribute__((packed)); 540655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengenum usb_device_speed { 541d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_SPEED_UNKNOWN = 0, 542d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_SPEED_LOW, 54305d08e9716b5974d6ed08973f44930804890b902Christopher Ferris USB_SPEED_FULL, 544d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_SPEED_HIGH, 545d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_SPEED_WIRELESS, 546d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_SPEED_SUPER, 547106b3a8a7dc03c19a45e322de425ac56aafac358Christopher Ferris USB_SPEED_SUPER_PLUS, 54805d08e9716b5974d6ed08973f44930804890b902Christopher Ferris}; 549d7db594b8d1dab36b711bd887a9dd21675c87243Tao Baoenum usb_device_state { 550d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_STATE_NOTATTACHED = 0, 551d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_STATE_ATTACHED, 55205d08e9716b5974d6ed08973f44930804890b902Christopher Ferris USB_STATE_POWERED, 553d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_STATE_RECONNECTING, 554d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_STATE_UNAUTHENTICATED, 555d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_STATE_DEFAULT, 55605d08e9716b5974d6ed08973f44930804890b902Christopher Ferris USB_STATE_ADDRESS, 557d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_STATE_CONFIGURED, 558d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB_STATE_SUSPENDED 559655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng}; 56005d08e9716b5974d6ed08973f44930804890b902Christopher Ferrisenum usb3_link_state { 561d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB3_LPM_U0 = 0, 562d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB3_LPM_U1, 563d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao USB3_LPM_U2, 56405d08e9716b5974d6ed08973f44930804890b902Christopher Ferris USB3_LPM_U3 565d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao}; 566655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB3_LPM_DISABLED 0x0 567655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB3_LPM_U1_MAX_TIMEOUT 0x7F 56805d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB3_LPM_U2_MAX_TIMEOUT 0xFE 569d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao#define USB3_LPM_DEVICE_INITIATED 0xFF 570655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Chengstruct usb_set_sel_req { 571d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __u8 u1_sel; 57205d08e9716b5974d6ed08973f44930804890b902Christopher Ferris __u8 u1_pel; 573d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 u2_sel; 574d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao __le16 u2_pel; 575d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao} __attribute__((packed)); 57605d08e9716b5974d6ed08973f44930804890b902Christopher Ferris#define USB3_LPM_MAX_U1_SEL_PEL 0xFF 577d7db594b8d1dab36b711bd887a9dd21675c87243Tao Bao#define USB3_LPM_MAX_U2_SEL_PEL 0xFFFF 578655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#define USB_SELF_POWER_VBUS_MAX_DRAW 100 579655a7c081f83b8351ed5f11a6c6accd9458293a8Ben Cheng#endif 580