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