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