]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbBusPei / HubPeim.h
CommitLineData
4b1bf81c 1/** @file\r
2Constants definitions for Usb Hub Peim\r
3\r
72750e3b 4Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
d1102dba 5\r
9d510e61 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
4b1bf81c 7\r
8**/\r
9\r
10#ifndef _PEI_HUB_PEIM_H_\r
11#define _PEI_HUB_PEIM_H_\r
12\r
4b1bf81c 13//\r
14// Hub feature numbers\r
15//\r
16#define C_HUB_LOCAL_POWER 0\r
17#define C_HUB_OVER_CURRENT 1\r
18\r
19//\r
20// Hub class code & sub class code\r
21//\r
22#define CLASS_CODE_HUB 0x09\r
23#define SUB_CLASS_CODE_HUB 0\r
24\r
25//\r
26// Hub Status & Hub Change bit masks\r
27//\r
28#define HUB_STATUS_LOCAL_POWER 0x0001\r
29#define HUB_STATUS_OVERCURRENT 0x0002\r
30\r
31#define HUB_CHANGE_LOCAL_POWER 0x0001\r
32#define HUB_CHANGE_OVERCURRENT 0x0002\r
33\r
34//\r
35// Hub Characteristics\r
36//\r
1436aea4
MK
37#define HUB_CHAR_LPSM 0x0003\r
38#define HUB_CHAR_COMPOUND 0x0004\r
39#define HUB_CHAR_OCPM 0x0018\r
4b1bf81c 40\r
41//\r
42// Standard hub request and request type\r
43// By [Spec-USB20/Chapter-11.24]\r
44//\r
1436aea4
MK
45#define USB_HUB_CLEAR_FEATURE 0x01\r
46#define USB_HUB_CLEAR_FEATURE_REQ_TYPE 0x20\r
4b1bf81c 47\r
1436aea4
MK
48#define USB_HUB_CLEAR_FEATURE_PORT 0x01\r
49#define USB_HUB_CLEAR_FEATURE_PORT_REQ_TYPE 0x23\r
4b1bf81c 50\r
1436aea4
MK
51#define USB_HUB_GET_BUS_STATE 0x02\r
52#define USB_HUB_GET_BUS_STATE_REQ_TYPE 0xA3\r
4b1bf81c 53\r
1436aea4
MK
54#define USB_HUB_GET_DESCRIPTOR 0x06\r
55#define USB_HUB_GET_DESCRIPTOR_REQ_TYPE 0xA0\r
4b1bf81c 56\r
1436aea4
MK
57#define USB_HUB_GET_HUB_STATUS 0x00\r
58#define USB_HUB_GET_HUB_STATUS_REQ_TYPE 0xA0\r
4b1bf81c 59\r
1436aea4
MK
60#define USB_HUB_GET_PORT_STATUS 0x00\r
61#define USB_HUB_GET_PORT_STATUS_REQ_TYPE 0xA3\r
4b1bf81c 62\r
1436aea4
MK
63#define USB_HUB_SET_DESCRIPTOR 0x07\r
64#define USB_HUB_SET_DESCRIPTOR_REQ_TYPE 0x20\r
4b1bf81c 65\r
1436aea4
MK
66#define USB_HUB_SET_HUB_FEATURE 0x03\r
67#define USB_HUB_SET_HUB_FEATURE_REQ_TYPE 0x20\r
4b1bf81c 68\r
1436aea4
MK
69#define USB_HUB_SET_PORT_FEATURE 0x03\r
70#define USB_HUB_SET_PORT_FEATURE_REQ_TYPE 0x23\r
4b1bf81c 71\r
1436aea4
MK
72#define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE)\r
73#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)\r
4b1bf81c 74\r
1436aea4 75#define USB_HUB_REQ_SET_DEPTH 12\r
d987459f 76\r
4b1bf81c 77#define MAXBYTES 8\r
78#pragma pack(1)\r
79//\r
13a623cf 80// Hub descriptor, the last two fields are of variable length.\r
4b1bf81c 81//\r
82typedef struct {\r
1436aea4
MK
83 UINT8 Length;\r
84 UINT8 DescriptorType;\r
85 UINT8 NbrPorts;\r
86 UINT8 HubCharacteristics[2];\r
87 UINT8 PwrOn2PwrGood;\r
88 UINT8 HubContrCurrent;\r
89 UINT8 Filler[MAXBYTES];\r
4b1bf81c 90} EFI_USB_HUB_DESCRIPTOR;\r
91\r
92typedef struct {\r
1436aea4
MK
93 UINT16 HubStatus;\r
94 UINT16 HubChangeStatus;\r
4b1bf81c 95} EFI_USB_HUB_STATUS;\r
96\r
97#pragma pack()\r
1436aea4 98\r
4b1bf81c 99/**\r
100 Get a given hub port status.\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 Port Usb hub port number (starting from 1).\r
105 @param PortStatus Current Hub port status and change status.\r
106\r
107 @retval EFI_SUCCESS Port status is obtained successfully.\r
108 @retval EFI_DEVICE_ERROR Cannot get the port status due to a hardware error.\r
109 @retval Others Other failure occurs.\r
110\r
111**/\r
112EFI_STATUS\r
113PeiHubGetPortStatus (\r
1436aea4
MK
114 IN EFI_PEI_SERVICES **PeiServices,\r
115 IN PEI_USB_IO_PPI *UsbIoPpi,\r
116 IN UINT8 Port,\r
117 OUT UINT32 *PortStatus\r
4b1bf81c 118 );\r
119\r
120/**\r
121 Set specified feature to a given hub port.\r
122\r
123 @param PeiServices General-purpose services that are available to every PEIM.\r
124 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
125 @param Port Usb hub port number (starting from 1).\r
126 @param Value New feature value.\r
127\r
128 @retval EFI_SUCCESS Port feature is set successfully.\r
129 @retval EFI_DEVICE_ERROR Cannot set the port feature due to a hardware error.\r
130 @retval Others Other failure occurs.\r
131\r
132**/\r
133EFI_STATUS\r
134PeiHubSetPortFeature (\r
1436aea4
MK
135 IN EFI_PEI_SERVICES **PeiServices,\r
136 IN PEI_USB_IO_PPI *UsbIoPpi,\r
137 IN UINT8 Port,\r
138 IN UINT8 Value\r
4b1bf81c 139 );\r
140\r
4b1bf81c 141/**\r
142 Get a given hub status.\r
143\r
144 @param PeiServices General-purpose services that are available to every PEIM.\r
145 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
146 @param HubStatus Current Hub status and change status.\r
147\r
148 @retval EFI_SUCCESS Hub status is obtained successfully.\r
149 @retval EFI_DEVICE_ERROR Cannot get the hub status due to a hardware error.\r
150 @retval Others Other failure occurs.\r
151\r
152**/\r
153EFI_STATUS\r
154PeiHubGetHubStatus (\r
1436aea4
MK
155 IN EFI_PEI_SERVICES **PeiServices,\r
156 IN PEI_USB_IO_PPI *UsbIoPpi,\r
157 OUT UINT32 *HubStatus\r
4b1bf81c 158 );\r
159\r
160/**\r
161 Clear specified feature on a given hub port.\r
162\r
163 @param PeiServices General-purpose services that are available to every PEIM.\r
164 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
165 @param Port Usb hub port number (starting from 1).\r
166 @param Value Feature value that will be cleared from the hub port.\r
167\r
168 @retval EFI_SUCCESS Port feature is cleared successfully.\r
169 @retval EFI_DEVICE_ERROR Cannot clear the port feature due to a hardware error.\r
170 @retval Others Other failure occurs.\r
171\r
172**/\r
173EFI_STATUS\r
174PeiHubClearPortFeature (\r
1436aea4
MK
175 IN EFI_PEI_SERVICES **PeiServices,\r
176 IN PEI_USB_IO_PPI *UsbIoPpi,\r
177 IN UINT8 Port,\r
178 IN UINT8 Value\r
4b1bf81c 179 );\r
180\r
181/**\r
182 Clear specified feature on a given hub.\r
183\r
184 @param PeiServices General-purpose services that are available to every PEIM.\r
185 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
186 @param Value Feature value that will be cleared from the hub port.\r
187\r
188 @retval EFI_SUCCESS Hub feature is cleared successfully.\r
189 @retval EFI_DEVICE_ERROR Cannot clear the hub feature due to a hardware error.\r
190 @retval Others Other failure occurs.\r
191\r
192**/\r
193EFI_STATUS\r
194PeiHubClearHubFeature (\r
1436aea4
MK
195 IN EFI_PEI_SERVICES **PeiServices,\r
196 IN PEI_USB_IO_PPI *UsbIoPpi,\r
197 IN UINT8 Value\r
4b1bf81c 198 );\r
199\r
200/**\r
201 Get a given hub descriptor.\r
202\r
203 @param PeiServices General-purpose services that are available to every PEIM.\r
72750e3b 204 @param PeiUsbDevice Indicates the hub controller device.\r
4b1bf81c 205 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
206 @param DescriptorSize The length of Hub Descriptor buffer.\r
207 @param HubDescriptor Caller allocated buffer to store the hub descriptor if\r
208 successfully returned.\r
209\r
210 @retval EFI_SUCCESS Hub descriptor is obtained successfully.\r
211 @retval EFI_DEVICE_ERROR Cannot get the hub descriptor due to a hardware error.\r
212 @retval Others Other failure occurs.\r
213\r
214**/\r
215EFI_STATUS\r
216PeiGetHubDescriptor (\r
217 IN EFI_PEI_SERVICES **PeiServices,\r
72750e3b 218 IN PEI_USB_DEVICE *PeiUsbDevice,\r
4b1bf81c 219 IN PEI_USB_IO_PPI *UsbIoPpi,\r
220 IN UINTN DescriptorSize,\r
221 OUT EFI_USB_HUB_DESCRIPTOR *HubDescriptor\r
222 );\r
223\r
224/**\r
225 Configure a given hub.\r
226\r
227 @param PeiServices General-purpose services that are available to every PEIM.\r
228 @param PeiUsbDevice Indicating the hub controller device that will be configured\r
229\r
230 @retval EFI_SUCCESS Hub configuration is done successfully.\r
231 @retval EFI_DEVICE_ERROR Cannot configure the hub due to a hardware error.\r
232\r
233**/\r
234EFI_STATUS\r
235PeiDoHubConfig (\r
1436aea4
MK
236 IN EFI_PEI_SERVICES **PeiServices,\r
237 IN PEI_USB_DEVICE *PeiUsbDevice\r
4b1bf81c 238 );\r
239\r
240/**\r
241 Send reset signal over the given root hub port.\r
242\r
243 @param PeiServices General-purpose services that are available to every PEIM.\r
244 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance.\r
245 @param PortNum Usb hub port number (starting from 1).\r
246\r
247**/\r
248VOID\r
249PeiResetHubPort (\r
1436aea4
MK
250 IN EFI_PEI_SERVICES **PeiServices,\r
251 IN PEI_USB_IO_PPI *UsbIoPpi,\r
252 IN UINT8 PortNum\r
4b1bf81c 253 );\r
254\r
255#endif\r