19#ifndef ZEPHYR_INCLUDE_USB_CH9_H_
20#define ZEPHYR_INCLUDE_USB_CH9_H_
27#ifdef CONFIG_LITTLE_ENDIAN
51#define USB_REQTYPE_DIR_TO_DEVICE 0
52#define USB_REQTYPE_DIR_TO_HOST 1
55#define USB_REQTYPE_TYPE_STANDARD 0
56#define USB_REQTYPE_TYPE_CLASS 1
57#define USB_REQTYPE_TYPE_VENDOR 2
58#define USB_REQTYPE_TYPE_RESERVED 3
61#define USB_REQTYPE_RECIPIENT_DEVICE 0
62#define USB_REQTYPE_RECIPIENT_INTERFACE 1
63#define USB_REQTYPE_RECIPIENT_ENDPOINT 2
64#define USB_REQTYPE_RECIPIENT_OTHER 3
67#define USB_REQTYPE_GET_DIR(bmRequestType) (((bmRequestType) >> 7) & 0x01U)
69#define USB_REQTYPE_GET_TYPE(bmRequestType) (((bmRequestType) >> 5) & 0x03U)
71#define USB_REQTYPE_GET_RECIPIENT(bmRequestType) ((bmRequestType) & 0x1FU)
96#define USB_SREQ_GET_STATUS 0x00
97#define USB_SREQ_CLEAR_FEATURE 0x01
98#define USB_SREQ_SET_FEATURE 0x03
99#define USB_SREQ_SET_ADDRESS 0x05
100#define USB_SREQ_GET_DESCRIPTOR 0x06
101#define USB_SREQ_SET_DESCRIPTOR 0x07
102#define USB_SREQ_GET_CONFIGURATION 0x08
103#define USB_SREQ_SET_CONFIGURATION 0x09
104#define USB_SREQ_GET_INTERFACE 0x0A
105#define USB_SREQ_SET_INTERFACE 0x0B
106#define USB_SREQ_SYNCH_FRAME 0x0C
109#define USB_DESC_DEVICE 1
110#define USB_DESC_CONFIGURATION 2
111#define USB_DESC_STRING 3
112#define USB_DESC_INTERFACE 4
113#define USB_DESC_ENDPOINT 5
114#define USB_DESC_DEVICE_QUALIFIER 6
115#define USB_DESC_OTHER_SPEED 7
116#define USB_DESC_INTERFACE_POWER 8
118#define USB_DESC_OTG 9
119#define USB_DESC_DEBUG 10
120#define USB_DESC_INTERFACE_ASSOC 11
121#define USB_DESC_BOS 15
122#define USB_DESC_DEVICE_CAPABILITY 16
127#define USB_DESC_CS_DEVICE 0x21
128#define USB_DESC_CS_CONFIGURATION 0x22
129#define USB_DESC_CS_STRING 0x23
130#define USB_DESC_CS_INTERFACE 0x24
131#define USB_DESC_CS_ENDPOINT 0x25
134#define USB_SFS_ENDPOINT_HALT 0x00
135#define USB_SFS_REMOTE_WAKEUP 0x01
136#define USB_SFS_TEST_MODE 0x02
139#define USB_GET_STATUS_SELF_POWERED BIT(0)
140#define USB_GET_STATUS_REMOTE_WAKEUP BIT(1)
192#ifdef CONFIG_LITTLE_ENDIAN
238#define USB_SCD_RESERVED BIT(7)
239#define USB_SCD_SELF_POWERED BIT(6)
240#define USB_SCD_REMOTE_WAKEUP BIT(5)
243#define USB_BCC_AUDIO 0x01
244#define USB_BCC_CDC_CONTROL 0x02
245#define USB_BCC_HID 0x03
246#define USB_BCC_MASS_STORAGE 0x08
247#define USB_BCC_CDC_DATA 0x0A
248#define USB_BCC_VIDEO 0x0E
249#define USB_BCC_WIRELESS_CONTROLLER 0xE0
250#define USB_BCC_MISCELLANEOUS 0xEF
251#define USB_BCC_APPLICATION 0xFE
252#define USB_BCC_VENDOR 0xFF
255#define USB_SRN_1_1 0x0110
256#define USB_SRN_2_0 0x0200
257#define USB_SRN_2_1 0x0210
259#define USB_DEC_TO_BCD(dec) ((((dec) / 10) << 4) | ((dec) % 10))
262#define USB_BCD_DRN (USB_DEC_TO_BCD(KERNEL_VERSION_MAJOR) << 8 | \
263 USB_DEC_TO_BCD(KERNEL_VERSION_MINOR))
266#define USB_GET_DESCRIPTOR_TYPE(wValue) ((uint8_t)((wValue) >> 8))
269#define USB_GET_DESCRIPTOR_INDEX(wValue) ((uint8_t)(wValue))
272#define USB_CONTROL_EP_MPS 64U
275#define USB_EP_DIR_MASK (uint8_t)BIT(7)
278#define USB_EP_DIR_IN (uint8_t)BIT(7)
281#define USB_EP_DIR_OUT 0U
289#define USB_EP_GET_IDX(ep) ((ep) & ~USB_EP_DIR_MASK)
292#define USB_EP_GET_DIR(ep) ((ep) & USB_EP_DIR_MASK)
295#define USB_EP_GET_ADDR(idx, dir) ((idx) | ((dir) & USB_EP_DIR_MASK))
298#define USB_EP_DIR_IS_IN(ep) (USB_EP_GET_DIR(ep) == USB_EP_DIR_IN)
301#define USB_EP_DIR_IS_OUT(ep) (USB_EP_GET_DIR(ep) == USB_EP_DIR_OUT)
304#define USB_CONTROL_EP_OUT (USB_EP_DIR_OUT | 0U)
307#define USB_CONTROL_EP_IN (USB_EP_DIR_IN | 0U)
310#define USB_EP_TRANSFER_TYPE_MASK 0x3U
313#define USB_EP_TYPE_CONTROL 0U
316#define USB_EP_TYPE_ISO 1U
319#define USB_EP_TYPE_BULK 2U
322#define USB_EP_TYPE_INTERRUPT 3U
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
USB Association Descriptor defined in USB 3 spec.
Definition: usb_ch9.h:226
uint8_t bLength
Definition: usb_ch9.h:227
uint8_t bFunctionClass
Definition: usb_ch9.h:231
uint8_t bFunctionSubClass
Definition: usb_ch9.h:232
uint8_t iFunction
Definition: usb_ch9.h:234
uint8_t bFunctionProtocol
Definition: usb_ch9.h:233
uint8_t bInterfaceCount
Definition: usb_ch9.h:230
uint8_t bFirstInterface
Definition: usb_ch9.h:229
uint8_t bDescriptorType
Definition: usb_ch9.h:228
USB Standard Configuration Descriptor defined in spec.
Definition: usb_ch9.h:167
uint8_t bLength
Definition: usb_ch9.h:168
uint8_t bmAttributes
Definition: usb_ch9.h:174
uint8_t bMaxPower
Definition: usb_ch9.h:175
uint8_t bConfigurationValue
Definition: usb_ch9.h:172
uint8_t bDescriptorType
Definition: usb_ch9.h:169
uint8_t iConfiguration
Definition: usb_ch9.h:173
uint8_t bNumInterfaces
Definition: usb_ch9.h:171
uint16_t wTotalLength
Definition: usb_ch9.h:170
USB Standard Device Descriptor defined in spec.
Definition: usb_ch9.h:149
uint16_t idVendor
Definition: usb_ch9.h:157
uint8_t iSerialNumber
Definition: usb_ch9.h:162
uint16_t bcdDevice
Definition: usb_ch9.h:159
uint8_t bDeviceProtocol
Definition: usb_ch9.h:155
uint8_t bNumConfigurations
Definition: usb_ch9.h:163
uint16_t idProduct
Definition: usb_ch9.h:158
uint16_t bcdUSB
Definition: usb_ch9.h:152
uint8_t bDeviceClass
Definition: usb_ch9.h:153
uint8_t bMaxPacketSize0
Definition: usb_ch9.h:156
uint8_t iProduct
Definition: usb_ch9.h:161
uint8_t iManufacturer
Definition: usb_ch9.h:160
uint8_t bDescriptorType
Definition: usb_ch9.h:151
uint8_t bDeviceSubClass
Definition: usb_ch9.h:154
uint8_t bLength
Definition: usb_ch9.h:150
Definition: usb_ch9.h:191
uint8_t transfer
Definition: usb_ch9.h:201
uint8_t synch
Definition: usb_ch9.h:200
uint8_t reserved
Definition: usb_ch9.h:198
uint8_t usage
Definition: usb_ch9.h:199
USB Standard Endpoint Descriptor defined in spec.
Definition: usb_ch9.h:206
uint8_t bDescriptorType
Definition: usb_ch9.h:208
uint8_t bEndpointAddress
Definition: usb_ch9.h:209
struct usb_ep_desc_bmattr Attributes
Definition: usb_ch9.h:212
uint8_t bInterval
Definition: usb_ch9.h:215
uint16_t wMaxPacketSize
Definition: usb_ch9.h:214
uint8_t bmAttributes
Definition: usb_ch9.h:211
uint8_t bLength
Definition: usb_ch9.h:207
USB Standard Interface Descriptor defined in spec.
Definition: usb_ch9.h:179
uint8_t bAlternateSetting
Definition: usb_ch9.h:183
uint8_t bInterfaceSubClass
Definition: usb_ch9.h:186
uint8_t bInterfaceProtocol
Definition: usb_ch9.h:187
uint8_t bNumEndpoints
Definition: usb_ch9.h:184
uint8_t bInterfaceClass
Definition: usb_ch9.h:185
uint8_t iInterface
Definition: usb_ch9.h:188
uint8_t bDescriptorType
Definition: usb_ch9.h:181
uint8_t bLength
Definition: usb_ch9.h:180
uint8_t bInterfaceNumber
Definition: usb_ch9.h:182
uint8_t recipient
Definition: usb_ch9.h:34
uint8_t type
Definition: usb_ch9.h:33
uint8_t direction
Definition: usb_ch9.h:32
USB Setup Data packet defined in spec.
Definition: usb_ch9.h:39
uint8_t bmRequestType
Definition: usb_ch9.h:41
uint16_t wLength
Definition: usb_ch9.h:47
uint16_t wValue
Definition: usb_ch9.h:45
uint16_t wIndex
Definition: usb_ch9.h:46
uint8_t bRequest
Definition: usb_ch9.h:44
struct usb_req_type_field RequestType
Definition: usb_ch9.h:42
USB Unicode (UTF16LE) String Descriptor defined in spec.
Definition: usb_ch9.h:219
uint8_t bDescriptorType
Definition: usb_ch9.h:221
uint8_t bLength
Definition: usb_ch9.h:220
uint16_t bString
Definition: usb_ch9.h:222
#define USB_REQTYPE_DIR_TO_DEVICE
USB Setup packet RequestType Direction values (from Table 9-2)
Definition: usb_ch9.h:51
static bool usb_reqtype_is_to_device(const struct usb_setup_packet *setup)
Check if request transfer direction is to device.
Definition: usb_ch9.h:90
static bool usb_reqtype_is_to_host(const struct usb_setup_packet *setup)
Check if request transfer direction is to host.
Definition: usb_ch9.h:79
#define USB_REQTYPE_DIR_TO_HOST
Definition: usb_ch9.h:52
USB Hub Class device API header.