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