1 /** @file
2   EFI_USB_HC_PROTOCOL as defined in EFI 1.10.
3 
4   The USB Host Controller Protocol is used by code, typically USB bus drivers,
5   running in the EFI boot services environment, to perform data transactions
6   over a USB bus. In addition, it provides an abstraction for the root hub of the USB bus.
7 
8   Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
9   This program and the accompanying materials
10   are licensed and made available under the terms and conditions of the BSD License
11   which accompanies this distribution.  The full text of the license may be found at
12   http://opensource.org/licenses/bsd-license.php
13 
14   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 
17 **/
18 
19 #ifndef _USB_HOSTCONTROLLER_H_
20 #define _USB_HOSTCONTROLLER_H_
21 
22 #include <Protocol/Usb2HostController.h>
23 
24 #define EFI_USB_HC_PROTOCOL_GUID \
25   { \
26     0xf5089266, 0x1aa0, 0x4953, {0x97, 0xd8, 0x56, 0x2f, 0x8a, 0x73, 0xb5, 0x19 } \
27   }
28 
29 ///
30 /// Forward reference for pure ANSI compatability
31 ///
32 typedef struct _EFI_USB_HC_PROTOCOL EFI_USB_HC_PROTOCOL;
33 
34 //
35 // Protocol definitions
36 //
37 
38 /**
39   Provides software reset for the USB host controller.
40 
41   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
42   @param  Attributes            A bit mask of the reset operation to perform.
43 
44   @retval EFI_SUCCESS           The reset operation succeeded.
45   @retval EFI_UNSUPPORTED       The type of reset specified by Attributes is not currently supported
46                                 by the host controller hardware.
47   @retval EFI_INVALID_PARAMETER Attributes is not valid.
48   @retval EFI_DEVICE_ERROR      An error was encountered while attempting to perform the reset operation.
49 
50 **/
51 typedef
52 EFI_STATUS
53 (EFIAPI *EFI_USB_HC_PROTOCOL_RESET)(
54   IN EFI_USB_HC_PROTOCOL     *This,
55   IN UINT16                  Attributes
56   );
57 
58 /**
59   Retrieves current state of the USB host controller.
60 
61   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
62   @param  State                 A pointer to the EFI_USB_HC_STATE data structure that
63                                 indicates current state of the USB host controller.
64 
65   @retval EFI_SUCCESS           The state information of the host controller was returned in State.
66   @retval EFI_INVALID_PARAMETER State is NULL.
67   @retval EFI_DEVICE_ERROR      An error was encountered while attempting to retrieve the host controller's
68                                 current state.
69 
70 **/
71 typedef
72 EFI_STATUS
73 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_STATE)(
74   IN  EFI_USB_HC_PROTOCOL    *This,
75   OUT EFI_USB_HC_STATE       *State
76   );
77 
78 /**
79   Sets the USB host controller to a specific state.
80 
81   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
82   @param  State                 Indicates the state of the host controller that will be set.
83 
84   @retval EFI_SUCCESS           The USB host controller was successfully placed in the state specified by
85                                 State.
86   @retval EFI_INVALID_PARAMETER State is NULL.
87   @retval EFI_DEVICE_ERROR      Failed to set the state specified by State due to device error.
88 
89 **/
90 typedef
91 EFI_STATUS
92 (EFIAPI *EFI_USB_HC_PROTOCOL_SET_STATE)(
93   IN EFI_USB_HC_PROTOCOL     *This,
94   IN EFI_USB_HC_STATE        State
95   );
96 
97 /**
98   Submits control transfer to a target USB device.
99 
100   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
101   @param  DeviceAddress         Represents the address of the target device on the USB, which is
102                                 assigned during USB enumeration.
103   @param  IsSlowDevice          Indicates whether the target device is slow device or full-speed
104                                 device.
105   @param  MaximumPacketLength   Indicates the maximum packet size that the default control
106                                 transfer endpoint is capable of sending or receiving.
107   @param  Request               A pointer to the USB device request that will be sent to the USB
108                                 device.
109   @param  TransferDirection     Specifies the data direction for the transfer. There are three
110                                 values available, EfiUsbDataIn, EfiUsbDataOut and EfiUsbNoData.
111   @param  Data                  A pointer to the buffer of data that will be transmitted to USB
112                                 device or received from USB device.
113   @param  DataLength            On input, indicates the size, in bytes, of the data buffer specified
114                                 by Data. On output, indicates the amount of data actually
115                                 transferred.
116   @param  TimeOut               Indicates the maximum time, in milliseconds, which the transfer
117                                 is allowed to complete.
118   @param  TransferResult        A pointer to the detailed result information generated by this
119                                 control transfer.
120 
121   @retval EFI_SUCCESS           The control transfer was completed successfully.
122   @retval EFI_OUT_OF_RESOURCES  The control transfer could not be completed due to a lack of resources.
123   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
124   @retval EFI_TIMEOUT           The control transfer failed due to timeout.
125   @retval EFI_DEVICE_ERROR      The control transfer failed due to host controller or device error.
126 
127 **/
128 typedef
129 EFI_STATUS
130 (EFIAPI *EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER)(
131   IN     EFI_USB_HC_PROTOCOL       *This,
132   IN     UINT8                     DeviceAddress,
133   IN     BOOLEAN                   IsSlowDevice,
134   IN     UINT8                     MaximumPacketLength,
135   IN     EFI_USB_DEVICE_REQUEST    *Request,
136   IN     EFI_USB_DATA_DIRECTION    TransferDirection,
137   IN OUT VOID                      *Data       OPTIONAL,
138   IN OUT UINTN                     *DataLength OPTIONAL,
139   IN     UINTN                     TimeOut,
140   OUT    UINT32                    *TransferResult
141   );
142 
143 /**
144   Submits bulk transfer to a bulk endpoint of a USB device.
145 
146   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
147   @param  DeviceAddress         Represents the address of the target device on the USB, which is
148                                 assigned during USB enumeration.
149   @param  EndPointAddress       The combination of an endpoint number and an endpoint
150                                 direction of the target USB device. Each endpoint address
151                                 supports data transfer in one direction except the control
152                                 endpoint (whose default endpoint address is 0). It is the
153                                 caller's responsibility to make sure that the EndPointAddress
154                                 represents a bulk endpoint.
155   @param  MaximumPacketLength   Indicates the maximum packet size that the default control
156                                 transfer endpoint is capable of sending or receiving.
157   @param  Data                  A pointer to the buffer of data that will be transmitted to USB
158                                 device or received from USB device.
159   @param  DataLength            On input, indicates the size, in bytes, of the data buffer specified
160                                 by Data. On output, indicates the amount of data actually
161                                 transferred.
162   @param  DataToggle            A pointer to the data toggle value.
163   @param  TimeOut               Indicates the maximum time, in milliseconds, which the transfer
164                                 is allowed to complete.
165   @param  TransferResult        A pointer to the detailed result information of the bulk transfer.
166 
167   @retval EFI_SUCCESS           The bulk transfer was completed successfully.
168   @retval EFI_OUT_OF_RESOURCES  The bulk transfer could not be completed due to a lack of resources.
169   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
170   @retval EFI_TIMEOUT           The bulk transfer failed due to timeout.
171   @retval EFI_DEVICE_ERROR      The bulk transfer failed due to host controller or device error.
172 
173 **/
174 typedef
175 EFI_STATUS
176 (EFIAPI *EFI_USB_HC_PROTOCOL_BULK_TRANSFER)(
177   IN     EFI_USB_HC_PROTOCOL    *This,
178   IN     UINT8                  DeviceAddress,
179   IN     UINT8                  EndPointAddress,
180   IN     UINT8                  MaximumPacketLength,
181   IN OUT VOID                   *Data,
182   IN OUT UINTN                  *DataLength,
183   IN OUT UINT8                  *DataToggle,
184   IN     UINTN                  TimeOut,
185   OUT    UINT32                 *TransferResult
186   );
187 
188 /**
189   Submits an asynchronous interrupt transfer to an interrupt endpoint of a USB device.
190 
191   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
192   @param  DeviceAddress         Represents the address of the target device on the USB, which is
193                                 assigned during USB enumeration.
194   @param  EndPointAddress       The combination of an endpoint number and an endpoint
195                                 direction of the target USB device. Each endpoint address
196                                 supports data transfer in one direction except the control
197                                 endpoint (whose default endpoint address is zero). It is the
198                                 caller's responsibility to make sure that the
199                                 EndPointAddress represents an interrupt endpoint.
200   @param  IsSlowDevice          Indicates whether the target device is slow device or full-speed
201                                 device.
202   @param  MaximumPacketLength   Indicates the maximum packet size that the default control
203                                 transfer endpoint is capable of sending or receiving.
204   @param  IsNewTransfer         If TRUE, an asynchronous interrupt pipe is built between the host
205                                 and the target interrupt endpoint. If FALSE, the specified asynchronous
206                                 interrupt pipe is canceled. If TRUE, and an interrupt transfer exists
207                                 for the target end point, then EFI_INVALID_PARAMETER is returned.
208   @param  DataToggle            A pointer to the data toggle value. On input, it is valid when
209                                 IsNewTransfer is TRUE, and it indicates the initial data toggle
210                                 value the asynchronous interrupt transfer should adopt. On output,
211                                 it is valid when IsNewTransfer is FALSE, and it is updated to indicate
212                                 the data toggle value of the subsequent asynchronous interrupt transfer.
213   @param  PollingInterval       Indicates the interval, in milliseconds, that the asynchronous
214                                 interrupt transfer is polled.
215   @param  DataLength            Indicates the length of data to be received at the rate specified by
216                                 PollingInterval from the target asynchronous interrupt
217                                 endpoint. This parameter is only required when IsNewTransfer is TRUE.
218   @param  CallBackFunction      The Callback function. This function is called at the rate specified by
219                                 PollingInterval. This parameter is only required when IsNewTransfer is TRUE.
220   @param  Context               The context that is passed to the CallBackFunction.
221 
222   @retval EFI_SUCCESS           The asynchronous interrupt transfer request has been successfully
223                                 submitted or canceled.
224   @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
225   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
226   @retval EFI_TIMEOUT           The bulk transfer failed due to timeout.
227   @retval EFI_DEVICE_ERROR      The bulk transfer failed due to host controller or device error.
228 
229 **/
230 typedef
231 EFI_STATUS
232 (EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER)(
233   IN     EFI_USB_HC_PROTOCOL                                 *This,
234   IN     UINT8                                               DeviceAddress,
235   IN     UINT8                                               EndPointAddress,
236   IN     BOOLEAN                                             IsSlowDevice,
237   IN     UINT8                                               MaxiumPacketLength,
238   IN     BOOLEAN                                             IsNewTransfer,
239   IN OUT UINT8                                               *DataToggle,
240   IN     UINTN                                               PollingInterval  OPTIONAL,
241   IN     UINTN                                               DataLength       OPTIONAL,
242   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK                     CallBackFunction OPTIONAL,
243   IN     VOID                                                *Context         OPTIONAL
244   );
245 
246 /**
247   Submits synchronous interrupt transfer to an interrupt endpoint of a USB device.
248 
249   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
250   @param  DeviceAddress         Represents the address of the target device on the USB, which is
251                                 assigned during USB enumeration.
252   @param  EndPointAddress       The combination of an endpoint number and an endpoint
253                                 direction of the target USB device. Each endpoint address
254                                 supports data transfer in one direction except the control
255                                 endpoint (whose default endpoint address is zero). It is the
256                                 caller's responsibility to make sure that the
257                                 EndPointAddress represents an interrupt endpoint.
258   @param  IsSlowDevice          Indicates whether the target device is slow device or full-speed
259                                 device.
260   @param  MaximumPacketLength   Indicates the maximum packet size that the default control
261                                 transfer endpoint is capable of sending or receiving.
262   @param  Data                  A pointer to the buffer of data that will be transmitted to USB
263                                 device or received from USB device.                                                                                            asynchronous interrupt pipe is canceled.
264   @param  DataLength            On input, the size, in bytes, of the data buffer specified by Data.
265                                 On output, the number of bytes transferred.
266   @param  DataToggle            A pointer to the data toggle value. On input, it indicates the initial
267                                 data toggle value the synchronous interrupt transfer should adopt;
268                                 on output, it is updated to indicate the data toggle value of the
269                                 subsequent synchronous interrupt transfer.
270   @param  TimeOut               Indicates the maximum time, in milliseconds, which the transfer
271                                 is allowed to complete.
272   @param  TransferResult        A pointer to the detailed result information from the synchronous
273                                 interrupt transfer.
274 
275   @retval EFI_SUCCESS           The synchronous interrupt transfer was completed successfully.
276   @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
277   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
278   @retval EFI_TIMEOUT           The synchronous interrupt transfer failed due to timeout.
279   @retval EFI_DEVICE_ERROR      The synchronous interrupt transfer failed due to host controller or device error.
280 
281 **/
282 typedef
283 EFI_STATUS
284 (EFIAPI *EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER)(
285   IN     EFI_USB_HC_PROTOCOL    *This,
286   IN     UINT8                  DeviceAddress,
287   IN     UINT8                  EndPointAddress,
288   IN     BOOLEAN                IsSlowDevice,
289   IN     UINT8                  MaximumPacketLength,
290   IN OUT VOID                   *Data,
291   IN OUT UINTN                  *DataLength,
292   IN OUT UINT8                  *DataToggle,
293   IN     UINTN                  TimeOut,
294   OUT    UINT32                 *TransferResult
295   );
296 
297 /**
298   Submits isochronous transfer to an isochronous endpoint of a USB device.
299 
300   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
301   @param  DeviceAddress         Represents the address of the target device on the USB, which is
302                                 assigned during USB enumeration.
303   @param  EndPointAddress       The combination of an endpoint number and an endpoint
304                                 direction of the target USB device. Each endpoint address
305                                 supports data transfer in one direction except the control
306                                 endpoint (whose default endpoint address is 0). It is the caller's
307                                 responsibility to make sure that the EndPointAddress
308                                 represents an isochronous endpoint.
309   @param  MaximumPacketLength   Indicates the maximum packet size that the default control
310                                 transfer endpoint is capable of sending or receiving.
311   @param  Data                  A pointer to the buffer of data that will be transmitted to USB
312                                 device or received from USB device.                                                                                            asynchronous interrupt pipe is canceled.
313   @param  DataLength            Specifies the length, in bytes, of the data to be sent to or received
314                                 from the USB device.
315   @param  TransferResult        A pointer to the detailed result information from the isochronous
316                                 transfer.
317 
318   @retval EFI_SUCCESS           The isochronous transfer was completed successfully.
319   @retval EFI_OUT_OF_RESOURCES  The isochronous could not be completed due to a lack of resources.
320   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
321   @retval EFI_TIMEOUT           The isochronous transfer failed due to timeout.
322   @retval EFI_DEVICE_ERROR      The isochronous transfer failed due to host controller or device error.
323 
324 **/
325 typedef
326 EFI_STATUS
327 (EFIAPI *EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER)(
328   IN     EFI_USB_HC_PROTOCOL    *This,
329   IN     UINT8                  DeviceAddress,
330   IN     UINT8                  EndPointAddress,
331   IN     UINT8                  MaximumPacketLength,
332   IN OUT VOID                   *Data,
333   IN     UINTN                  DataLength,
334   OUT    UINT32                 *TransferResult
335   );
336 
337 /**
338   Submits nonblocking isochronous transfer to an isochronous endpoint of a USB device.
339 
340   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
341   @param  DeviceAddress         Represents the address of the target device on the USB, which is
342                                 assigned during USB enumeration.
343   @param  EndPointAddress       The combination of an endpoint number and an endpoint
344                                 direction of the target USB device. Each endpoint address
345                                 supports data transfer in one direction except the control
346                                 endpoint (whose default endpoint address is zero). It is the
347                                 caller's responsibility to make sure that the
348                                 EndPointAddress represents an isochronous endpoint.
349   @param  MaximumPacketLength   Indicates the maximum packet size that the default control
350                                 transfer endpoint is capable of sending or receiving. For isochronous
351                                 endpoints, this value is used to reserve the bus time in the schedule,
352                                 required for the perframe data payloads. The pipe may, on an ongoing basis,
353                                 actually use less bandwidth than that reserved.
354   @param  Data                  A pointer to the buffer of data that will be transmitted to USB
355                                 device or received from USB device.                                                                                            asynchronous interrupt pipe is canceled.
356   @param  DataLength            Specifies the length, in bytes, of the data to be sent to or received
357                                 from the USB device.
358   @param  IsochronousCallback   The Callback function.This function is called if the requested
359                                 isochronous transfer is completed.
360   @param  Context               Data passed to the IsochronousCallback function. This is
361                                 an optional parameter and may be NULL.
362 
363   @retval EFI_SUCCESS           The asynchronous isochronous transfer was completed successfully.
364   @retval EFI_OUT_OF_RESOURCES  The asynchronous isochronous could not be completed due to a lack of resources.
365   @retval EFI_INVALID_PARAMETER Some parameters are invalid.
366 
367 **/
368 typedef
369 EFI_STATUS
370 (EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER)(
371   IN     EFI_USB_HC_PROTOCOL                *This,
372   IN     UINT8                              DeviceAddress,
373   IN     UINT8                              EndPointAddress,
374   IN     UINT8                              MaximumPacketLength,
375   IN OUT VOID                               *Data,
376   IN     UINTN                              DataLength,
377   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK    IsochronousCallBack,
378   IN     VOID                               *Context OPTIONAL
379   );
380 
381 /**
382   Retrieves the number of root hub ports.
383 
384   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
385   @param  PortNumber            A pointer to the number of the root hub ports.
386 
387   @retval EFI_SUCCESS           The port number was retrieved successfully.
388   @retval EFI_DEVICE_ERROR      An error was encountered while attempting to retrieve the port number.
389   @retval EFI_INVALID_PARAMETER PortNumber is NULL.
390 
391 **/
392 typedef
393 EFI_STATUS
394 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER)(
395   IN EFI_USB_HC_PROTOCOL    *This,
396   OUT UINT8                 *PortNumber
397   );
398 
399 /**
400   Retrieves the current status of a USB root hub port.
401 
402   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
403   @param  PortNumber            Specifies the root hub port from which the status is to be retrieved.
404                                 This value is zero based. For example, if a root hub has two ports,
405                                 then the first port is numbered 0, and the second port is
406                                 numbered 1.
407   @param  PortStatus            A pointer to the current port status bits and port status change bits.
408 
409   @retval EFI_SUCCESS           The status of the USB root hub port specified by PortNumber
410                                 was returned in PortStatus.
411   @retval EFI_INVALID_PARAMETER PortNumber is invalid.
412 
413 **/
414 typedef
415 EFI_STATUS
416 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS)(
417   IN EFI_USB_HC_PROTOCOL     *This,
418   IN  UINT8                  PortNumber,
419   OUT EFI_USB_PORT_STATUS    *PortStatus
420   );
421 
422 /**
423   Sets a feature for the specified root hub port.
424 
425   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
426   @param  PortNumber            Specifies the root hub port from which the status is to be retrieved.
427                                 This value is zero based. For example, if a root hub has two ports,
428                                 then the first port is numbered 0, and the second port is
429                                 numbered 1.
430   @param  PortFeature           Indicates the feature selector associated with the feature set
431                                 request.
432 
433   @retval EFI_SUCCESS           The feature specified by PortFeature was set for the USB
434                                 root hub port specified by PortNumber.
435   @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid for this function.
436 
437 **/
438 typedef
439 EFI_STATUS
440 (EFIAPI *EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE)(
441   IN EFI_USB_HC_PROTOCOL     *This,
442   IN UINT8                   PortNumber,
443   IN EFI_USB_PORT_FEATURE    PortFeature
444   );
445 
446 /**
447   Clears a feature for the specified root hub port.
448 
449   @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.
450   @param  PortNumber            Specifies the root hub port from which the status is to be retrieved.
451                                 This value is zero based. For example, if a root hub has two ports,
452                                 then the first port is numbered 0, and the second port is
453                                 numbered 1.
454   @param  PortFeature           Indicates the feature selector associated with the feature clear
455                                 request.
456 
457   @retval EFI_SUCCESS           The feature specified by PortFeature was cleared for the USB
458                                 root hub port specified by PortNumber.
459   @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid for this function.
460 
461 **/
462 typedef
463 EFI_STATUS
464 (EFIAPI *EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE)(
465   IN EFI_USB_HC_PROTOCOL     *This,
466   IN UINT8                   PortNumber,
467   IN EFI_USB_PORT_FEATURE    PortFeature
468   );
469 
470 
471 ///
472 /// The EFI_USB_HC_PROTOCOL provides USB host controller management, basic data transactions
473 /// over a USB bus, and USB root hub access. A device driver that wishes to manage a USB bus in a
474 /// system retrieves the EFI_USB_HC_PROTOCOL instance that is associated with the USB bus to be
475 /// managed. A device handle for a USB host controller will minimally contain an
476 /// EFI_DEVICE_PATH_PROTOCOL instance, and an EFI_USB_HC_PROTOCOL instance.
477 ///
478 struct _EFI_USB_HC_PROTOCOL {
479   EFI_USB_HC_PROTOCOL_RESET                       Reset;
480   EFI_USB_HC_PROTOCOL_GET_STATE                   GetState;
481   EFI_USB_HC_PROTOCOL_SET_STATE                   SetState;
482   EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER            ControlTransfer;
483   EFI_USB_HC_PROTOCOL_BULK_TRANSFER               BulkTransfer;
484   EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER    AsyncInterruptTransfer;
485   EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER     SyncInterruptTransfer;
486   EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER        IsochronousTransfer;
487   EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER  AsyncIsochronousTransfer;
488   EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER     GetRootHubPortNumber;
489   EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS     GetRootHubPortStatus;
490   EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE    SetRootHubPortFeature;
491   EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE  ClearRootHubPortFeature;
492   ///
493   /// The major revision number of the USB host controller. The revision information
494   /// indicates the release of the Universal Serial Bus Specification with which the
495   /// host controller is compliant.
496   ///
497   UINT16                                          MajorRevision;
498   ///
499   /// The minor revision number of the USB host controller. The revision information
500   /// indicates the release of the Universal Serial Bus Specification with which the
501   /// host controller is compliant.
502   ///
503   UINT16                                          MinorRevision;
504 };
505 
506 extern EFI_GUID gEfiUsbHcProtocolGuid;
507 
508 #endif
509