]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Include/Ppi/Usb2HostController.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Include / Ppi / Usb2HostController.h
1 /** @file
2 Defines the USB Host Controller PPI that provides I/O services for a USB Host
3 Controller that may be used to access recovery devices. These interfaces are
4 modeled on the UEFI 2.3 specification EFI_USB2_HOST_CONTROLLER_PROTOCOL.
5 Refer to section 16.1 of the UEFI 2.3 Specification for more information on
6 these interfaces.
7
8 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved. <BR>
9
10 SPDX-License-Identifier: BSD-2-Clause-Patent
11
12 **/
13
14 #ifndef _PEI_USB2_HOST_CONTROLLER_PPI_H_
15 #define _PEI_USB2_HOST_CONTROLLER_PPI_H_
16
17 #include <Protocol/Usb2HostController.h>
18
19 ///
20 /// Global ID for the PEI_USB2_HOST_CONTROLLER_PPI.
21 ///
22 #define PEI_USB2_HOST_CONTROLLER_PPI_GUID \
23 { \
24 0xa7d09fe1, 0x74d4, 0x4ba5, { 0x84, 0x7c, 0x12, 0xed, 0x5b, 0x19, 0xad, 0xe4 } \
25 }
26
27 ///
28 /// Forward declaration for the PEI_USB2_HOST_CONTROLLER_PPI.
29 ///
30 typedef struct _PEI_USB2_HOST_CONTROLLER_PPI PEI_USB2_HOST_CONTROLLER_PPI;
31
32 /**
33 Initiate a USB control transfer using a specific USB Host controller on the USB bus.
34
35 @param[in] PeiServices The pointer to the PEI Services Table.
36 @param[in] This The pointer to this instance of the
37 PEI_USB2_HOST_CONTROLLER_PPI.
38 @param[in] DeviceAddress Represents the address of the target device
39 on the USB.
40 @param[in] DeviceSpeed Indicates device speed.
41 @param[in] MaximumPacketLength Indicates the maximum packet size that the
42 default control transfer
43 endpoint is capable of sending or receiving.
44 @param[in] Request A pointer to the USB device request that
45 will be sent to the USB device.
46 @param[in] TransferDirection Specifies the data direction for the transfer.
47 There are three values available:
48 EfiUsbDataIn, EfiUsbDataOut and EfiUsbNoData.
49 @param[in,out] Data A pointer to the buffer of data that will
50 be transmitted to USB device or
51 received from USB device.
52 @param[in,out] DataLength On input, indicates the size, in bytes, of
53 the data buffer specified by Data.
54 On output, indicates the amount of data
55 actually transferred.
56 @param[in] TimeOut Indicates the maximum time, in milliseconds,
57 that the transfer is allowed to complete.
58 If Timeout is 0, then the caller must wait for
59 the function to be completed until EFI_SUCCESS
60 or EFI_DEVICE_ERROR is returned.
61 @param[in] Translator A pointer to the transaction translator data.
62 @param[out] TransferResult A pointer to the detailed result information
63 generated by this control transfer.
64
65 @retval EFI_SUCCESS The control transfer was completed successfully.
66 @retval EFI_DEVICE_ERROR The control transfer failed due to host controller
67 or device error.
68 @retval EFI_INVALID_PARAMETER Some parameters are invalid.
69 @retval EFI_OUT_OF_RESOURCES The control transfer could not be completed due to a lack of resources.
70 @retval EFI_TIMEOUT The control transfer failed due to timeout.
71
72
73 **/
74 typedef
75 EFI_STATUS
76 (EFIAPI *PEI_USB2_HOST_CONTROLLER_CONTROL_TRANSFER)(
77 IN EFI_PEI_SERVICES **PeiServices,
78 IN PEI_USB2_HOST_CONTROLLER_PPI *This,
79 IN UINT8 DeviceAddress,
80 IN UINT8 DeviceSpeed,
81 IN UINTN MaximumPacketLength,
82 IN USB_DEVICE_REQUEST *Request,
83 IN EFI_USB_DATA_DIRECTION TransferDirection,
84 IN OUT VOID *Data OPTIONAL,
85 IN OUT UINTN *DataLength OPTIONAL,
86 IN UINTN TimeOut,
87 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
88 OUT UINT32 *TransferResult
89 );
90
91 /**
92 Initiate a USB bulk transfer using a specific USB Host controller on the USB bus.
93
94 @param[in] PeiServices The pointer to the PEI Services Table.
95 @param[in] This The pointer to this instance of the
96 PEI_USB2_HOST_CONTROLLER_PPI.
97 @param[in] DeviceAddress Represents the address of the target device
98 on the USB.
99 @param[in] EndPointAddress The combination of an endpoint number and
100 an endpoint direction of the target USB device.
101 @param[in] DeviceSpeed Indicates device speed.
102 @param[in] MaximumPacketLength Indicates the maximum packet size the target
103 endpoint is capable of sending or receiving.
104 @param[in,out] Data Array of pointers to the buffers of data
105 that will be transmitted to USB device or
106 received from USB device.
107 @param[in,out] DataLength When input, indicates the size, in bytes, of
108 the data buffers specified by Data. When output,
109 indicates the data size actually transferred.
110 @param[in,out] DataToggle A pointer to the data toggle value.
111 @param[in] TimeOut Indicates the maximum time, in milliseconds,
112 in which the transfer is allowed to complete.
113 If Timeout is 0, then the caller must wait for
114 the function to be completed until EFI_SUCCESS
115 or EFI_DEVICE_ERROR is returned.
116 @param[in] Translator A pointer to the transaction translator data.
117 @param[out] TransferResult A pointer to the detailed result information
118 of the bulk transfer.
119
120 @retval EFI_SUCCESS The bulk transfer was completed successfully.
121 @retval EFI_DEVICE_ERROR The bulk transfer failed due to host controller or device error.
122 Caller should check TransferResult for detailed error information.
123 @retval EFI_INVALID_PARAMETER Some parameters are invalid.
124 @retval EFI_OUT_OF_RESOURCES The bulk transfer could not be submitted due to a lack of resources.
125 @retval EFI_TIMEOUT The bulk transfer failed due to timeout.
126
127
128 **/
129 typedef
130 EFI_STATUS
131 (EFIAPI *PEI_USB2_HOST_CONTROLLER_BULK_TRANSFER)(
132 IN EFI_PEI_SERVICES **PeiServices,
133 IN PEI_USB2_HOST_CONTROLLER_PPI *This,
134 IN UINT8 DeviceAddress,
135 IN UINT8 EndPointAddress,
136 IN UINT8 DeviceSpeed,
137 IN UINTN MaximumPacketLength,
138 IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
139 IN OUT UINTN *DataLength,
140 IN OUT UINT8 *DataToggle,
141 IN UINTN TimeOut,
142 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
143 OUT UINT32 *TransferResult
144 );
145
146 /**
147 Retrieves the number of root hub ports.
148
149 @param[in] PeiServices The pointer to the PEI Services Table.
150 @param[in] This The pointer to this instance of the
151 PEI_USB2_HOST_CONTROLLER_PPI.
152 @param[out] PortNumber The pointer to the number of the root hub ports.
153
154 @retval EFI_SUCCESS The port number was retrieved successfully.
155 @retval EFI_INVALID_PARAMETER PortNumber is NULL.
156
157 **/
158 typedef
159 EFI_STATUS
160 (EFIAPI *PEI_USB2_HOST_CONTROLLER_GET_ROOTHUB_PORT_NUMBER)(
161 IN EFI_PEI_SERVICES **PeiServices,
162 IN PEI_USB2_HOST_CONTROLLER_PPI *This,
163 OUT UINT8 *PortNumber
164 );
165
166 /**
167 Retrieves the current status of a USB root hub port.
168
169 @param[in] PeiServices The pointer to the PEI Services Table.
170 @param[in] This The pointer to this instance of the
171 PEI_USB2_HOST_CONTROLLER_PPI.
172 @param[in] PortNumber Specifies the root hub port from which the status is
173 to be retrieved.
174 This value is zero based.
175 @param[out] PortStatus A pointer to the current port status bits and port
176 status change bits.
177
178 @retval EFI_SUCCESS The status of the USB root hub port specified by
179 PortNumber was returned in PortStatus.
180 @retval EFI_INVALID_PARAMETER PortNumber is invalid.
181
182 **/
183 typedef
184 EFI_STATUS
185 (EFIAPI *PEI_USB2_HOST_CONTROLLER_GET_ROOTHUB_PORT_STATUS)(
186 IN EFI_PEI_SERVICES **PeiServices,
187 IN PEI_USB2_HOST_CONTROLLER_PPI *This,
188 IN UINT8 PortNumber,
189 OUT EFI_USB_PORT_STATUS *PortStatus
190 );
191
192 /**
193 Sets a feature for the specified root hub port.
194
195 @param[in] PeiServices The pointer to the PEI Services Table.
196 @param[in] This The pointer to this instance of the
197 PEI_USB2_HOST_CONTROLLER_PPI.
198 @param[in] PortNumber Specifies the root hub port whose feature is requested
199 to be set. This value is zero based.
200 @param[in] PortFeature Indicates the feature selector associated with the feature
201 set request.
202
203 @retval EFI_SUCCESS The feature specified by PortFeature was set for
204 the USB root hub port specified by PortNumber.
205 @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid
206 for this function.
207 @retval EFI_TIMEOUT The time out occurred
208
209 **/
210 typedef
211 EFI_STATUS
212 (EFIAPI *PEI_USB2_HOST_CONTROLLER_SET_ROOTHUB_PORT_FEATURE)(
213 IN EFI_PEI_SERVICES **PeiServices,
214 IN PEI_USB2_HOST_CONTROLLER_PPI *This,
215 IN UINT8 PortNumber,
216 IN EFI_USB_PORT_FEATURE PortFeature
217 );
218
219 /**
220 Clears a feature for the specified root hub port.
221
222 @param[in] PeiServices The pointer to the PEI Services Table.
223 @param[in] This The pointer to this instance of the
224 PEI_USB2_HOST_CONTROLLER_PPI.
225 @param[in] PortNumber Specifies the root hub port whose feature is
226 requested to be cleared.
227 @param[in] PortFeature Indicates the feature selector associated with the
228 feature clear request.
229
230 @return EFI_SUCCESS The feature specified by PortFeature was cleared
231 for the USB root hub port specified by PortNumber.
232 @return EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.
233
234 **/
235 typedef
236 EFI_STATUS
237 (EFIAPI *PEI_USB2_HOST_CONTROLLER_CLEAR_ROOTHUB_PORT_FEATURE)(
238 IN EFI_PEI_SERVICES **PeiServices,
239 IN PEI_USB2_HOST_CONTROLLER_PPI *This,
240 IN UINT8 PortNumber,
241 IN EFI_USB_PORT_FEATURE PortFeature
242 );
243
244 ///
245 /// This PPI contains a set of services to interact with the USB host controller.
246 /// These interfaces are modeled on the UEFI 2.3 specification protocol
247 /// EFI_USB2_HOST_CONTROLLER_PROTOCOL. Refer to section 16.1 of the UEFI 2.3
248 /// Specification for more information on these interfaces.
249 ///
250 struct _PEI_USB2_HOST_CONTROLLER_PPI {
251 PEI_USB2_HOST_CONTROLLER_CONTROL_TRANSFER ControlTransfer;
252 PEI_USB2_HOST_CONTROLLER_BULK_TRANSFER BulkTransfer;
253 PEI_USB2_HOST_CONTROLLER_GET_ROOTHUB_PORT_NUMBER GetRootHubPortNumber;
254 PEI_USB2_HOST_CONTROLLER_GET_ROOTHUB_PORT_STATUS GetRootHubPortStatus;
255 PEI_USB2_HOST_CONTROLLER_SET_ROOTHUB_PORT_FEATURE SetRootHubPortFeature;
256 PEI_USB2_HOST_CONTROLLER_CLEAR_ROOTHUB_PORT_FEATURE ClearRootHubPortFeature;
257 };
258
259 extern EFI_GUID gPeiUsb2HostControllerPpiGuid;
260
261 #endif
262