1*f334afcfSToomas Soome /** @file 2*f334afcfSToomas Soome Support for USB 2.0 standard. 3*f334afcfSToomas Soome 4*f334afcfSToomas Soome Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> 5*f334afcfSToomas Soome SPDX-License-Identifier: BSD-2-Clause-Patent 6*f334afcfSToomas Soome 7*f334afcfSToomas Soome **/ 8*f334afcfSToomas Soome 9*f334afcfSToomas Soome #ifndef __USB_H__ 10*f334afcfSToomas Soome #define __USB_H__ 11*f334afcfSToomas Soome 12*f334afcfSToomas Soome // 13*f334afcfSToomas Soome // Subset of Class and Subclass definitions from USB Specs 14*f334afcfSToomas Soome // 15*f334afcfSToomas Soome 16*f334afcfSToomas Soome // 17*f334afcfSToomas Soome // Usb mass storage class code 18*f334afcfSToomas Soome // 19*f334afcfSToomas Soome #define USB_MASS_STORE_CLASS 0x08 20*f334afcfSToomas Soome 21*f334afcfSToomas Soome // 22*f334afcfSToomas Soome // Usb mass storage subclass code, specify the command set used. 23*f334afcfSToomas Soome // 24*f334afcfSToomas Soome #define USB_MASS_STORE_RBC 0x01 ///< Reduced Block Commands 25*f334afcfSToomas Soome #define USB_MASS_STORE_8020I 0x02 ///< SFF-8020i, typically a CD/DVD device 26*f334afcfSToomas Soome #define USB_MASS_STORE_QIC 0x03 ///< Typically a tape device 27*f334afcfSToomas Soome #define USB_MASS_STORE_UFI 0x04 ///< Typically a floppy disk driver device 28*f334afcfSToomas Soome #define USB_MASS_STORE_8070I 0x05 ///< SFF-8070i, typically a floppy disk driver device. 29*f334afcfSToomas Soome #define USB_MASS_STORE_SCSI 0x06 ///< SCSI transparent command set 30*f334afcfSToomas Soome 31*f334afcfSToomas Soome // 32*f334afcfSToomas Soome // Usb mass storage protocol code, specify the transport protocol 33*f334afcfSToomas Soome // 34*f334afcfSToomas Soome #define USB_MASS_STORE_CBI0 0x00 ///< CBI protocol with command completion interrupt 35*f334afcfSToomas Soome #define USB_MASS_STORE_CBI1 0x01 ///< CBI protocol without command completion interrupt 36*f334afcfSToomas Soome #define USB_MASS_STORE_BOT 0x50 ///< Bulk-Only Transport 37*f334afcfSToomas Soome 38*f334afcfSToomas Soome // 39*f334afcfSToomas Soome // Standard device request and request type 40*f334afcfSToomas Soome // USB 2.0 spec, Section 9.4 41*f334afcfSToomas Soome // 42*f334afcfSToomas Soome #define USB_DEV_GET_STATUS 0x00 43*f334afcfSToomas Soome #define USB_DEV_GET_STATUS_REQ_TYPE_D 0x80 // Receiver : Device 44*f334afcfSToomas Soome #define USB_DEV_GET_STATUS_REQ_TYPE_I 0x81 // Receiver : Interface 45*f334afcfSToomas Soome #define USB_DEV_GET_STATUS_REQ_TYPE_E 0x82 // Receiver : Endpoint 46*f334afcfSToomas Soome 47*f334afcfSToomas Soome #define USB_DEV_CLEAR_FEATURE 0x01 48*f334afcfSToomas Soome #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_D 0x00 // Receiver : Device 49*f334afcfSToomas Soome #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_I 0x01 // Receiver : Interface 50*f334afcfSToomas Soome #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_E 0x02 // Receiver : Endpoint 51*f334afcfSToomas Soome 52*f334afcfSToomas Soome #define USB_DEV_SET_FEATURE 0x03 53*f334afcfSToomas Soome #define USB_DEV_SET_FEATURE_REQ_TYPE_D 0x00 // Receiver : Device 54*f334afcfSToomas Soome #define USB_DEV_SET_FEATURE_REQ_TYPE_I 0x01 // Receiver : Interface 55*f334afcfSToomas Soome #define USB_DEV_SET_FEATURE_REQ_TYPE_E 0x02 // Receiver : Endpoint 56*f334afcfSToomas Soome 57*f334afcfSToomas Soome #define USB_DEV_SET_ADDRESS 0x05 58*f334afcfSToomas Soome #define USB_DEV_SET_ADDRESS_REQ_TYPE 0x00 59*f334afcfSToomas Soome 60*f334afcfSToomas Soome #define USB_DEV_GET_DESCRIPTOR 0x06 61*f334afcfSToomas Soome #define USB_DEV_GET_DESCRIPTOR_REQ_TYPE 0x80 62*f334afcfSToomas Soome 63*f334afcfSToomas Soome #define USB_DEV_SET_DESCRIPTOR 0x07 64*f334afcfSToomas Soome #define USB_DEV_SET_DESCRIPTOR_REQ_TYPE 0x00 65*f334afcfSToomas Soome 66*f334afcfSToomas Soome #define USB_DEV_GET_CONFIGURATION 0x08 67*f334afcfSToomas Soome #define USB_DEV_GET_CONFIGURATION_REQ_TYPE 0x80 68*f334afcfSToomas Soome 69*f334afcfSToomas Soome #define USB_DEV_SET_CONFIGURATION 0x09 70*f334afcfSToomas Soome #define USB_DEV_SET_CONFIGURATION_REQ_TYPE 0x00 71*f334afcfSToomas Soome 72*f334afcfSToomas Soome #define USB_DEV_GET_INTERFACE 0x0A 73*f334afcfSToomas Soome #define USB_DEV_GET_INTERFACE_REQ_TYPE 0x81 74*f334afcfSToomas Soome 75*f334afcfSToomas Soome #define USB_DEV_SET_INTERFACE 0x0B 76*f334afcfSToomas Soome #define USB_DEV_SET_INTERFACE_REQ_TYPE 0x01 77*f334afcfSToomas Soome 78*f334afcfSToomas Soome #define USB_DEV_SYNCH_FRAME 0x0C 79*f334afcfSToomas Soome #define USB_DEV_SYNCH_FRAME_REQ_TYPE 0x82 80*f334afcfSToomas Soome 81*f334afcfSToomas Soome // 82*f334afcfSToomas Soome // USB standard descriptors and reqeust 83*f334afcfSToomas Soome // 84*f334afcfSToomas Soome #pragma pack(1) 85*f334afcfSToomas Soome 86*f334afcfSToomas Soome /// 87*f334afcfSToomas Soome /// Format of Setup Data for USB Device Requests 88*f334afcfSToomas Soome /// USB 2.0 spec, Section 9.3 89*f334afcfSToomas Soome /// 90*f334afcfSToomas Soome typedef struct { 91*f334afcfSToomas Soome UINT8 RequestType; 92*f334afcfSToomas Soome UINT8 Request; 93*f334afcfSToomas Soome UINT16 Value; 94*f334afcfSToomas Soome UINT16 Index; 95*f334afcfSToomas Soome UINT16 Length; 96*f334afcfSToomas Soome } USB_DEVICE_REQUEST; 97*f334afcfSToomas Soome 98*f334afcfSToomas Soome /// 99*f334afcfSToomas Soome /// Standard Device Descriptor 100*f334afcfSToomas Soome /// USB 2.0 spec, Section 9.6.1 101*f334afcfSToomas Soome /// 102*f334afcfSToomas Soome typedef struct { 103*f334afcfSToomas Soome UINT8 Length; 104*f334afcfSToomas Soome UINT8 DescriptorType; 105*f334afcfSToomas Soome UINT16 BcdUSB; 106*f334afcfSToomas Soome UINT8 DeviceClass; 107*f334afcfSToomas Soome UINT8 DeviceSubClass; 108*f334afcfSToomas Soome UINT8 DeviceProtocol; 109*f334afcfSToomas Soome UINT8 MaxPacketSize0; 110*f334afcfSToomas Soome UINT16 IdVendor; 111*f334afcfSToomas Soome UINT16 IdProduct; 112*f334afcfSToomas Soome UINT16 BcdDevice; 113*f334afcfSToomas Soome UINT8 StrManufacturer; 114*f334afcfSToomas Soome UINT8 StrProduct; 115*f334afcfSToomas Soome UINT8 StrSerialNumber; 116*f334afcfSToomas Soome UINT8 NumConfigurations; 117*f334afcfSToomas Soome } USB_DEVICE_DESCRIPTOR; 118*f334afcfSToomas Soome 119*f334afcfSToomas Soome /// 120*f334afcfSToomas Soome /// Standard Configuration Descriptor 121*f334afcfSToomas Soome /// USB 2.0 spec, Section 9.6.3 122*f334afcfSToomas Soome /// 123*f334afcfSToomas Soome typedef struct { 124*f334afcfSToomas Soome UINT8 Length; 125*f334afcfSToomas Soome UINT8 DescriptorType; 126*f334afcfSToomas Soome UINT16 TotalLength; 127*f334afcfSToomas Soome UINT8 NumInterfaces; 128*f334afcfSToomas Soome UINT8 ConfigurationValue; 129*f334afcfSToomas Soome UINT8 Configuration; 130*f334afcfSToomas Soome UINT8 Attributes; 131*f334afcfSToomas Soome UINT8 MaxPower; 132*f334afcfSToomas Soome } USB_CONFIG_DESCRIPTOR; 133*f334afcfSToomas Soome 134*f334afcfSToomas Soome /// 135*f334afcfSToomas Soome /// Standard Interface Descriptor 136*f334afcfSToomas Soome /// USB 2.0 spec, Section 9.6.5 137*f334afcfSToomas Soome /// 138*f334afcfSToomas Soome typedef struct { 139*f334afcfSToomas Soome UINT8 Length; 140*f334afcfSToomas Soome UINT8 DescriptorType; 141*f334afcfSToomas Soome UINT8 InterfaceNumber; 142*f334afcfSToomas Soome UINT8 AlternateSetting; 143*f334afcfSToomas Soome UINT8 NumEndpoints; 144*f334afcfSToomas Soome UINT8 InterfaceClass; 145*f334afcfSToomas Soome UINT8 InterfaceSubClass; 146*f334afcfSToomas Soome UINT8 InterfaceProtocol; 147*f334afcfSToomas Soome UINT8 Interface; 148*f334afcfSToomas Soome } USB_INTERFACE_DESCRIPTOR; 149*f334afcfSToomas Soome 150*f334afcfSToomas Soome /// 151*f334afcfSToomas Soome /// Standard Endpoint Descriptor 152*f334afcfSToomas Soome /// USB 2.0 spec, Section 9.6.6 153*f334afcfSToomas Soome /// 154*f334afcfSToomas Soome typedef struct { 155*f334afcfSToomas Soome UINT8 Length; 156*f334afcfSToomas Soome UINT8 DescriptorType; 157*f334afcfSToomas Soome UINT8 EndpointAddress; 158*f334afcfSToomas Soome UINT8 Attributes; 159*f334afcfSToomas Soome UINT16 MaxPacketSize; 160*f334afcfSToomas Soome UINT8 Interval; 161*f334afcfSToomas Soome } USB_ENDPOINT_DESCRIPTOR; 162*f334afcfSToomas Soome 163*f334afcfSToomas Soome /// 164*f334afcfSToomas Soome /// UNICODE String Descriptor 165*f334afcfSToomas Soome /// USB 2.0 spec, Section 9.6.7 166*f334afcfSToomas Soome /// 167*f334afcfSToomas Soome typedef struct { 168*f334afcfSToomas Soome UINT8 Length; 169*f334afcfSToomas Soome UINT8 DescriptorType; 170*f334afcfSToomas Soome CHAR16 String[1]; 171*f334afcfSToomas Soome } EFI_USB_STRING_DESCRIPTOR; 172*f334afcfSToomas Soome 173*f334afcfSToomas Soome #pragma pack() 174*f334afcfSToomas Soome 175*f334afcfSToomas Soome typedef enum { 176*f334afcfSToomas Soome // 177*f334afcfSToomas Soome // USB request type 178*f334afcfSToomas Soome // 179*f334afcfSToomas Soome USB_REQ_TYPE_STANDARD = (0x00 << 5), 180*f334afcfSToomas Soome USB_REQ_TYPE_CLASS = (0x01 << 5), 181*f334afcfSToomas Soome USB_REQ_TYPE_VENDOR = (0x02 << 5), 182*f334afcfSToomas Soome 183*f334afcfSToomas Soome // 184*f334afcfSToomas Soome // Standard control transfer request type, or the value 185*f334afcfSToomas Soome // to fill in EFI_USB_DEVICE_REQUEST.Request 186*f334afcfSToomas Soome // 187*f334afcfSToomas Soome USB_REQ_GET_STATUS = 0x00, 188*f334afcfSToomas Soome USB_REQ_CLEAR_FEATURE = 0x01, 189*f334afcfSToomas Soome USB_REQ_SET_FEATURE = 0x03, 190*f334afcfSToomas Soome USB_REQ_SET_ADDRESS = 0x05, 191*f334afcfSToomas Soome USB_REQ_GET_DESCRIPTOR = 0x06, 192*f334afcfSToomas Soome USB_REQ_SET_DESCRIPTOR = 0x07, 193*f334afcfSToomas Soome USB_REQ_GET_CONFIG = 0x08, 194*f334afcfSToomas Soome USB_REQ_SET_CONFIG = 0x09, 195*f334afcfSToomas Soome USB_REQ_GET_INTERFACE = 0x0A, 196*f334afcfSToomas Soome USB_REQ_SET_INTERFACE = 0x0B, 197*f334afcfSToomas Soome USB_REQ_SYNCH_FRAME = 0x0C, 198*f334afcfSToomas Soome 199*f334afcfSToomas Soome // 200*f334afcfSToomas Soome // Usb control transfer target 201*f334afcfSToomas Soome // 202*f334afcfSToomas Soome USB_TARGET_DEVICE = 0, 203*f334afcfSToomas Soome USB_TARGET_INTERFACE = 0x01, 204*f334afcfSToomas Soome USB_TARGET_ENDPOINT = 0x02, 205*f334afcfSToomas Soome USB_TARGET_OTHER = 0x03, 206*f334afcfSToomas Soome 207*f334afcfSToomas Soome // 208*f334afcfSToomas Soome // USB Descriptor types 209*f334afcfSToomas Soome // 210*f334afcfSToomas Soome USB_DESC_TYPE_DEVICE = 0x01, 211*f334afcfSToomas Soome USB_DESC_TYPE_CONFIG = 0x02, 212*f334afcfSToomas Soome USB_DESC_TYPE_STRING = 0x03, 213*f334afcfSToomas Soome USB_DESC_TYPE_INTERFACE = 0x04, 214*f334afcfSToomas Soome USB_DESC_TYPE_ENDPOINT = 0x05, 215*f334afcfSToomas Soome USB_DESC_TYPE_HID = 0x21, 216*f334afcfSToomas Soome USB_DESC_TYPE_REPORT = 0x22, 217*f334afcfSToomas Soome 218*f334afcfSToomas Soome // 219*f334afcfSToomas Soome // Features to be cleared by CLEAR_FEATURE requests 220*f334afcfSToomas Soome // 221*f334afcfSToomas Soome USB_FEATURE_ENDPOINT_HALT = 0, 222*f334afcfSToomas Soome 223*f334afcfSToomas Soome // 224*f334afcfSToomas Soome // USB endpoint types: 00: control, 01: isochronous, 10: bulk, 11: interrupt 225*f334afcfSToomas Soome // 226*f334afcfSToomas Soome USB_ENDPOINT_CONTROL = 0x00, 227*f334afcfSToomas Soome USB_ENDPOINT_ISO = 0x01, 228*f334afcfSToomas Soome USB_ENDPOINT_BULK = 0x02, 229*f334afcfSToomas Soome USB_ENDPOINT_INTERRUPT = 0x03, 230*f334afcfSToomas Soome 231*f334afcfSToomas Soome USB_ENDPOINT_TYPE_MASK = 0x03, 232*f334afcfSToomas Soome USB_ENDPOINT_DIR_IN = 0x80, 233*f334afcfSToomas Soome 234*f334afcfSToomas Soome // 235*f334afcfSToomas Soome // Use 200 ms to increase the error handling response time 236*f334afcfSToomas Soome // 237*f334afcfSToomas Soome EFI_USB_INTERRUPT_DELAY = 2000000 238*f334afcfSToomas Soome } USB_TYPES_DEFINITION; 239*f334afcfSToomas Soome 240*f334afcfSToomas Soome // 241*f334afcfSToomas Soome // HID constants definition, see Device Class Definition 242*f334afcfSToomas Soome // for Human Interface Devices (HID) rev1.11 243*f334afcfSToomas Soome // 244*f334afcfSToomas Soome 245*f334afcfSToomas Soome // 246*f334afcfSToomas Soome // HID standard GET_DESCRIPTOR request. 247*f334afcfSToomas Soome // 248*f334afcfSToomas Soome #define USB_HID_GET_DESCRIPTOR_REQ_TYPE 0x81 249*f334afcfSToomas Soome 250*f334afcfSToomas Soome // 251*f334afcfSToomas Soome // HID specific requests. 252*f334afcfSToomas Soome // 253*f334afcfSToomas Soome #define USB_HID_CLASS_GET_REQ_TYPE 0xa1 254*f334afcfSToomas Soome #define USB_HID_CLASS_SET_REQ_TYPE 0x21 255*f334afcfSToomas Soome 256*f334afcfSToomas Soome // 257*f334afcfSToomas Soome // HID report item format 258*f334afcfSToomas Soome // 259*f334afcfSToomas Soome #define HID_ITEM_FORMAT_SHORT 0 260*f334afcfSToomas Soome #define HID_ITEM_FORMAT_LONG 1 261*f334afcfSToomas Soome 262*f334afcfSToomas Soome // 263*f334afcfSToomas Soome // Special tag indicating long items 264*f334afcfSToomas Soome // 265*f334afcfSToomas Soome #define HID_ITEM_TAG_LONG 15 266*f334afcfSToomas Soome 267*f334afcfSToomas Soome // 268*f334afcfSToomas Soome // HID report descriptor item type (prefix bit 2,3) 269*f334afcfSToomas Soome // 270*f334afcfSToomas Soome #define HID_ITEM_TYPE_MAIN 0 271*f334afcfSToomas Soome #define HID_ITEM_TYPE_GLOBAL 1 272*f334afcfSToomas Soome #define HID_ITEM_TYPE_LOCAL 2 273*f334afcfSToomas Soome #define HID_ITEM_TYPE_RESERVED 3 274*f334afcfSToomas Soome 275*f334afcfSToomas Soome // 276*f334afcfSToomas Soome // HID report descriptor main item tags 277*f334afcfSToomas Soome // 278*f334afcfSToomas Soome #define HID_MAIN_ITEM_TAG_INPUT 8 279*f334afcfSToomas Soome #define HID_MAIN_ITEM_TAG_OUTPUT 9 280*f334afcfSToomas Soome #define HID_MAIN_ITEM_TAG_FEATURE 11 281*f334afcfSToomas Soome #define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10 282*f334afcfSToomas Soome #define HID_MAIN_ITEM_TAG_END_COLLECTION 12 283*f334afcfSToomas Soome 284*f334afcfSToomas Soome // 285*f334afcfSToomas Soome // HID report descriptor main item contents 286*f334afcfSToomas Soome // 287*f334afcfSToomas Soome #define HID_MAIN_ITEM_CONSTANT 0x001 288*f334afcfSToomas Soome #define HID_MAIN_ITEM_VARIABLE 0x002 289*f334afcfSToomas Soome #define HID_MAIN_ITEM_RELATIVE 0x004 290*f334afcfSToomas Soome #define HID_MAIN_ITEM_WRAP 0x008 291*f334afcfSToomas Soome #define HID_MAIN_ITEM_NONLINEAR 0x010 292*f334afcfSToomas Soome #define HID_MAIN_ITEM_NO_PREFERRED 0x020 293*f334afcfSToomas Soome #define HID_MAIN_ITEM_NULL_STATE 0x040 294*f334afcfSToomas Soome #define HID_MAIN_ITEM_VOLATILE 0x080 295*f334afcfSToomas Soome #define HID_MAIN_ITEM_BUFFERED_BYTE 0x100 296*f334afcfSToomas Soome 297*f334afcfSToomas Soome // 298*f334afcfSToomas Soome // HID report descriptor collection item types 299*f334afcfSToomas Soome // 300*f334afcfSToomas Soome #define HID_COLLECTION_PHYSICAL 0 301*f334afcfSToomas Soome #define HID_COLLECTION_APPLICATION 1 302*f334afcfSToomas Soome #define HID_COLLECTION_LOGICAL 2 303*f334afcfSToomas Soome 304*f334afcfSToomas Soome // 305*f334afcfSToomas Soome // HID report descriptor global item tags 306*f334afcfSToomas Soome // 307*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0 308*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1 309*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2 310*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3 311*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4 312*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5 313*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_UNIT 6 314*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7 315*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_REPORT_ID 8 316*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9 317*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_PUSH 10 318*f334afcfSToomas Soome #define HID_GLOBAL_ITEM_TAG_POP 11 319*f334afcfSToomas Soome 320*f334afcfSToomas Soome // 321*f334afcfSToomas Soome // HID report descriptor local item tags 322*f334afcfSToomas Soome // 323*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_USAGE 0 324*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1 325*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2 326*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3 327*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4 328*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5 329*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_STRING_INDEX 7 330*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8 331*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9 332*f334afcfSToomas Soome #define HID_LOCAL_ITEM_TAG_DELIMITER 10 333*f334afcfSToomas Soome 334*f334afcfSToomas Soome // 335*f334afcfSToomas Soome // HID report types 336*f334afcfSToomas Soome // 337*f334afcfSToomas Soome #define HID_INPUT_REPORT 1 338*f334afcfSToomas Soome #define HID_OUTPUT_REPORT 2 339*f334afcfSToomas Soome #define HID_FEATURE_REPORT 3 340*f334afcfSToomas Soome 341*f334afcfSToomas Soome // 342*f334afcfSToomas Soome // HID class protocol request 343*f334afcfSToomas Soome // 344*f334afcfSToomas Soome #define EFI_USB_GET_REPORT_REQUEST 0x01 345*f334afcfSToomas Soome #define EFI_USB_GET_IDLE_REQUEST 0x02 346*f334afcfSToomas Soome #define EFI_USB_GET_PROTOCOL_REQUEST 0x03 347*f334afcfSToomas Soome #define EFI_USB_SET_REPORT_REQUEST 0x09 348*f334afcfSToomas Soome #define EFI_USB_SET_IDLE_REQUEST 0x0a 349*f334afcfSToomas Soome #define EFI_USB_SET_PROTOCOL_REQUEST 0x0b 350*f334afcfSToomas Soome 351*f334afcfSToomas Soome #pragma pack(1) 352*f334afcfSToomas Soome /// 353*f334afcfSToomas Soome /// Descriptor header for Report/Physical Descriptors 354*f334afcfSToomas Soome /// HID 1.1, section 6.2.1 355*f334afcfSToomas Soome /// 356*f334afcfSToomas Soome typedef struct hid_class_descriptor { 357*f334afcfSToomas Soome UINT8 DescriptorType; 358*f334afcfSToomas Soome UINT16 DescriptorLength; 359*f334afcfSToomas Soome } EFI_USB_HID_CLASS_DESCRIPTOR; 360*f334afcfSToomas Soome 361*f334afcfSToomas Soome /// 362*f334afcfSToomas Soome /// The HID descriptor identifies the length and type 363*f334afcfSToomas Soome /// of subordinate descriptors for a device. 364*f334afcfSToomas Soome /// HID 1.1, section 6.2.1 365*f334afcfSToomas Soome /// 366*f334afcfSToomas Soome typedef struct hid_descriptor { 367*f334afcfSToomas Soome UINT8 Length; 368*f334afcfSToomas Soome UINT8 DescriptorType; 369*f334afcfSToomas Soome UINT16 BcdHID; 370*f334afcfSToomas Soome UINT8 CountryCode; 371*f334afcfSToomas Soome UINT8 NumDescriptors; 372*f334afcfSToomas Soome EFI_USB_HID_CLASS_DESCRIPTOR HidClassDesc[1]; 373*f334afcfSToomas Soome } EFI_USB_HID_DESCRIPTOR; 374*f334afcfSToomas Soome 375*f334afcfSToomas Soome #pragma pack() 376*f334afcfSToomas Soome 377*f334afcfSToomas Soome #endif 378