]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Usb/UsbBusPei/PeiUsbLib.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbBusPei / PeiUsbLib.h
CommitLineData
4b1bf81c 1/** @file\r
2Common Libarary for PEI USB\r
3\r
d1102dba
LG
4Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved. <BR>\r
5\r
9d510e61 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
4b1bf81c 7\r
8**/\r
9\r
10#ifndef _PEI_USB_LIB_H_\r
11#define _PEI_USB_LIB_H_\r
12\r
13\r
14//\r
15// Standard device request and request type\r
16// By [Spec-USB20/Chapter-9.4]\r
17//\r
18#define USB_DEV_GET_STATUS 0x00\r
19#define USB_DEV_GET_STATUS_REQ_TYPE_D 0x80 // Receiver : Device\r
20#define USB_DEV_GET_STATUS_REQ_TYPE_I 0x81 // Receiver : Interface\r
21#define USB_DEV_GET_STATUS_REQ_TYPE_E 0x82 // Receiver : Endpoint\r
22\r
23#define USB_DEV_CLEAR_FEATURE 0x01\r
24#define USB_DEV_CLEAR_FEATURE_REQ_TYPE_D 0x00 // Receiver : Device\r
25#define USB_DEV_CLEAR_FEATURE_REQ_TYPE_I 0x01 // Receiver : Interface\r
26#define USB_DEV_CLEAR_FEATURE_REQ_TYPE_E 0x02 // Receiver : Endpoint\r
27\r
28#define USB_DEV_SET_FEATURE 0x03\r
29#define USB_DEV_SET_FEATURE_REQ_TYPE_D 0x00 // Receiver : Device\r
30#define USB_DEV_SET_FEATURE_REQ_TYPE_I 0x01 // Receiver : Interface\r
31#define USB_DEV_SET_FEATURE_REQ_TYPE_E 0x02 // Receiver : Endpoint\r
32\r
33#define USB_DEV_SET_ADDRESS 0x05\r
34#define USB_DEV_SET_ADDRESS_REQ_TYPE 0x00\r
35\r
36#define USB_DEV_GET_DESCRIPTOR 0x06\r
37#define USB_DEV_GET_DESCRIPTOR_REQ_TYPE 0x80\r
38\r
39#define USB_DEV_SET_DESCRIPTOR 0x07\r
40#define USB_DEV_SET_DESCRIPTOR_REQ_TYPE 0x00\r
41\r
42#define USB_DEV_GET_CONFIGURATION 0x08\r
43#define USB_DEV_GET_CONFIGURATION_REQ_TYPE 0x80\r
44\r
45#define USB_DEV_SET_CONFIGURATION 0x09\r
46#define USB_DEV_SET_CONFIGURATION_REQ_TYPE 0x00\r
47\r
48#define USB_DEV_GET_INTERFACE 0x0A\r
49#define USB_DEV_GET_INTERFACE_REQ_TYPE 0x81\r
50\r
51#define USB_DEV_SET_INTERFACE 0x0B\r
52#define USB_DEV_SET_INTERFACE_REQ_TYPE 0x01\r
53\r
54#define USB_DEV_SYNCH_FRAME 0x0C\r
55#define USB_DEV_SYNCH_FRAME_REQ_TYPE 0x82\r
56\r
57//\r
58// USB Descriptor types\r
59//\r
60#define USB_DT_DEVICE 0x01\r
61#define USB_DT_CONFIG 0x02\r
62#define USB_DT_STRING 0x03\r
63#define USB_DT_INTERFACE 0x04\r
64#define USB_DT_ENDPOINT 0x05\r
65#define USB_DT_HUB 0x29\r
d987459f 66#define USB_DT_SUPERSPEED_HUB 0x2A\r
4b1bf81c 67#define USB_DT_HID 0x21\r
68\r
69//\r
70// USB request type\r
71//\r
72#define USB_TYPE_STANDARD (0x00 << 5)\r
73#define USB_TYPE_CLASS (0x01 << 5)\r
74#define USB_TYPE_VENDOR (0x02 << 5)\r
75#define USB_TYPE_RESERVED (0x03 << 5)\r
76\r
77//\r
78// USB request targer device\r
79//\r
80#define USB_RECIP_DEVICE 0x00\r
81#define USB_RECIP_INTERFACE 0x01\r
82#define USB_RECIP_ENDPOINT 0x02\r
83#define USB_RECIP_OTHER 0x03\r
84\r
85typedef enum {\r
86 EfiUsbEndpointHalt,\r
87 EfiUsbDeviceRemoteWakeup\r
88} EFI_USB_STANDARD_FEATURE_SELECTOR;\r
89\r
90//\r
91// Usb Data recipient type\r
92//\r
93typedef enum {\r
94 EfiUsbDevice,\r
95 EfiUsbInterface,\r
96 EfiUsbEndpoint\r
97} EFI_USB_RECIPIENT;\r
98\r
99/**\r
100 Get a given usb descriptor.\r
101\r
102 @param PeiServices General-purpose services that are available to every PEIM.\r
103 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
104 @param Value Request Value.\r
105 @param Index Request Index.\r
106 @param DescriptorLength Request descriptor Length.\r
107 @param Descriptor Request descriptor.\r
108\r
109\r
110 @retval EFI_SUCCESS Usb descriptor is obtained successfully.\r
111 @retval EFI_DEVICE_ERROR Cannot get the usb descriptor due to a hardware error.\r
112 @retval Others Other failure occurs.\r
113\r
114**/\r
115EFI_STATUS\r
116PeiUsbGetDescriptor (\r
117 IN EFI_PEI_SERVICES **PeiServices,\r
118 IN PEI_USB_IO_PPI *UsbIoPpi,\r
119 IN UINT16 Value,\r
120 IN UINT16 Index,\r
121 IN UINT16 DescriptorLength,\r
122 OUT VOID *Descriptor\r
123 );\r
124\r
125/**\r
126 Set a usb device with a specified address.\r
127\r
128 @param PeiServices General-purpose services that are available to every PEIM.\r
129 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
130 @param AddressValue The address to assign.\r
131\r
132 @retval EFI_SUCCESS Usb device address is set successfully.\r
133 @retval EFI_DEVICE_ERROR Cannot set the usb address due to a hardware error.\r
134 @retval Others Other failure occurs.\r
135\r
136**/\r
137EFI_STATUS\r
138PeiUsbSetDeviceAddress (\r
139 IN EFI_PEI_SERVICES **PeiServices,\r
140 IN PEI_USB_IO_PPI *UsbIoPpi,\r
141 IN UINT16 AddressValue\r
142 );\r
143\r
4b1bf81c 144\r
145/**\r
146 Configure a usb device to Configuration 1.\r
147\r
148 @param PeiServices General-purpose services that are available to every PEIM.\r
149 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
150\r
151 @retval EFI_SUCCESS Usb device is set to use Configuration 1 successfully.\r
152 @retval EFI_DEVICE_ERROR Cannot set the usb device due to a hardware error.\r
153 @retval Others Other failure occurs.\r
154\r
155**/\r
156EFI_STATUS\r
157PeiUsbSetConfiguration (\r
158 IN EFI_PEI_SERVICES **PeiServices,\r
159 IN PEI_USB_IO_PPI *UsbIoPpi\r
160 );\r
161\r
4b1bf81c 162/**\r
163 Judge if the port is connected with a usb device or not.\r
164\r
165 @param PortStatus The usb port status gotten.\r
166\r
167 @retval TRUE A usb device is connected with the port.\r
168 @retval FALSE No usb device is connected with the port.\r
169\r
170**/\r
171BOOLEAN\r
172IsPortConnect (\r
173 IN UINT16 PortStatus\r
174 );\r
175\r
176/**\r
d987459f 177 Get device speed according to port status.\r
4b1bf81c 178\r
d987459f 179 @param PortStatus The usb port status gotten.\r
4b1bf81c 180\r
d987459f 181 @return Device speed value.\r
4b1bf81c 182\r
183**/\r
184UINTN\r
d987459f
SZ
185PeiUsbGetDeviceSpeed (\r
186 IN UINT16 PortStatus\r
4b1bf81c 187 );\r
188\r
4b1bf81c 189#endif\r