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