1*f334afcfSToomas Soome /** @file
2*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL as defined in UEFI 2.0.
3*f334afcfSToomas Soome   The USB Host Controller Protocol is used by code, typically USB bus drivers,
4*f334afcfSToomas Soome   running in the EFI boot services environment, to perform data transactions over
5*f334afcfSToomas Soome   a USB bus. In addition, it provides an abstraction for the root hub of the USB bus.
6*f334afcfSToomas Soome 
7*f334afcfSToomas Soome   Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
8*f334afcfSToomas Soome   SPDX-License-Identifier: BSD-2-Clause-Patent
9*f334afcfSToomas Soome 
10*f334afcfSToomas Soome **/
11*f334afcfSToomas Soome 
12*f334afcfSToomas Soome #ifndef _USB2_HOSTCONTROLLER_H_
13*f334afcfSToomas Soome #define _USB2_HOSTCONTROLLER_H_
14*f334afcfSToomas Soome 
15*f334afcfSToomas Soome #include <Protocol/UsbIo.h>
16*f334afcfSToomas Soome 
17*f334afcfSToomas Soome #define EFI_USB2_HC_PROTOCOL_GUID \
18*f334afcfSToomas Soome   { \
19*f334afcfSToomas Soome     0x3e745226, 0x9818, 0x45b6, {0xa2, 0xac, 0xd7, 0xcd, 0xe, 0x8b, 0xa2, 0xbc } \
20*f334afcfSToomas Soome   }
21*f334afcfSToomas Soome 
22*f334afcfSToomas Soome ///
23*f334afcfSToomas Soome /// Forward reference for pure ANSI compatability
24*f334afcfSToomas Soome ///
25*f334afcfSToomas Soome typedef struct _EFI_USB2_HC_PROTOCOL EFI_USB2_HC_PROTOCOL;
26*f334afcfSToomas Soome 
27*f334afcfSToomas Soome typedef struct {
28*f334afcfSToomas Soome   UINT16    PortStatus;              ///< Contains current port status bitmap.
29*f334afcfSToomas Soome   UINT16    PortChangeStatus;        ///< Contains current port status change bitmap.
30*f334afcfSToomas Soome } EFI_USB_PORT_STATUS;
31*f334afcfSToomas Soome 
32*f334afcfSToomas Soome ///
33*f334afcfSToomas Soome /// EFI_USB_PORT_STATUS.PortStatus bit definition
34*f334afcfSToomas Soome ///
35*f334afcfSToomas Soome #define USB_PORT_STAT_CONNECTION   0x0001
36*f334afcfSToomas Soome #define USB_PORT_STAT_ENABLE       0x0002
37*f334afcfSToomas Soome #define USB_PORT_STAT_SUSPEND      0x0004
38*f334afcfSToomas Soome #define USB_PORT_STAT_OVERCURRENT  0x0008
39*f334afcfSToomas Soome #define USB_PORT_STAT_RESET        0x0010
40*f334afcfSToomas Soome #define USB_PORT_STAT_POWER        0x0100
41*f334afcfSToomas Soome #define USB_PORT_STAT_LOW_SPEED    0x0200
42*f334afcfSToomas Soome #define USB_PORT_STAT_HIGH_SPEED   0x0400
43*f334afcfSToomas Soome #define USB_PORT_STAT_SUPER_SPEED  0x0800
44*f334afcfSToomas Soome #define USB_PORT_STAT_OWNER        0x2000
45*f334afcfSToomas Soome 
46*f334afcfSToomas Soome ///
47*f334afcfSToomas Soome /// EFI_USB_PORT_STATUS.PortChangeStatus bit definition
48*f334afcfSToomas Soome ///
49*f334afcfSToomas Soome #define USB_PORT_STAT_C_CONNECTION   0x0001
50*f334afcfSToomas Soome #define USB_PORT_STAT_C_ENABLE       0x0002
51*f334afcfSToomas Soome #define USB_PORT_STAT_C_SUSPEND      0x0004
52*f334afcfSToomas Soome #define USB_PORT_STAT_C_OVERCURRENT  0x0008
53*f334afcfSToomas Soome #define USB_PORT_STAT_C_RESET        0x0010
54*f334afcfSToomas Soome 
55*f334afcfSToomas Soome ///
56*f334afcfSToomas Soome /// Usb port features value
57*f334afcfSToomas Soome /// Each value indicates its bit index in the port status and status change bitmaps,
58*f334afcfSToomas Soome /// if combines these two bitmaps into a 32-bit bitmap.
59*f334afcfSToomas Soome ///
60*f334afcfSToomas Soome typedef enum {
61*f334afcfSToomas Soome   EfiUsbPortEnable            = 1,
62*f334afcfSToomas Soome   EfiUsbPortSuspend           = 2,
63*f334afcfSToomas Soome   EfiUsbPortReset             = 4,
64*f334afcfSToomas Soome   EfiUsbPortPower             = 8,
65*f334afcfSToomas Soome   EfiUsbPortOwner             = 13,
66*f334afcfSToomas Soome   EfiUsbPortConnectChange     = 16,
67*f334afcfSToomas Soome   EfiUsbPortEnableChange      = 17,
68*f334afcfSToomas Soome   EfiUsbPortSuspendChange     = 18,
69*f334afcfSToomas Soome   EfiUsbPortOverCurrentChange = 19,
70*f334afcfSToomas Soome   EfiUsbPortResetChange       = 20
71*f334afcfSToomas Soome } EFI_USB_PORT_FEATURE;
72*f334afcfSToomas Soome 
73*f334afcfSToomas Soome #define EFI_USB_SPEED_FULL   0x0000     ///< 12 Mb/s, USB 1.1 OHCI and UHCI HC.
74*f334afcfSToomas Soome #define EFI_USB_SPEED_LOW    0x0001     ///< 1 Mb/s, USB 1.1 OHCI and UHCI HC.
75*f334afcfSToomas Soome #define EFI_USB_SPEED_HIGH   0x0002     ///< 480 Mb/s, USB 2.0 EHCI HC.
76*f334afcfSToomas Soome #define EFI_USB_SPEED_SUPER  0x0003     ///< 4.8 Gb/s, USB 3.0 XHCI HC.
77*f334afcfSToomas Soome 
78*f334afcfSToomas Soome typedef struct {
79*f334afcfSToomas Soome   UINT8    TranslatorHubAddress;   ///< device address
80*f334afcfSToomas Soome   UINT8    TranslatorPortNumber;   ///< the port number of the hub that device is connected to.
81*f334afcfSToomas Soome } EFI_USB2_HC_TRANSACTION_TRANSLATOR;
82*f334afcfSToomas Soome 
83*f334afcfSToomas Soome //
84*f334afcfSToomas Soome // Protocol definitions
85*f334afcfSToomas Soome //
86*f334afcfSToomas Soome 
87*f334afcfSToomas Soome /**
88*f334afcfSToomas Soome   Retrieves the Host Controller capabilities.
89*f334afcfSToomas Soome 
90*f334afcfSToomas Soome   @param  This           A pointer to the EFI_USB2_HC_PROTOCOL instance.
91*f334afcfSToomas Soome   @param  MaxSpeed       Host controller data transfer speed.
92*f334afcfSToomas Soome   @param  PortNumber     Number of the root hub ports.
93*f334afcfSToomas Soome   @param  Is64BitCapable TRUE if controller supports 64-bit memory addressing,
94*f334afcfSToomas Soome                          FALSE otherwise.
95*f334afcfSToomas Soome 
96*f334afcfSToomas Soome   @retval EFI_SUCCESS           The host controller capabilities were retrieved successfully.
97*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER One of the input args was NULL.
98*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      An error was encountered while attempting to
99*f334afcfSToomas Soome                                 retrieve the capabilities.
100*f334afcfSToomas Soome 
101*f334afcfSToomas Soome **/
102*f334afcfSToomas Soome typedef
103*f334afcfSToomas Soome EFI_STATUS
104*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY)(
105*f334afcfSToomas Soome   IN  EFI_USB2_HC_PROTOCOL  *This,
106*f334afcfSToomas Soome   OUT UINT8                 *MaxSpeed,
107*f334afcfSToomas Soome   OUT UINT8                 *PortNumber,
108*f334afcfSToomas Soome   OUT UINT8                 *Is64BitCapable
109*f334afcfSToomas Soome   );
110*f334afcfSToomas Soome 
111*f334afcfSToomas Soome #define EFI_USB_HC_RESET_GLOBAL             0x0001
112*f334afcfSToomas Soome #define EFI_USB_HC_RESET_HOST_CONTROLLER    0x0002
113*f334afcfSToomas Soome #define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG  0x0004
114*f334afcfSToomas Soome #define EFI_USB_HC_RESET_HOST_WITH_DEBUG    0x0008
115*f334afcfSToomas Soome 
116*f334afcfSToomas Soome /**
117*f334afcfSToomas Soome   Provides software reset for the USB host controller.
118*f334afcfSToomas Soome 
119*f334afcfSToomas Soome   @param  This       A pointer to the EFI_USB2_HC_PROTOCOL instance.
120*f334afcfSToomas Soome   @param  Attributes A bit mask of the reset operation to perform.
121*f334afcfSToomas Soome 
122*f334afcfSToomas Soome   @retval EFI_SUCCESS           The reset operation succeeded.
123*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER Attributes is not valid.
124*f334afcfSToomas Soome   @retval EFI_UNSUPPORTED       The type of reset specified by Attributes is not currently
125*f334afcfSToomas Soome                                 supported by the host controller hardware.
126*f334afcfSToomas Soome   @retval EFI_ACCESS_DENIED     Reset operation is rejected due to the debug port being configured
127*f334afcfSToomas Soome                                 and active; only EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG or
128*f334afcfSToomas Soome                                 EFI_USB_HC_RESET_HOST_WITH_DEBUG reset Attributes can be used to
129*f334afcfSToomas Soome                                 perform reset operation for this host controller.
130*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      An error was encountered while attempting to
131*f334afcfSToomas Soome                                 retrieve the capabilities.
132*f334afcfSToomas Soome 
133*f334afcfSToomas Soome **/
134*f334afcfSToomas Soome typedef
135*f334afcfSToomas Soome EFI_STATUS
136*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_RESET)(
137*f334afcfSToomas Soome   IN EFI_USB2_HC_PROTOCOL   *This,
138*f334afcfSToomas Soome   IN UINT16                 Attributes
139*f334afcfSToomas Soome   );
140*f334afcfSToomas Soome 
141*f334afcfSToomas Soome /**
142*f334afcfSToomas Soome   Enumration value for status of USB HC.
143*f334afcfSToomas Soome **/
144*f334afcfSToomas Soome typedef enum {
145*f334afcfSToomas Soome   EfiUsbHcStateHalt,                ///< The host controller is in halt
146*f334afcfSToomas Soome                                     ///< state. No USB transactions can occur
147*f334afcfSToomas Soome                                     ///< while in this state. The host
148*f334afcfSToomas Soome                                     ///< controller can enter this state for
149*f334afcfSToomas Soome                                     ///< three reasons: 1) After host
150*f334afcfSToomas Soome                                     ///< controller hardware reset. 2)
151*f334afcfSToomas Soome                                     ///< Explicitly set by software. 3)
152*f334afcfSToomas Soome                                     ///< Triggered by a fatal error such as
153*f334afcfSToomas Soome                                     ///< consistency check failure.
154*f334afcfSToomas Soome 
155*f334afcfSToomas Soome   EfiUsbHcStateOperational,         ///< The host controller is in an
156*f334afcfSToomas Soome                                     ///< operational state. When in
157*f334afcfSToomas Soome                                     ///< this state, the host
158*f334afcfSToomas Soome                                     ///< controller can execute bus
159*f334afcfSToomas Soome                                     ///< traffic. This state must be
160*f334afcfSToomas Soome                                     ///< explicitly set to enable the
161*f334afcfSToomas Soome                                     ///< USB bus traffic.
162*f334afcfSToomas Soome 
163*f334afcfSToomas Soome   EfiUsbHcStateSuspend,             ///< The host controller is in the
164*f334afcfSToomas Soome                                     ///< suspend state. No USB
165*f334afcfSToomas Soome                                     ///< transactions can occur while in
166*f334afcfSToomas Soome                                     ///< this state. The host controller
167*f334afcfSToomas Soome                                     ///< enters this state for the
168*f334afcfSToomas Soome                                     ///< following reasons: 1) Explicitly
169*f334afcfSToomas Soome                                     ///< set by software. 2) Triggered
170*f334afcfSToomas Soome                                     ///< when there is no bus traffic for
171*f334afcfSToomas Soome                                     ///< 3 microseconds.
172*f334afcfSToomas Soome 
173*f334afcfSToomas Soome   EfiUsbHcStateMaximum              ///< Maximum value for enumration value of HC status.
174*f334afcfSToomas Soome } EFI_USB_HC_STATE;
175*f334afcfSToomas Soome 
176*f334afcfSToomas Soome /**
177*f334afcfSToomas Soome   Retrieves current state of the USB host controller.
178*f334afcfSToomas Soome 
179*f334afcfSToomas Soome   @param  This  A pointer to the EFI_USB2_HC_PROTOCOL instance.
180*f334afcfSToomas Soome   @param  State A pointer to the EFI_USB_HC_STATE data structure that
181*f334afcfSToomas Soome                 indicates current state of the USB host controller.
182*f334afcfSToomas Soome 
183*f334afcfSToomas Soome   @retval EFI_SUCCESS           The state information of the host controller was returned in State.
184*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER State is NULL.
185*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      An error was encountered while attempting to retrieve the
186*f334afcfSToomas Soome                                 host controller's current state.
187*f334afcfSToomas Soome 
188*f334afcfSToomas Soome **/
189*f334afcfSToomas Soome typedef
190*f334afcfSToomas Soome EFI_STATUS
191*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE)(
192*f334afcfSToomas Soome   IN        EFI_USB2_HC_PROTOCOL    *This,
193*f334afcfSToomas Soome   OUT       EFI_USB_HC_STATE        *State
194*f334afcfSToomas Soome   );
195*f334afcfSToomas Soome 
196*f334afcfSToomas Soome /**
197*f334afcfSToomas Soome   Sets the USB host controller to a specific state.
198*f334afcfSToomas Soome 
199*f334afcfSToomas Soome   @param  This  A pointer to the EFI_USB2_HC_PROTOCOL instance.
200*f334afcfSToomas Soome   @param  State Indicates the state of the host controller that will be set.
201*f334afcfSToomas Soome 
202*f334afcfSToomas Soome   @retval EFI_SUCCESS           The USB host controller was successfully placed in the state
203*f334afcfSToomas Soome                                 specified by State.
204*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER State is not valid.
205*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      Failed to set the state specified by State due to device error.
206*f334afcfSToomas Soome 
207*f334afcfSToomas Soome **/
208*f334afcfSToomas Soome typedef
209*f334afcfSToomas Soome EFI_STATUS
210*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE)(
211*f334afcfSToomas Soome   IN EFI_USB2_HC_PROTOCOL    *This,
212*f334afcfSToomas Soome   IN EFI_USB_HC_STATE        State
213*f334afcfSToomas Soome   );
214*f334afcfSToomas Soome 
215*f334afcfSToomas Soome /**
216*f334afcfSToomas Soome   Submits control transfer to a target USB device.
217*f334afcfSToomas Soome 
218*f334afcfSToomas Soome   @param  This                A pointer to the EFI_USB2_HC_PROTOCOL instance.
219*f334afcfSToomas Soome   @param  DeviceAddress       Represents the address of the target device on the USB.
220*f334afcfSToomas Soome   @param  DeviceSpeed         Indicates device speed.
221*f334afcfSToomas Soome   @param  MaximumPacketLength Indicates the maximum packet size that the default control transfer
222*f334afcfSToomas Soome                               endpoint is capable of sending or receiving.
223*f334afcfSToomas Soome   @param  Request             A pointer to the USB device request that will be sent to the USB device.
224*f334afcfSToomas Soome   @param  TransferDirection   Specifies the data direction for the transfer. There are three values
225*f334afcfSToomas Soome                               available, EfiUsbDataIn, EfiUsbDataOut and EfiUsbNoData.
226*f334afcfSToomas Soome   @param  Data                A pointer to the buffer of data that will be transmitted to USB device or
227*f334afcfSToomas Soome                               received from USB device.
228*f334afcfSToomas Soome   @param  DataLength          On input, indicates the size, in bytes, of the data buffer specified by Data.
229*f334afcfSToomas Soome                               On output, indicates the amount of data actually transferred.
230*f334afcfSToomas Soome   @param  TimeOut             Indicates the maximum time, in milliseconds, which the transfer is
231*f334afcfSToomas Soome                               allowed to complete.
232*f334afcfSToomas Soome   @param  Translator          A pointer to the transaction translator data.
233*f334afcfSToomas Soome   @param  TransferResult      A pointer to the detailed result information generated by this control
234*f334afcfSToomas Soome                               transfer.
235*f334afcfSToomas Soome 
236*f334afcfSToomas Soome   @retval EFI_SUCCESS           The control transfer was completed successfully.
237*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
238*f334afcfSToomas Soome   @retval EFI_OUT_OF_RESOURCES  The control transfer could not be completed due to a lack of resources.
239*f334afcfSToomas Soome   @retval EFI_TIMEOUT           The control transfer failed due to timeout.
240*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      The control transfer failed due to host controller or device error.
241*f334afcfSToomas Soome                                 Caller should check TransferResult for detailed error information.
242*f334afcfSToomas Soome 
243*f334afcfSToomas Soome **/
244*f334afcfSToomas Soome typedef
245*f334afcfSToomas Soome EFI_STATUS
246*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER)(
247*f334afcfSToomas Soome   IN     EFI_USB2_HC_PROTOCOL               *This,
248*f334afcfSToomas Soome   IN     UINT8                              DeviceAddress,
249*f334afcfSToomas Soome   IN     UINT8                              DeviceSpeed,
250*f334afcfSToomas Soome   IN     UINTN                              MaximumPacketLength,
251*f334afcfSToomas Soome   IN     EFI_USB_DEVICE_REQUEST             *Request,
252*f334afcfSToomas Soome   IN     EFI_USB_DATA_DIRECTION             TransferDirection,
253*f334afcfSToomas Soome   IN OUT VOID                               *Data       OPTIONAL,
254*f334afcfSToomas Soome   IN OUT UINTN                              *DataLength OPTIONAL,
255*f334afcfSToomas Soome   IN     UINTN                              TimeOut,
256*f334afcfSToomas Soome   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
257*f334afcfSToomas Soome   OUT    UINT32                             *TransferResult
258*f334afcfSToomas Soome   );
259*f334afcfSToomas Soome 
260*f334afcfSToomas Soome #define EFI_USB_MAX_BULK_BUFFER_NUM  10
261*f334afcfSToomas Soome 
262*f334afcfSToomas Soome /**
263*f334afcfSToomas Soome   Submits bulk transfer to a bulk endpoint of a USB device.
264*f334afcfSToomas Soome 
265*f334afcfSToomas Soome   @param  This                A pointer to the EFI_USB2_HC_PROTOCOL instance.
266*f334afcfSToomas Soome   @param  DeviceAddress       Represents the address of the target device on the USB.
267*f334afcfSToomas Soome   @param  EndPointAddress     The combination of an endpoint number and an endpoint direction of the
268*f334afcfSToomas Soome                               target USB device.
269*f334afcfSToomas Soome   @param  DeviceSpeed         Indicates device speed.
270*f334afcfSToomas Soome   @param  MaximumPacketLength Indicates the maximum packet size the target endpoint is capable of
271*f334afcfSToomas Soome                               sending or receiving.
272*f334afcfSToomas Soome   @param  DataBuffersNumber   Number of data buffers prepared for the transfer.
273*f334afcfSToomas Soome   @param  Data                Array of pointers to the buffers of data that will be transmitted to USB
274*f334afcfSToomas Soome                               device or received from USB device.
275*f334afcfSToomas Soome   @param  DataLength          When input, indicates the size, in bytes, of the data buffers specified by
276*f334afcfSToomas Soome                               Data. When output, indicates the actually transferred data size.
277*f334afcfSToomas Soome   @param  DataToggle          A pointer to the data toggle value.
278*f334afcfSToomas Soome   @param  TimeOut             Indicates the maximum time, in milliseconds, which the transfer is
279*f334afcfSToomas Soome                               allowed to complete.
280*f334afcfSToomas Soome   @param  Translator          A pointer to the transaction translator data.
281*f334afcfSToomas Soome   @param  TransferResult      A pointer to the detailed result information of the bulk transfer.
282*f334afcfSToomas Soome 
283*f334afcfSToomas Soome   @retval EFI_SUCCESS           The bulk transfer was completed successfully.
284*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
285*f334afcfSToomas Soome   @retval EFI_OUT_OF_RESOURCES  The bulk transfer could not be submitted due to a lack of resources.
286*f334afcfSToomas Soome   @retval EFI_TIMEOUT           The bulk transfer failed due to timeout.
287*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      The bulk transfer failed due to host controller or device error.
288*f334afcfSToomas Soome                                 Caller should check TransferResult for detailed error information.
289*f334afcfSToomas Soome 
290*f334afcfSToomas Soome **/
291*f334afcfSToomas Soome typedef
292*f334afcfSToomas Soome EFI_STATUS
293*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER)(
294*f334afcfSToomas Soome   IN     EFI_USB2_HC_PROTOCOL               *This,
295*f334afcfSToomas Soome   IN     UINT8                              DeviceAddress,
296*f334afcfSToomas Soome   IN     UINT8                              EndPointAddress,
297*f334afcfSToomas Soome   IN     UINT8                              DeviceSpeed,
298*f334afcfSToomas Soome   IN     UINTN                              MaximumPacketLength,
299*f334afcfSToomas Soome   IN     UINT8                              DataBuffersNumber,
300*f334afcfSToomas Soome   IN OUT VOID                               *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
301*f334afcfSToomas Soome   IN OUT UINTN                              *DataLength,
302*f334afcfSToomas Soome   IN OUT UINT8                              *DataToggle,
303*f334afcfSToomas Soome   IN     UINTN                              TimeOut,
304*f334afcfSToomas Soome   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
305*f334afcfSToomas Soome   OUT    UINT32                             *TransferResult
306*f334afcfSToomas Soome   );
307*f334afcfSToomas Soome 
308*f334afcfSToomas Soome /**
309*f334afcfSToomas Soome   Submits an asynchronous interrupt transfer to an interrupt endpoint of a USB device.
310*f334afcfSToomas Soome   Translator parameter doesn't exist in UEFI2.0 spec, but it will be updated in the following specification version.
311*f334afcfSToomas Soome 
312*f334afcfSToomas Soome   @param  This                A pointer to the EFI_USB2_HC_PROTOCOL instance.
313*f334afcfSToomas Soome   @param  DeviceAddress       Represents the address of the target device on the USB.
314*f334afcfSToomas Soome   @param  EndPointAddress     The combination of an endpoint number and an endpoint direction of the
315*f334afcfSToomas Soome                               target USB device.
316*f334afcfSToomas Soome   @param  DeviceSpeed         Indicates device speed.
317*f334afcfSToomas Soome   @param  MaximumPacketLength Indicates the maximum packet size the target endpoint is capable of
318*f334afcfSToomas Soome                               sending or receiving.
319*f334afcfSToomas Soome   @param  IsNewTransfer       If TRUE, an asynchronous interrupt pipe is built between the host and the
320*f334afcfSToomas Soome                               target interrupt endpoint. If FALSE, the specified asynchronous interrupt
321*f334afcfSToomas Soome                               pipe is canceled. If TRUE, and an interrupt transfer exists for the target
322*f334afcfSToomas Soome                               end point, then EFI_INVALID_PARAMETER is returned.
323*f334afcfSToomas Soome   @param  DataToggle          A pointer to the data toggle value.
324*f334afcfSToomas Soome   @param  PollingInterval     Indicates the interval, in milliseconds, that the asynchronous interrupt
325*f334afcfSToomas Soome                               transfer is polled.
326*f334afcfSToomas Soome   @param  DataLength          Indicates the length of data to be received at the rate specified by
327*f334afcfSToomas Soome                               PollingInterval from the target asynchronous interrupt endpoint.
328*f334afcfSToomas Soome   @param  Translator          A pointr to the transaction translator data.
329*f334afcfSToomas Soome   @param  CallBackFunction    The Callback function. This function is called at the rate specified by
330*f334afcfSToomas Soome                               PollingInterval.
331*f334afcfSToomas Soome   @param  Context             The context that is passed to the CallBackFunction. This is an
332*f334afcfSToomas Soome                               optional parameter and may be NULL.
333*f334afcfSToomas Soome 
334*f334afcfSToomas Soome   @retval EFI_SUCCESS           The asynchronous interrupt transfer request has been successfully
335*f334afcfSToomas Soome                                 submitted or canceled.
336*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
337*f334afcfSToomas Soome   @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
338*f334afcfSToomas Soome 
339*f334afcfSToomas Soome **/
340*f334afcfSToomas Soome typedef
341*f334afcfSToomas Soome EFI_STATUS
342*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER)(
343*f334afcfSToomas Soome   IN     EFI_USB2_HC_PROTOCOL                                *This,
344*f334afcfSToomas Soome   IN     UINT8                                               DeviceAddress,
345*f334afcfSToomas Soome   IN     UINT8                                               EndPointAddress,
346*f334afcfSToomas Soome   IN     UINT8                                               DeviceSpeed,
347*f334afcfSToomas Soome   IN     UINTN                                               MaxiumPacketLength,
348*f334afcfSToomas Soome   IN     BOOLEAN                                             IsNewTransfer,
349*f334afcfSToomas Soome   IN OUT UINT8                                               *DataToggle,
350*f334afcfSToomas Soome   IN     UINTN                                               PollingInterval  OPTIONAL,
351*f334afcfSToomas Soome   IN     UINTN                                               DataLength       OPTIONAL,
352*f334afcfSToomas Soome   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR                  *Translator      OPTIONAL,
353*f334afcfSToomas Soome   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK                     CallBackFunction OPTIONAL,
354*f334afcfSToomas Soome   IN     VOID                                                *Context         OPTIONAL
355*f334afcfSToomas Soome   );
356*f334afcfSToomas Soome 
357*f334afcfSToomas Soome /**
358*f334afcfSToomas Soome   Submits synchronous interrupt transfer to an interrupt endpoint of a USB device.
359*f334afcfSToomas Soome   Translator parameter doesn't exist in UEFI2.0 spec, but it will be updated in the following specification version.
360*f334afcfSToomas Soome 
361*f334afcfSToomas Soome   @param  This                  A pointer to the EFI_USB2_HC_PROTOCOL instance.
362*f334afcfSToomas Soome   @param  DeviceAddress         Represents the address of the target device on the USB.
363*f334afcfSToomas Soome   @param  EndPointAddress       The combination of an endpoint number and an endpoint direction of the
364*f334afcfSToomas Soome                                 target USB device.
365*f334afcfSToomas Soome   @param  DeviceSpeed           Indicates device speed.
366*f334afcfSToomas Soome   @param  MaximumPacketLength   Indicates the maximum packet size the target endpoint is capable of
367*f334afcfSToomas Soome                                 sending or receiving.
368*f334afcfSToomas Soome   @param  Data                  A pointer to the buffer of data that will be transmitted to USB device or
369*f334afcfSToomas Soome                                 received from USB device.
370*f334afcfSToomas Soome   @param  DataLength            On input, the size, in bytes, of the data buffer specified by Data. On
371*f334afcfSToomas Soome                                 output, the number of bytes transferred.
372*f334afcfSToomas Soome   @param  DataToggle            A pointer to the data toggle value.
373*f334afcfSToomas Soome   @param  TimeOut               Indicates the maximum time, in milliseconds, which the transfer is
374*f334afcfSToomas Soome                                 allowed to complete.
375*f334afcfSToomas Soome   @param  Translator            A pointr to the transaction translator data.
376*f334afcfSToomas Soome   @param  TransferResult        A pointer to the detailed result information from the synchronous
377*f334afcfSToomas Soome                                 interrupt transfer.
378*f334afcfSToomas Soome 
379*f334afcfSToomas Soome   @retval EFI_SUCCESS           The synchronous interrupt transfer was completed successfully.
380*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
381*f334afcfSToomas Soome   @retval EFI_OUT_OF_RESOURCES  The synchronous interrupt transfer could not be submitted due to a lack of resources.
382*f334afcfSToomas Soome   @retval EFI_TIMEOUT           The synchronous interrupt transfer failed due to timeout.
383*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      The synchronous interrupt transfer failed due to host controller or device error.
384*f334afcfSToomas Soome                                 Caller should check TransferResult for detailed error information.
385*f334afcfSToomas Soome 
386*f334afcfSToomas Soome **/
387*f334afcfSToomas Soome typedef
388*f334afcfSToomas Soome EFI_STATUS
389*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER)(
390*f334afcfSToomas Soome   IN     EFI_USB2_HC_PROTOCOL                        *This,
391*f334afcfSToomas Soome   IN     UINT8                                       DeviceAddress,
392*f334afcfSToomas Soome   IN     UINT8                                       EndPointAddress,
393*f334afcfSToomas Soome   IN     UINT8                                       DeviceSpeed,
394*f334afcfSToomas Soome   IN     UINTN                                       MaximumPacketLength,
395*f334afcfSToomas Soome   IN OUT VOID                                        *Data,
396*f334afcfSToomas Soome   IN OUT UINTN                                       *DataLength,
397*f334afcfSToomas Soome   IN OUT UINT8                                       *DataToggle,
398*f334afcfSToomas Soome   IN     UINTN                                       TimeOut,
399*f334afcfSToomas Soome   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR          *Translator,
400*f334afcfSToomas Soome   OUT    UINT32                                      *TransferResult
401*f334afcfSToomas Soome   );
402*f334afcfSToomas Soome 
403*f334afcfSToomas Soome #define EFI_USB_MAX_ISO_BUFFER_NUM   7
404*f334afcfSToomas Soome #define EFI_USB_MAX_ISO_BUFFER_NUM1  2
405*f334afcfSToomas Soome 
406*f334afcfSToomas Soome /**
407*f334afcfSToomas Soome   Submits isochronous transfer to an isochronous endpoint of a USB device.
408*f334afcfSToomas Soome 
409*f334afcfSToomas Soome   This function is used to submit isochronous transfer to a target endpoint of a USB device.
410*f334afcfSToomas Soome   The target endpoint is specified by DeviceAddressand EndpointAddress. Isochronous transfers are
411*f334afcfSToomas Soome   used when working with isochronous date. It provides periodic, continuous communication between
412*f334afcfSToomas Soome   the host and a device. Isochronous transfers can beused only by full-speed, high-speed, and
413*f334afcfSToomas Soome   super-speed devices.
414*f334afcfSToomas Soome 
415*f334afcfSToomas Soome   High-speed isochronous transfers can be performed using multiple data buffers. The number of
416*f334afcfSToomas Soome   buffers that are actually prepared for the transfer is specified by DataBuffersNumber. For
417*f334afcfSToomas Soome   full-speed isochronous transfers this value is ignored.
418*f334afcfSToomas Soome 
419*f334afcfSToomas Soome   Data represents a list of pointers to the data buffers. For full-speed isochronous transfers
420*f334afcfSToomas Soome   only the data pointed by Data[0]shall be used. For high-speed isochronous transfers and for
421*f334afcfSToomas Soome   the split transactions depending on DataLengththere several data buffers canbe used. For the
422*f334afcfSToomas Soome   high-speed isochronous transfers the total number of buffers must not exceed EFI_USB_MAX_ISO_BUFFER_NUM.
423*f334afcfSToomas Soome 
424*f334afcfSToomas Soome   For split transactions performed on full-speed device by high-speed host controller the total
425*f334afcfSToomas Soome   number of buffers is limited to EFI_USB_MAX_ISO_BUFFER_NUM1.
426*f334afcfSToomas Soome   If the isochronous transfer is successful, then EFI_SUCCESSis returned. The isochronous transfer
427*f334afcfSToomas Soome   is designed to be completed within one USB frame time, if it cannot be completed, EFI_TIMEOUT
428*f334afcfSToomas Soome   is returned. If an error other than timeout occurs during the USB transfer, then EFI_DEVICE_ERROR
429*f334afcfSToomas Soome   is returned and the detailed status code will be returned in TransferResult.
430*f334afcfSToomas Soome 
431*f334afcfSToomas Soome   EFI_INVALID_PARAMETERis returned if one of the following conditionsis satisfied:
432*f334afcfSToomas Soome     - Data is NULL.
433*f334afcfSToomas Soome     - DataLength is 0.
434*f334afcfSToomas Soome     - DeviceSpeed is not one of the supported values listed above.
435*f334afcfSToomas Soome     - MaximumPacketLength is invalid. MaximumPacketLength must be 1023 or less for full-speed devices,
436*f334afcfSToomas Soome       and 1024 or less for high-speed and super-speed devices.
437*f334afcfSToomas Soome     - TransferResult is NULL.
438*f334afcfSToomas Soome 
439*f334afcfSToomas Soome   @param  This                  A pointer to the EFI_USB2_HC_PROTOCOL instance.
440*f334afcfSToomas Soome   @param  DeviceAddress         Represents the address of the target device on the USB.
441*f334afcfSToomas Soome   @param  EndPointAddress       The combination of an endpoint number and an endpoint direction of the
442*f334afcfSToomas Soome                                 target USB device.
443*f334afcfSToomas Soome   @param  DeviceSpeed           Indicates device speed. The supported values are EFI_USB_SPEED_FULL,
444*f334afcfSToomas Soome                                 EFI_USB_SPEED_HIGH, or EFI_USB_SPEED_SUPER.
445*f334afcfSToomas Soome   @param  MaximumPacketLength   Indicates the maximum packet size the target endpoint is capable of
446*f334afcfSToomas Soome                                 sending or receiving.
447*f334afcfSToomas Soome   @param  DataBuffersNumber     Number of data buffers prepared for the transfer.
448*f334afcfSToomas Soome   @param  Data                  Array of pointers to the buffers of data that will be transmitted to USB
449*f334afcfSToomas Soome                                 device or received from USB device.
450*f334afcfSToomas Soome   @param  DataLength            Specifies the length, in bytes, of the data to be sent to or received from
451*f334afcfSToomas Soome                                 the USB device.
452*f334afcfSToomas Soome   @param  Translator            A pointer to the transaction translator data.
453*f334afcfSToomas Soome   @param  TransferResult        A pointer to the detailed result information of the isochronous transfer.
454*f334afcfSToomas Soome 
455*f334afcfSToomas Soome   @retval EFI_SUCCESS           The isochronous transfer was completed successfully.
456*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
457*f334afcfSToomas Soome   @retval EFI_OUT_OF_RESOURCES  The isochronous transfer could not be submitted due to a lack of resources.
458*f334afcfSToomas Soome   @retval EFI_TIMEOUT           The isochronous transfer cannot be completed within the one USB frame time.
459*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      The isochronous transfer failed due to host controller or device error.
460*f334afcfSToomas Soome                                 Caller should check TransferResult for detailed error information.
461*f334afcfSToomas Soome 
462*f334afcfSToomas Soome **/
463*f334afcfSToomas Soome typedef
464*f334afcfSToomas Soome EFI_STATUS
465*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER)(
466*f334afcfSToomas Soome   IN     EFI_USB2_HC_PROTOCOL               *This,
467*f334afcfSToomas Soome   IN     UINT8                              DeviceAddress,
468*f334afcfSToomas Soome   IN     UINT8                              EndPointAddress,
469*f334afcfSToomas Soome   IN     UINT8                              DeviceSpeed,
470*f334afcfSToomas Soome   IN     UINTN                              MaximumPacketLength,
471*f334afcfSToomas Soome   IN     UINT8                              DataBuffersNumber,
472*f334afcfSToomas Soome   IN OUT VOID                               *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
473*f334afcfSToomas Soome   IN     UINTN                              DataLength,
474*f334afcfSToomas Soome   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
475*f334afcfSToomas Soome   OUT    UINT32                             *TransferResult
476*f334afcfSToomas Soome   );
477*f334afcfSToomas Soome 
478*f334afcfSToomas Soome /**
479*f334afcfSToomas Soome   Submits nonblocking isochronous transfer to an isochronous endpoint of a USB device.
480*f334afcfSToomas Soome 
481*f334afcfSToomas Soome   This is an asynchronous type of USB isochronous transfer. If the caller submits a USB
482*f334afcfSToomas Soome   isochronous transfer request through this function, this function will return immediately.
483*f334afcfSToomas Soome 
484*f334afcfSToomas Soome   When the isochronous transfer completes, the IsochronousCallbackfunction will be triggered,
485*f334afcfSToomas Soome   the caller can know the transfer results. If the transfer is successful, the caller can get
486*f334afcfSToomas Soome   the data received or sent in this callback function.
487*f334afcfSToomas Soome 
488*f334afcfSToomas Soome   The target endpoint is specified by DeviceAddressand EndpointAddress. Isochronous transfers
489*f334afcfSToomas Soome   are used when working with isochronous date. It provides periodic, continuous communication
490*f334afcfSToomas Soome   between the host and a device. Isochronous transfers can be used only by full-speed, high-speed,
491*f334afcfSToomas Soome   and super-speed devices.
492*f334afcfSToomas Soome 
493*f334afcfSToomas Soome   High-speed isochronous transfers can be performed using multiple data buffers. The number of
494*f334afcfSToomas Soome   buffers that are actually prepared for the transfer is specified by DataBuffersNumber. For
495*f334afcfSToomas Soome   full-speed isochronous transfers this value is ignored.
496*f334afcfSToomas Soome 
497*f334afcfSToomas Soome   Data represents a list of pointers to the data buffers. For full-speed isochronous transfers
498*f334afcfSToomas Soome   only the data pointed by Data[0] shall be used. For high-speed isochronous transfers and for
499*f334afcfSToomas Soome   the split transactions depending on DataLength there several data buffers can be used. For
500*f334afcfSToomas Soome   the high-speed isochronous transfers the total number of buffers must not exceed EFI_USB_MAX_ISO_BUFFER_NUM.
501*f334afcfSToomas Soome 
502*f334afcfSToomas Soome   For split transactions performed on full-speed device by high-speed host controller the total
503*f334afcfSToomas Soome   number of buffers is limited to EFI_USB_MAX_ISO_BUFFER_NUM1.
504*f334afcfSToomas Soome 
505*f334afcfSToomas Soome   EFI_INVALID_PARAMETER is returned if one of the following conditionsis satisfied:
506*f334afcfSToomas Soome     - Data is NULL.
507*f334afcfSToomas Soome     - DataLength is 0.
508*f334afcfSToomas Soome     - DeviceSpeed is not one of the supported values listed above.
509*f334afcfSToomas Soome     - MaximumPacketLength is invalid. MaximumPacketLength must be 1023 or less for full-speed
510*f334afcfSToomas Soome       devices and 1024 or less for high-speed and super-speed devices.
511*f334afcfSToomas Soome 
512*f334afcfSToomas Soome   @param  This                  A pointer to the EFI_USB2_HC_PROTOCOL instance.
513*f334afcfSToomas Soome   @param  DeviceAddress         Represents the address of the target device on the USB.
514*f334afcfSToomas Soome   @param  EndPointAddress       The combination of an endpoint number and an endpoint direction of the
515*f334afcfSToomas Soome                                 target USB device.
516*f334afcfSToomas Soome   @param  DeviceSpeed           Indicates device speed. The supported values are EFI_USB_SPEED_FULL,
517*f334afcfSToomas Soome                                 EFI_USB_SPEED_HIGH, or EFI_USB_SPEED_SUPER.
518*f334afcfSToomas Soome   @param  MaximumPacketLength   Indicates the maximum packet size the target endpoint is capable of
519*f334afcfSToomas Soome                                 sending or receiving.
520*f334afcfSToomas Soome   @param  DataBuffersNumber     Number of data buffers prepared for the transfer.
521*f334afcfSToomas Soome   @param  Data                  Array of pointers to the buffers of data that will be transmitted to USB
522*f334afcfSToomas Soome                                 device or received from USB device.
523*f334afcfSToomas Soome   @param  DataLength            Specifies the length, in bytes, of the data to be sent to or received from
524*f334afcfSToomas Soome                                 the USB device.
525*f334afcfSToomas Soome   @param  Translator            A pointer to the transaction translator data.
526*f334afcfSToomas Soome   @param  IsochronousCallback   The Callback function. This function is called if the requested
527*f334afcfSToomas Soome                                 isochronous transfer is completed.
528*f334afcfSToomas Soome   @param  Context               Data passed to the IsochronousCallback function. This is an
529*f334afcfSToomas Soome                                 optional parameter and may be NULL.
530*f334afcfSToomas Soome 
531*f334afcfSToomas Soome   @retval EFI_SUCCESS           The asynchronous isochronous transfer request has been successfully
532*f334afcfSToomas Soome                                 submitted or canceled.
533*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
534*f334afcfSToomas Soome   @retval EFI_OUT_OF_RESOURCES  The asynchronous isochronous transfer could not be submitted due to
535*f334afcfSToomas Soome                                 a lack of resources.
536*f334afcfSToomas Soome 
537*f334afcfSToomas Soome **/
538*f334afcfSToomas Soome typedef
539*f334afcfSToomas Soome EFI_STATUS
540*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER)(
541*f334afcfSToomas Soome   IN     EFI_USB2_HC_PROTOCOL               *This,
542*f334afcfSToomas Soome   IN     UINT8                              DeviceAddress,
543*f334afcfSToomas Soome   IN     UINT8                              EndPointAddress,
544*f334afcfSToomas Soome   IN     UINT8                              DeviceSpeed,
545*f334afcfSToomas Soome   IN     UINTN                              MaximumPacketLength,
546*f334afcfSToomas Soome   IN     UINT8                              DataBuffersNumber,
547*f334afcfSToomas Soome   IN OUT VOID                               *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
548*f334afcfSToomas Soome   IN     UINTN                              DataLength,
549*f334afcfSToomas Soome   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
550*f334afcfSToomas Soome   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK    IsochronousCallBack,
551*f334afcfSToomas Soome   IN     VOID                               *Context OPTIONAL
552*f334afcfSToomas Soome   );
553*f334afcfSToomas Soome 
554*f334afcfSToomas Soome /**
555*f334afcfSToomas Soome   Retrieves the current status of a USB root hub port.
556*f334afcfSToomas Soome 
557*f334afcfSToomas Soome   @param  This       A pointer to the EFI_USB2_HC_PROTOCOL instance.
558*f334afcfSToomas Soome   @param  PortNumber Specifies the root hub port from which the status is to be retrieved.
559*f334afcfSToomas Soome                      This value is zero based.
560*f334afcfSToomas Soome   @param  PortStatus A pointer to the current port status bits and port status change bits.
561*f334afcfSToomas Soome 
562*f334afcfSToomas Soome   @retval EFI_SUCCESS           The status of the USB root hub port specified by PortNumber
563*f334afcfSToomas Soome                                 was returned in PortStatus.
564*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER PortNumber is invalid.
565*f334afcfSToomas Soome 
566*f334afcfSToomas Soome **/
567*f334afcfSToomas Soome typedef
568*f334afcfSToomas Soome EFI_STATUS
569*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS)(
570*f334afcfSToomas Soome   IN        EFI_USB2_HC_PROTOCOL    *This,
571*f334afcfSToomas Soome   IN        UINT8                   PortNumber,
572*f334afcfSToomas Soome   OUT       EFI_USB_PORT_STATUS     *PortStatus
573*f334afcfSToomas Soome   );
574*f334afcfSToomas Soome 
575*f334afcfSToomas Soome /**
576*f334afcfSToomas Soome   Sets a feature for the specified root hub port.
577*f334afcfSToomas Soome 
578*f334afcfSToomas Soome   @param  This        A pointer to the EFI_USB2_HC_PROTOCOL instance.
579*f334afcfSToomas Soome   @param  PortNumber  Specifies the root hub port whose feature is requested to be set. This
580*f334afcfSToomas Soome                       value is zero based.
581*f334afcfSToomas Soome   @param  PortFeature Indicates the feature selector associated with the feature set request.
582*f334afcfSToomas Soome 
583*f334afcfSToomas Soome   @retval EFI_SUCCESS           The feature specified by PortFeature was set for the USB
584*f334afcfSToomas Soome                                 root hub port specified by PortNumber.
585*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid for this function.
586*f334afcfSToomas Soome 
587*f334afcfSToomas Soome **/
588*f334afcfSToomas Soome typedef
589*f334afcfSToomas Soome EFI_STATUS
590*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE)(
591*f334afcfSToomas Soome   IN EFI_USB2_HC_PROTOCOL    *This,
592*f334afcfSToomas Soome   IN UINT8                   PortNumber,
593*f334afcfSToomas Soome   IN EFI_USB_PORT_FEATURE    PortFeature
594*f334afcfSToomas Soome   );
595*f334afcfSToomas Soome 
596*f334afcfSToomas Soome /**
597*f334afcfSToomas Soome   Clears a feature for the specified root hub port.
598*f334afcfSToomas Soome 
599*f334afcfSToomas Soome   @param  This        A pointer to the EFI_USB2_HC_PROTOCOL instance.
600*f334afcfSToomas Soome   @param  PortNumber  Specifies the root hub port whose feature is requested to be cleared. This
601*f334afcfSToomas Soome                       value is zero based.
602*f334afcfSToomas Soome   @param  PortFeature Indicates the feature selector associated with the feature clear request.
603*f334afcfSToomas Soome 
604*f334afcfSToomas Soome   @retval EFI_SUCCESS           The feature specified by PortFeature was cleared for the USB
605*f334afcfSToomas Soome                                 root hub port specified by PortNumber.
606*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid for this function.
607*f334afcfSToomas Soome 
608*f334afcfSToomas Soome **/
609*f334afcfSToomas Soome typedef
610*f334afcfSToomas Soome EFI_STATUS
611*f334afcfSToomas Soome (EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE)(
612*f334afcfSToomas Soome   IN EFI_USB2_HC_PROTOCOL    *This,
613*f334afcfSToomas Soome   IN UINT8                   PortNumber,
614*f334afcfSToomas Soome   IN EFI_USB_PORT_FEATURE    PortFeature
615*f334afcfSToomas Soome   );
616*f334afcfSToomas Soome 
617*f334afcfSToomas Soome ///
618*f334afcfSToomas Soome /// The EFI_USB2_HC_PROTOCOL provides USB host controller management, basic
619*f334afcfSToomas Soome /// data transactions over a USB bus, and USB root hub access. A device driver
620*f334afcfSToomas Soome /// that wishes to manage a USB bus in a system retrieves the EFI_USB2_HC_PROTOCOL
621*f334afcfSToomas Soome /// instance that is associated with the USB bus to be managed. A device handle
622*f334afcfSToomas Soome /// for a USB host controller will minimally contain an EFI_DEVICE_PATH_PROTOCOL
623*f334afcfSToomas Soome /// instance, and an EFI_USB2_HC_PROTOCOL instance.
624*f334afcfSToomas Soome ///
625*f334afcfSToomas Soome struct _EFI_USB2_HC_PROTOCOL {
626*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_GET_CAPABILITY                GetCapability;
627*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_RESET                         Reset;
628*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_GET_STATE                     GetState;
629*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_SET_STATE                     SetState;
630*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER              ControlTransfer;
631*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_BULK_TRANSFER                 BulkTransfer;
632*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER      AsyncInterruptTransfer;
633*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER       SyncInterruptTransfer;
634*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER          IsochronousTransfer;
635*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER    AsyncIsochronousTransfer;
636*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS       GetRootHubPortStatus;
637*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE      SetRootHubPortFeature;
638*f334afcfSToomas Soome   EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE    ClearRootHubPortFeature;
639*f334afcfSToomas Soome 
640*f334afcfSToomas Soome   ///
641*f334afcfSToomas Soome   /// The major revision number of the USB host controller. The revision information
642*f334afcfSToomas Soome   /// indicates the release of the Universal Serial Bus Specification with which the
643*f334afcfSToomas Soome   /// host controller is compliant.
644*f334afcfSToomas Soome   ///
645*f334afcfSToomas Soome   UINT16                                             MajorRevision;
646*f334afcfSToomas Soome 
647*f334afcfSToomas Soome   ///
648*f334afcfSToomas Soome   /// The minor revision number of the USB host controller. The revision information
649*f334afcfSToomas Soome   /// indicates the release of the Universal Serial Bus Specification with which the
650*f334afcfSToomas Soome   /// host controller is compliant.
651*f334afcfSToomas Soome   ///
652*f334afcfSToomas Soome   UINT16                                             MinorRevision;
653*f334afcfSToomas Soome };
654*f334afcfSToomas Soome 
655*f334afcfSToomas Soome extern EFI_GUID  gEfiUsb2HcProtocolGuid;
656*f334afcfSToomas Soome 
657*f334afcfSToomas Soome #endif
658