1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This file holds USB constants and structures that are needed for USB 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * device APIs. These are used by the USB device model, which is defined 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * in chapter 9 of the USB 2.0 specification. Linux has several APIs in C 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * that need these: 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * - the master/host side Linux-USB kernel driver API; 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * - the "usbfs" user space API; and 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * - the Linux "gadget" slave/device/peripheral side driver API. 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * act either as a USB master/host or as a USB slave/device. That means 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * the master and slave side APIs benefit from working well together. 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * There's also "Wireless USB", using low power short range radios for 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * peripheral interconnection but otherwise building on the USB framework. 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __LINUX_USB_CH9_H 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __LINUX_USB_CH9_H 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/types.h> /* __u8 etc */ 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* CONTROL REQUEST SUPPORT */ 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * USB directions 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This bit flag is used in endpoint descriptors' bEndpointAddress field. 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * It's also one of three fields in control requests bRequestType. 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DIR_OUT 0 /* to device */ 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DIR_IN 0x80 /* to host */ 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * USB types, the second of three bRequestType fields 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_TYPE_MASK (0x03 << 5) 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_TYPE_STANDARD (0x00 << 5) 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_TYPE_CLASS (0x01 << 5) 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_TYPE_VENDOR (0x02 << 5) 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_TYPE_RESERVED (0x03 << 5) 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * USB recipients, the third of three bRequestType fields 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_RECIP_MASK 0x1f 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_RECIP_DEVICE 0x00 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_RECIP_INTERFACE 0x01 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_RECIP_ENDPOINT 0x02 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_RECIP_OTHER 0x03 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* From Wireless USB 1.0 */ 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_RECIP_PORT 0x04 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_RECIP_RPIPE 0x05 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Standard requests, for the bRequest field of a SETUP packet. 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * These are qualified by the bRequestType field, so that for example 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * by a GET_STATUS request. 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_GET_STATUS 0x00 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_CLEAR_FEATURE 0x01 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_FEATURE 0x03 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_ADDRESS 0x05 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_GET_DESCRIPTOR 0x06 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_DESCRIPTOR 0x07 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_GET_CONFIGURATION 0x08 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_CONFIGURATION 0x09 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_GET_INTERFACE 0x0A 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_INTERFACE 0x0B 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SYNCH_FRAME 0x0C 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */ 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_GET_ENCRYPTION 0x0E 79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_RPIPE_ABORT 0x0E 80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_HANDSHAKE 0x0F 81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_RPIPE_RESET 0x0F 82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_GET_HANDSHAKE 0x10 83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_CONNECTION 0x11 84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_SECURITY_DATA 0x12 85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_GET_SECURITY_DATA 0x13 86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_WUSB_DATA 0x14 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_LOOPBACK_DATA_WRITE 0x15 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_LOOPBACK_DATA_READ 0x16 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_REQ_SET_INTERFACE_DS 0x17 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * are read as a bit array returned by USB_REQ_GET_STATUS. (So there 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * are at most sixteen features of each type.) 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_SELF_POWERED 0 /* (read only) */ 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */ 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_TEST_MODE 2 /* (wired high speed only) */ 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_BATTERY 2 /* (wireless) */ 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_B_HNP_ENABLE 3 /* (otg) dev may initiate HNP */ 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_WUSB_DEVICE 3 /* (wireless)*/ 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_A_HNP_SUPPORT 4 /* (otg) RH port supports HNP */ 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */ 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */ 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/** 110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * struct usb_ctrlrequest - SETUP data for a USB device control request 111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * @bRequestType: matches the USB bmRequestType field 112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * @bRequest: matches the USB bRequest field 113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * @wValue: matches the USB wValue field (le16 byte order) 114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * @wIndex: matches the USB wIndex field (le16 byte order) 115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * @wLength: matches the USB wLength field (le16 byte order) 116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This structure is used to send control requests to a USB device. It matches 118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * the different fields of the USB 2.0 Spec section 9.3, table 9-2. See the 119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * USB spec for a fuller description of the different fields, and what they are 120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * used for. 121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Note that the driver for any interface can issue control requests. 123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * For most devices, interfaces don't coordinate with each other, so 124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * such requests may be made at any time. 125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_ctrlrequest { 127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bRequestType; 128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bRequest; 129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wValue; 130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wIndex; 131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wLength; 132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or 138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * (rarely) accepted by SET_DESCRIPTOR. 139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Note that all multi-byte values here are encoded in little endian 141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * byte order "on the wire". But when exposed through Linux-USB APIs, 142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * they've been converted to cpu byte order. 143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Descriptor types ... USB 2.0 spec table 9.5 147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_DEVICE 0x01 149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_CONFIG 0x02 150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_STRING 0x03 151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_INTERFACE 0x04 152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_ENDPOINT 0x05 153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_DEVICE_QUALIFIER 0x06 154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_OTHER_SPEED_CONFIG 0x07 155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_INTERFACE_POWER 0x08 156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* these are from a minor usb 2.0 revision (ECN) */ 157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_OTG 0x09 158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_DEBUG 0x0a 159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_INTERFACE_ASSOCIATION 0x0b 160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* these are from the Wireless USB spec */ 161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_SECURITY 0x0c 162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_KEY 0x0d 163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_ENCRYPTION_TYPE 0x0e 164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_BOS 0x0f 165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_DEVICE_CAPABILITY 0x10 166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_WIRE_ADAPTER 0x21 168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_RPIPE 0x22 169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 170c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* conventional codes for class-specific descriptors */ 171c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_CS_DEVICE 0x21 172c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_CS_CONFIG 0x22 173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_CS_STRING 0x23 174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_CS_INTERFACE 0x24 175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_CS_ENDPOINT 0x25 176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* All standard descriptors have these 2 fields at the beginning */ 178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_descriptor_header { 179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_DEVICE: Device descriptor */ 187c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_device_descriptor { 188c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 189c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 190c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 191c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 bcdUSB; 192c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDeviceClass; 193c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDeviceSubClass; 194c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDeviceProtocol; 195c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bMaxPacketSize0; 196c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 idVendor; 197c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 idProduct; 198c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 bcdDevice; 199c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 iManufacturer; 200c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 iProduct; 201c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 iSerialNumber; 202c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bNumConfigurations; 203c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 204c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 205c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_DEVICE_SIZE 18 206c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 207c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 208c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 209c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Device and/or Interface Class codes 210c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * as found in bDeviceClass or bInterfaceClass 211c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * and defined by www.usb.org documents 212c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 213c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ 214c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_AUDIO 1 215c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_COMM 2 216c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_HID 3 217c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_PHYSICAL 5 218c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_STILL_IMAGE 6 219c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_PRINTER 7 220c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_MASS_STORAGE 8 221c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_HUB 9 222c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_CDC_DATA 0x0a 223c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_CSCID 0x0b /* chip+ smart card */ 224c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_CONTENT_SEC 0x0d /* content security */ 225c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_VIDEO 0x0e 226c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_WIRELESS_CONTROLLER 0xe0 227c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_APP_SPEC 0xfe 228c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CLASS_VENDOR_SPEC 0xff 229c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 230c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 231c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 232c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_CONFIG: Configuration descriptor information. 233c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 234c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the 235c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * descriptor type is different. Highspeed-capable devices can look 236c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * different depending on what speed they're currently running. Only 237c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG 238c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * descriptors. 239c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 240c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_config_descriptor { 241c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 242c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 243c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 244c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wTotalLength; 245c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bNumInterfaces; 246c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bConfigurationValue; 247c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 iConfiguration; 248c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bmAttributes; 249c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bMaxPower; 250c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 251c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 252c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_CONFIG_SIZE 9 253c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 254c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* from config descriptor bmAttributes */ 255c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */ 256c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */ 257c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */ 258c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CONFIG_ATT_BATTERY (1 << 4) /* battery powered */ 259c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 260c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 261c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 262c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_STRING: String descriptor */ 263c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_string_descriptor { 264c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 265c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 266c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 267c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wData[1]; /* UTF-16LE encoded */ 268c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 269c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 270c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* note that "string" zero is special, it holds language codes that 271c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * the device supports, not Unicode characters. 272c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 273c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 274c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 275c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 276c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_INTERFACE: Interface descriptor */ 277c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_interface_descriptor { 278c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 279c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 280c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 281c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bInterfaceNumber; 282c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bAlternateSetting; 283c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bNumEndpoints; 284c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bInterfaceClass; 285c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bInterfaceSubClass; 286c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bInterfaceProtocol; 287c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 iInterface; 288c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 289c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 290c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_INTERFACE_SIZE 9 291c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 292c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 293c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 294c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_ENDPOINT: Endpoint descriptor */ 295c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_endpoint_descriptor { 296c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 297c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 298c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 299c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bEndpointAddress; 300c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bmAttributes; 301c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wMaxPacketSize; 302c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bInterval; 303c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 304c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* NOTE: these two are _only_ in audio endpoints. */ 305c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */ 306c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bRefresh; 307c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bSynchAddress; 308c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 309c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 310c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_ENDPOINT_SIZE 7 311c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ 312c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 313c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 314c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 315c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Endpoints 316c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 317c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ 318c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_DIR_MASK 0x80 319c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 320c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ 321c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_XFER_CONTROL 0 322c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_XFER_ISOC 1 323c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_XFER_BULK 2 324c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_XFER_INT 3 325c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 326c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 327c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 328c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 329c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 330c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ 331c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_qualifier_descriptor { 332c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 333c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 334c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 335c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 bcdUSB; 336c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDeviceClass; 337c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDeviceSubClass; 338c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDeviceProtocol; 339c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bMaxPacketSize0; 340c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bNumConfigurations; 341c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bRESERVED; 342c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 343c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 344c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 345c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 346c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 347c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_OTG (from OTG 1.0a supplement) */ 348c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_otg_descriptor { 349c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 350c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 351c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 352c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bmAttributes; /* support for HNP, SRP, etc */ 353c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 354c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 355c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* from usb_otg_descriptor.bmAttributes */ 356c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_OTG_SRP (1 << 0) 357c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_OTG_HNP (1 << 1) /* swap host/device roles */ 358c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 359c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 360c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 361c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_DEBUG: for special highspeed devices, replacing serial console */ 362c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_debug_descriptor { 363c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 364c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 365c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 366c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* bulk endpoints with 8 byte maxpacket */ 367c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDebugInEndpoint; 368c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDebugOutEndpoint; 369c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 370c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 371c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 372c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 373c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */ 374c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_interface_assoc_descriptor { 375c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 376c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 377c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 378c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bFirstInterface; 379c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bInterfaceCount; 380c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bFunctionClass; 381c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bFunctionSubClass; 382c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bFunctionProtocol; 383c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 iFunction; 384c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} __attribute__ ((packed)); 385c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 386c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 387c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 388c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 389c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_SECURITY: group of wireless security descriptors, including 390c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * encryption types available for setting up a CC/association. 391c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 392c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_security_descriptor { 393c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 394c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 395c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 396c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wTotalLength; 397c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bNumEncryptionTypes; 398c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 399c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 400c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 401c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 402c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_KEY: used with {GET,SET}_SECURITY_DATA; only public keys 403c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * may be retrieved. 404c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 405c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_key_descriptor { 406c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 407c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 408c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 409c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 tTKID[3]; 410c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bReserved; 411c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bKeyData[0]; 412c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 413c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 414c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 415c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 416c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_ENCRYPTION_TYPE: bundled in DT_SECURITY groups */ 417c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_encryption_descriptor { 418c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 419c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 420c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 421c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bEncryptionType; 422c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENC_TYPE_UNSECURE 0 423c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENC_TYPE_WIRED 1 /* non-wireless mode */ 424c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENC_TYPE_CCM_1 2 /* aes128/cbc session */ 425c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENC_TYPE_RSA_1 3 /* rsa3072/sha1 auth */ 426c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bEncryptionValue; /* use in SET_ENCRYPTION */ 427c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bAuthKeyIndex; 428c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 429c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 430c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 431c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 432c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 433c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_BOS: group of wireless capabilities */ 434c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_bos_descriptor { 435c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 436c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 437c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 438c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wTotalLength; 439c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bNumDeviceCaps; 440c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 441c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 442c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 443c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 444c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_DEVICE_CAPABILITY: grouped with BOS */ 445c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_dev_cap_header { 446c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 447c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 448c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDevCapabilityType; 449c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 450c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 451c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_CAP_TYPE_WIRELESS_USB 1 452c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 453c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_wireless_cap_descriptor { /* Ultra Wide Band */ 454c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 455c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 456c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDevCapabilityType; 457c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 458c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bmAttributes; 459c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_P2P_DRD (1 << 1) 460c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_BEACON_MASK (3 << 2) 461c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_BEACON_SELF (1 << 2) 462c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_BEACON_DIRECTED (2 << 2) 463c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_BEACON_NONE (3 << 2) 464c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wPHYRates; /* bit rates, Mbps */ 465c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_PHY_53 (1 << 0) /* always set */ 466c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_PHY_80 (1 << 1) 467c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_PHY_107 (1 << 2) /* always set */ 468c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_PHY_160 (1 << 3) 469c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_PHY_200 (1 << 4) /* always set */ 470c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_PHY_320 (1 << 5) 471c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_PHY_400 (1 << 6) 472c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_WIRELESS_PHY_480 (1 << 7) 473c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bmTFITXPowerInfo; /* TFI power levels */ 474c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bmFFITXPowerInfo; /* FFI power levels */ 475c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 bmBandGroup; 476c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bReserved; 477c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 478c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 479c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 480c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 481c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_DT_WIRELESS_ENDPOINT_COMP: companion descriptor associated with 482c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * each endpoint descriptor for a wireless device 483c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 484c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_wireless_ep_comp_descriptor { 485c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bLength; 486c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bDescriptorType; 487c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 488c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bMaxBurst; 489c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bMaxSequence; 490c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wMaxStreamDelay; 491c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __le16 wOverTheAirPacketSize; 492c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bOverTheAirInterval; 493c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bmCompAttributes; 494c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_SWITCH_MASK 0x03 /* in bmCompAttributes */ 495c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_SWITCH_NO 0 496c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_SWITCH_SWITCH 1 497c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define USB_ENDPOINT_SWITCH_SCALE 2 498c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 499c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 500c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 501c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 502c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless 503c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * host and a device for connection set up, mutual authentication, and 504c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * exchanging short lived session keys. The handshake depends on a CC. 505c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 506c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_handshake { 507c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bMessageNumber; 508c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bStatus; 509c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 tTKID[3]; 510c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 bReserved; 511c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 CDID[16]; 512c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 nonce[16]; 513c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 MIC[8]; 514c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 515c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 516c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 517c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 518c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC). 519c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * A CC may also be set up using non-wireless secure channels (including 520c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * wired USB!), and some devices may support CCs with multiple hosts. 521c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 522c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct usb_connection_context { 523c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 CHID[16]; /* persistent host id */ 524c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 CDID[16]; /* device id (unique w/in host context) */ 525c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __u8 CK[16]; /* connection key */ 526c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 527c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 528c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*-------------------------------------------------------------------------*/ 529c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 530c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* USB 2.0 defines three speeds, here's how Linux identifies them */ 531c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 532c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruenum usb_device_speed { 533c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_SPEED_UNKNOWN = 0, /* enumerating */ 534c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ 535c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_SPEED_HIGH, /* usb 2.0 */ 536c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_SPEED_VARIABLE, /* wireless (usb 2.5) */ 537c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 538c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 539c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruenum usb_device_state { 540c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* NOTATTACHED isn't in the USB spec, and this state acts 541c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * the same as ATTACHED ... but it's clearer this way. 542c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 543c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_NOTATTACHED = 0, 544c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 545c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* chapter 9 and authentication (wireless) device states */ 546c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_ATTACHED, 547c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_POWERED, /* wired */ 548c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_UNAUTHENTICATED, /* auth */ 549c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_RECONNECTING, /* auth */ 550c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_DEFAULT, /* limited function */ 551c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_ADDRESS, 552c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_CONFIGURED, /* most functions */ 553c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 554c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru USB_STATE_SUSPENDED 555c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 556c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* NOTE: there are actually four different SUSPENDED 557c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * states, returning to POWERED, DEFAULT, ADDRESS, or 558c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * CONFIGURED respectively when SOF tokens flow again. 559c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 560c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 561c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 562c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __LINUX_USB_CH9_H */ 563