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