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