]> git.proxmox.com Git - mirror_edk2.git/blobdiff - QuarkSocPkg/QuarkSouthCluster/Usb/Ohci/Dxe/Ohci.h
QuarkSocPkg: Add new package for Quark SoC X1000
[mirror_edk2.git] / QuarkSocPkg / QuarkSouthCluster / Usb / Ohci / Dxe / Ohci.h
diff --git a/QuarkSocPkg/QuarkSouthCluster/Usb/Ohci/Dxe/Ohci.h b/QuarkSocPkg/QuarkSouthCluster/Usb/Ohci/Dxe/Ohci.h
new file mode 100644 (file)
index 0000000..1bfe4a8
--- /dev/null
@@ -0,0 +1,669 @@
+/** @file\r
+Provides the definition of Usb Hc Protocol and OHCI controller\r
+private data structure.\r
+\r
+Copyright (c) 2013-2015 Intel Corporation.\r
+\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+\r
+\r
+#ifndef _OHCI_H\r
+#define _OHCI_H\r
+\r
+\r
+#include <Uefi.h>\r
+\r
+#include <Protocol/UsbHostController.h>\r
+#include <Protocol/PciIo.h>\r
+\r
+#include <Guid/EventGroup.h>\r
+\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include <IndustryStandard/Pci.h>\r
+\r
+\r
+typedef struct _USB_OHCI_HC_DEV USB_OHCI_HC_DEV;\r
+\r
+#include "UsbHcMem.h"\r
+#include "OhciReg.h"\r
+#include "OhciSched.h"\r
+#include "OhciUrb.h"\r
+#include "Descriptor.h"\r
+#include "ComponentName.h"\r
+#include "OhciDebug.h"\r
+\r
+extern EFI_DRIVER_BINDING_PROTOCOL   gOhciDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL   gOhciComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL  gOhciComponentName2;\r
+\r
+#define USB_OHCI_HC_DEV_SIGNATURE     SIGNATURE_32('o','h','c','i')\r
+\r
+typedef struct _HCCA_MEMORY_BLOCK{\r
+  UINT32                    HccaInterruptTable[32];    // 32-bit Physical Address to ED_DESCRIPTOR\r
+  UINT16                    HccaFrameNumber;\r
+  UINT16                    HccaPad;\r
+  UINT32                    HccaDoneHead;              // 32-bit Physical Address to TD_DESCRIPTOR\r
+  UINT8                     Reserved[116];\r
+} HCCA_MEMORY_BLOCK;\r
+\r
+\r
+struct _USB_OHCI_HC_DEV {\r
+  UINTN                     Signature;\r
+  EFI_USB_HC_PROTOCOL       UsbHc;\r
+  EFI_USB2_HC_PROTOCOL      Usb2Hc;\r
+  EFI_PCI_IO_PROTOCOL       *PciIo;\r
+  UINT64                    OriginalPciAttributes;\r
+\r
+  HCCA_MEMORY_BLOCK         *HccaMemoryBlock;\r
+  VOID                      *HccaMemoryBuf;\r
+  VOID                      *HccaMemoryMapping;\r
+  UINTN                     HccaMemoryPages;\r
+\r
+  ED_DESCRIPTOR             *IntervalList[6][32];\r
+  INTERRUPT_CONTEXT_ENTRY   *InterruptContextList;\r
+  VOID                      *MemPool;\r
+\r
+  UINT32                    ToggleFlag;\r
+\r
+  EFI_EVENT                 HouseKeeperTimer;\r
+  //\r
+  // ExitBootServicesEvent is used to stop the OHC DMA operation\r
+  // after exit boot service.\r
+  //\r
+  EFI_EVENT                  ExitBootServiceEvent;\r
+\r
+  EFI_UNICODE_STRING_TABLE  *ControllerNameTable;\r
+};\r
+\r
+#define USB_OHCI_HC_DEV_FROM_THIS(a)    CR(a, USB_OHCI_HC_DEV, UsbHc, USB_OHCI_HC_DEV_SIGNATURE)\r
+#define USB2_OHCI_HC_DEV_FROM_THIS(a)    CR(a, USB_OHCI_HC_DEV, Usb2Hc, USB_OHCI_HC_DEV_SIGNATURE)\r
+\r
+//\r
+// Func List\r
+//\r
+\r
+/**\r
+  Provides software reset for the USB host controller.\r
+\r
+  @param  This                  This EFI_USB_HC_PROTOCOL instance.\r
+  @param  Attributes            A bit mask of the reset operation to perform.\r
+\r
+  @retval EFI_SUCCESS           The reset operation succeeded.\r
+  @retval EFI_INVALID_PARAMETER Attributes is not valid.\r
+  @retval EFI_UNSUPPOURTED      The type of reset specified by Attributes is\r
+                                not currently supported by the host controller.\r
+  @retval EFI_DEVICE_ERROR      Host controller isn't halted to reset.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+OhciReset (\r
+  IN EFI_USB_HC_PROTOCOL  *This,\r
+  IN UINT16               Attributes\r
+  );\r
+/**\r
+  Retrieve the current state of the USB host controller.\r
+\r
+  @param  This                  This EFI_USB_HC_PROTOCOL instance.\r
+  @param  State                 Variable to return the current host controller\r
+                                state.\r
+\r
+  @retval EFI_SUCCESS           Host controller state was returned in State.\r
+  @retval EFI_INVALID_PARAMETER State is NULL.\r
+  @retval EFI_DEVICE_ERROR      An error was encountered while attempting to\r
+                                retrieve the host controller's current state.\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciGetState (\r
+  IN  EFI_USB_HC_PROTOCOL  *This,\r
+  OUT EFI_USB_HC_STATE     *State\r
+  );\r
+/**\r
+  Sets the USB host controller to a specific state.\r
+\r
+  @param  This                  This EFI_USB_HC_PROTOCOL instance.\r
+  @param  State                 The state of the host controller that will be set.\r
+\r
+  @retval EFI_SUCCESS           The USB host controller was successfully placed\r
+                                in the state specified by State.\r
+  @retval EFI_INVALID_PARAMETER State is invalid.\r
+  @retval EFI_DEVICE_ERROR      Failed to set the state due to device error.\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciSetState(\r
+  IN EFI_USB_HC_PROTOCOL  *This,\r
+  IN EFI_USB_HC_STATE     State\r
+  );\r
+/**\r
+\r
+  Submits control transfer to a target USB device.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.\r
+  @param  DeviceAddress         Represents the address of the target device on the USB,\r
+                                which is assigned during USB enumeration.\r
+  @param  IsSlowDevice          Indicates whether the target device is slow device\r
+                                or full-speed device.\r
+  @param  MaxPaketLength        Indicates the maximum packet size that the\r
+                                default control transfer endpoint is capable of\r
+                                sending or receiving.\r
+  @param  Request               A pointer to the USB device request that will be sent\r
+                                to the USB device.\r
+  @param  TransferDirection     Specifies the data direction for the transfer.\r
+                                There are three values available, DataIn, DataOut\r
+                                and NoData.\r
+  @param  Data                  A pointer to the buffer of data that will be transmitted\r
+                                to USB device or received from USB device.\r
+  @param  DataLength            Indicates the size, in bytes, of the data buffer\r
+                                specified by Data.\r
+  @param  TimeOut               Indicates the maximum time, in microseconds,\r
+                                which the transfer is allowed to complete.\r
+  @param  TransferResult        A pointer to the detailed result information generated\r
+                                by this control transfer.\r
+\r
+  @retval EFI_SUCCESS           The control transfer was completed successfully.\r
+  @retval EFI_OUT_OF_RESOURCES  The control transfer could not be completed due to a lack of resources.\r
+  @retval EFI_INVALID_PARAMETER Some parameters are invalid.\r
+  @retval EFI_TIMEOUT           The control transfer failed due to timeout.\r
+  @retval EFI_DEVICE_ERROR      The control transfer failed due to host controller or device error.\r
+                                Caller should check TranferResult for detailed error information.\r
+\r
+--*/\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciControlTransfer (\r
+  IN     EFI_USB_HC_PROTOCOL     *This,\r
+  IN     UINT8                   DeviceAddress,\r
+  IN     BOOLEAN                 IsSlowDevice,\r
+  IN     UINT8                   MaxPacketLength,\r
+  IN     EFI_USB_DEVICE_REQUEST  *Request,\r
+  IN     EFI_USB_DATA_DIRECTION  TransferDirection,\r
+  IN OUT VOID                    *Data                 OPTIONAL,\r
+  IN OUT UINTN                   *DataLength           OPTIONAL,\r
+  IN     UINTN                   TimeOut,\r
+  OUT    UINT32                  *TransferResult\r
+  );\r
+/**\r
+\r
+  Submits bulk transfer to a bulk endpoint of a USB device.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.\r
+  @param  DeviceAddress         Represents the address of the target device on the USB,\r
+                                which is assigned during USB enumeration.\r
+  @param  EndPointAddress       The combination of an endpoint number and an\r
+                                endpoint direction of the target USB device.\r
+                                Each endpoint address supports data transfer in\r
+                                one direction except the control endpoint\r
+                                (whose default endpoint address is 0).\r
+                                It is the caller's responsibility to make sure that\r
+                                the EndPointAddress represents a bulk endpoint.\r
+  @param  MaximumPacketLength   Indicates the maximum packet size the target endpoint\r
+                                is capable of sending or receiving.\r
+  @param  Data                  A pointer to the buffer of data that will be transmitted\r
+                                to USB device or received from USB device.\r
+  @param  DataLength            When input, indicates the size, in bytes, of the data buffer\r
+                                specified by Data. When output, indicates the actually\r
+                                transferred data size.\r
+  @param  DataToggle            A pointer to the data toggle value. On input, it indicates\r
+                                the initial data toggle value the bulk transfer should adopt;\r
+                                on output, it is updated to indicate the data toggle value\r
+                                of the subsequent bulk transfer.\r
+  @param  TimeOut               Indicates the maximum time, in microseconds, which the\r
+                                transfer is allowed to complete.\r
+  TransferResult                A pointer to the detailed result information of the\r
+                                bulk transfer.\r
+\r
+  @retval EFI_SUCCESS           The bulk transfer was completed successfully.\r
+  @retval EFI_OUT_OF_RESOURCES  The bulk transfer could not be submitted due to lack of resource.\r
+  @retval EFI_INVALID_PARAMETER Some parameters are invalid.\r
+  @retval EFI_TIMEOUT           The bulk transfer failed due to timeout.\r
+  @retval EFI_DEVICE_ERROR      The bulk transfer failed due to host controller or device error.\r
+                                Caller should check TranferResult for detailed error information.\r
+\r
+**/\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciBulkTransfer(\r
+  IN     EFI_USB_HC_PROTOCOL  *This,\r
+  IN     UINT8                DeviceAddress,\r
+  IN     UINT8                EndPointAddress,\r
+  IN     UINT8                MaxPacketLength,\r
+  IN OUT VOID                 *Data,\r
+  IN OUT UINTN                *DataLength,\r
+  IN OUT UINT8                *DataToggle,\r
+  IN     UINTN                TimeOut,\r
+  OUT    UINT32               *TransferResult\r
+  );\r
+/**\r
+\r
+  Submits an interrupt transfer to an interrupt endpoint of a USB device.\r
+\r
+  @param  Ohc                   Device private data\r
+  @param  DeviceAddress         Represents the address of the target device on the USB,\r
+                                which is assigned during USB enumeration.\r
+  @param  EndPointAddress       The combination of an endpoint number and an endpoint\r
+                                direction of the target USB device. Each endpoint address\r
+                                supports data transfer in one direction except the\r
+                                control endpoint (whose default endpoint address is 0).\r
+                                It is the caller's responsibility to make sure that\r
+                                the EndPointAddress represents an interrupt endpoint.\r
+  @param  IsSlowDevice          Indicates whether the target device is slow device\r
+                                or full-speed device.\r
+  @param  MaxPacketLength       Indicates the maximum packet size the target endpoint\r
+                                is capable of sending or receiving.\r
+  @param  IsNewTransfer         If TRUE, an asynchronous interrupt pipe is built between\r
+                                the host and the target interrupt endpoint.\r
+                                If FALSE, the specified asynchronous interrupt pipe\r
+                                is canceled.\r
+  @param  DataToggle            A pointer to the data toggle value.  On input, it is valid\r
+                                when IsNewTransfer is TRUE, and it indicates the initial\r
+                                data toggle value the asynchronous interrupt transfer\r
+                                should adopt.\r
+                                On output, it is valid when IsNewTransfer is FALSE,\r
+                                and it is updated to indicate the data toggle value of\r
+                                the subsequent asynchronous interrupt transfer.\r
+  @param  PollingInterval       Indicates the interval, in milliseconds, that the\r
+                                asynchronous interrupt transfer is polled.\r
+                                This parameter is required when IsNewTransfer is TRUE.\r
+  @param  UCBuffer              Uncacheable buffer\r
+  @param  DataLength            Indicates the length of data to be received at the\r
+                                rate specified by PollingInterval from the target\r
+                                asynchronous interrupt endpoint.  This parameter\r
+                                is only required when IsNewTransfer is TRUE.\r
+  @param  CallBackFunction      The Callback function.This function is called at the\r
+                                rate specified by PollingInterval.This parameter is\r
+                                only required when IsNewTransfer is TRUE.\r
+  @param  Context               The context that is passed to the CallBackFunction.\r
+                                This is an optional parameter and may be NULL.\r
+  @param  IsPeriodic            Periodic interrupt or not\r
+  @param  OutputED              The correspoding ED carried out\r
+  @param  OutputTD              The correspoding TD carried out\r
+\r
+\r
+  @retval EFI_SUCCESS           The asynchronous interrupt transfer request has been successfully\r
+                                submitted or canceled.\r
+  @retval EFI_INVALID_PARAMETER Some parameters are invalid.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+OhciInterruptTransfer (\r
+  IN     USB_OHCI_HC_DEV                  *Ohc,\r
+  IN     UINT8                            DeviceAddress,\r
+  IN     UINT8                            EndPointAddress,\r
+  IN     BOOLEAN                          IsSlowDevice,\r
+  IN     UINT8                            MaxPacketLength,\r
+  IN     BOOLEAN                          IsNewTransfer,\r
+  IN OUT UINT8                            *DataToggle        OPTIONAL,\r
+  IN     UINTN                            PollingInterval    OPTIONAL,\r
+  IN     VOID                             *UCBuffer          OPTIONAL,\r
+  IN     UINTN                            DataLength         OPTIONAL,\r
+  IN     EFI_ASYNC_USB_TRANSFER_CALLBACK  CallBackFunction   OPTIONAL,\r
+  IN     VOID                             *Context           OPTIONAL,\r
+  IN     BOOLEAN                          IsPeriodic         OPTIONAL,\r
+  OUT    ED_DESCRIPTOR                    **OutputED         OPTIONAL,\r
+  OUT    TD_DESCRIPTOR                    **OutputTD         OPTIONAL\r
+  );\r
+/**\r
+\r
+  Submits an asynchronous interrupt transfer to an interrupt endpoint of a USB device.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.\r
+  @param  DeviceAddress         Represents the address of the target device on the USB,\r
+                                which is assigned during USB enumeration.\r
+  @param  EndPointAddress       The combination of an endpoint number and an endpoint\r
+                                direction of the target USB device. Each endpoint address\r
+                                supports data transfer in one direction except the\r
+                                control endpoint (whose default endpoint address is 0).\r
+                                It is the caller's responsibility to make sure that\r
+                                the EndPointAddress represents an interrupt endpoint.\r
+  @param  IsSlowDevice          Indicates whether the target device is slow device\r
+                                or full-speed device.\r
+  @param  MaxiumPacketLength    Indicates the maximum packet size the target endpoint\r
+                                is capable of sending or receiving.\r
+  @param  IsNewTransfer         If TRUE, an asynchronous interrupt pipe is built between\r
+                                the host and the target interrupt endpoint.\r
+                                If FALSE, the specified asynchronous interrupt pipe\r
+                                is canceled.\r
+  @param  DataToggle            A pointer to the data toggle value.  On input, it is valid\r
+                                when IsNewTransfer is TRUE, and it indicates the initial\r
+                                data toggle value the asynchronous interrupt transfer\r
+                                should adopt.\r
+                                On output, it is valid when IsNewTransfer is FALSE,\r
+                                and it is updated to indicate the data toggle value of\r
+                                the subsequent asynchronous interrupt transfer.\r
+  @param  PollingInterval       Indicates the interval, in milliseconds, that the\r
+                                asynchronous interrupt transfer is polled.\r
+                                This parameter is required when IsNewTransfer is TRUE.\r
+  @param  DataLength            Indicates the length of data to be received at the\r
+                                rate specified by PollingInterval from the target\r
+                                asynchronous interrupt endpoint.  This parameter\r
+                                is only required when IsNewTransfer is TRUE.\r
+  @param  CallBackFunction      The Callback function.This function is called at the\r
+                                rate specified by PollingInterval.This parameter is\r
+                                only required when IsNewTransfer is TRUE.\r
+  @param  Context               The context that is passed to the CallBackFunction.\r
+                                This is an optional parameter and may be NULL.\r
+\r
+  @retval EFI_SUCCESS           The asynchronous interrupt transfer request has been successfully\r
+                                submitted or canceled.\r
+  @retval EFI_INVALID_PARAMETER Some parameters are invalid.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.\r
+\r
+**/\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciAsyncInterruptTransfer (\r
+  IN     EFI_USB_HC_PROTOCOL              *This,\r
+  IN     UINT8                            DeviceAddress,\r
+  IN     UINT8                            EndPointAddress,\r
+  IN     BOOLEAN                          IsSlowDevice,\r
+  IN     UINT8                            MaxPacketLength,\r
+  IN     BOOLEAN                          IsNewTransfer,\r
+  IN OUT UINT8                            *DataToggle        OPTIONAL,\r
+  IN     UINTN                            PollingInterval    OPTIONAL,\r
+  IN     UINTN                            DataLength         OPTIONAL,\r
+  IN     EFI_ASYNC_USB_TRANSFER_CALLBACK  CallBackFunction   OPTIONAL,\r
+  IN     VOID                             *Context           OPTIONAL\r
+  );\r
+/**\r
+\r
+  Submits synchronous interrupt transfer to an interrupt endpoint\r
+  of a USB device.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.\r
+  @param  DeviceAddress         Represents the address of the target device on the USB,\r
+                                which is assigned during USB enumeration.\r
+  @param  EndPointAddress       The combination of an endpoint number and an endpoint\r
+                                direction of the target USB device. Each endpoint\r
+                                address supports data transfer in one direction\r
+                                except the control endpoint (whose default\r
+                                endpoint address is 0). It is the caller's responsibility\r
+                                to make sure that the EndPointAddress represents\r
+                                an interrupt endpoint.\r
+  @param  IsSlowDevice          Indicates whether the target device is slow device\r
+                                or full-speed device.\r
+  @param  MaxPacketLength       Indicates the maximum packet size the target endpoint\r
+                                is capable of sending or receiving.\r
+  @param  Data                  A pointer to the buffer of data that will be transmitted\r
+                                to USB device or received from USB device.\r
+  @param  DataLength            On input, the size, in bytes, of the data buffer specified\r
+                                by Data. On output, the number of bytes transferred.\r
+  @param  DataToggle            A pointer to the data toggle value. On input, it indicates\r
+                                the initial data toggle value the synchronous interrupt\r
+                                transfer should adopt;\r
+                                on output, it is updated to indicate the data toggle value\r
+                                of the subsequent synchronous interrupt transfer.\r
+  @param  TimeOut               Indicates the maximum time, in microseconds, which the\r
+                                transfer is allowed to complete.\r
+  @param  TransferResult        A pointer to the detailed result information from\r
+                                the synchronous interrupt transfer.\r
+\r
+  @retval EFI_UNSUPPORTED       This interface not available.\r
+  @retval EFI_INVALID_PARAMETER Parameters not follow spec\r
+\r
+**/\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciSyncInterruptTransfer (\r
+  IN     EFI_USB_HC_PROTOCOL  *This,\r
+  IN     UINT8                DeviceAddress,\r
+  IN     UINT8                EndPointAddress,\r
+  IN     BOOLEAN              IsSlowDevice,\r
+  IN     UINT8                MaxPacketLength,\r
+  IN OUT VOID                 *Data,\r
+  IN OUT UINTN                *DataLength,\r
+  IN OUT UINT8                *DataToggle,\r
+  IN     UINTN                TimeOut,\r
+  OUT    UINT32               *TransferResult\r
+  );\r
+/**\r
+\r
+  Submits isochronous transfer to a target USB device.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.\r
+  @param  DeviceAddress         Represents the address of the target device on the USB,\r
+                                which is assigned during USB enumeration.\r
+  @param  EndPointAddress       End point address\r
+  @param  MaximumPacketLength   Indicates the maximum packet size that the\r
+                                default control transfer endpoint is capable of\r
+                                sending or receiving.\r
+  @param  Data                  A pointer to the buffer of data that will be transmitted\r
+                                to USB device or received from USB device.\r
+  @param  DataLength            Indicates the size, in bytes, of the data buffer\r
+                                specified by Data.\r
+  @param  TransferResult        A pointer to the detailed result information generated\r
+                                by this control transfer.\r
+\r
+  @retval EFI_UNSUPPORTED       This interface not available\r
+  @retval EFI_INVALID_PARAMETER Data is NULL or DataLength is 0 or TransferResult is NULL\r
+\r
+**/\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciIsochronousTransfer (\r
+  IN     EFI_USB_HC_PROTOCOL  *This,\r
+  IN     UINT8                DeviceAddress,\r
+  IN     UINT8                EndPointAddress,\r
+  IN     UINT8                MaximumPacketLength,\r
+  IN OUT VOID                 *Data,\r
+  IN OUT UINTN                DataLength,\r
+  OUT    UINT32               *TransferResult\r
+  );\r
+/**\r
+\r
+  Submits Async isochronous transfer to a target USB device.\r
+\r
+  @param  his                   A pointer to the EFI_USB_HC_PROTOCOL instance.\r
+  @param  DeviceAddress         Represents the address of the target device on the USB,\r
+                                which is assigned during USB enumeration.\r
+  @param  EndPointAddress       End point address\r
+  @param  MaximumPacketLength   Indicates the maximum packet size that the\r
+                                default control transfer endpoint is capable of\r
+                                sending or receiving.\r
+  @param  Data                  A pointer to the buffer of data that will be transmitted\r
+                                to USB device or received from USB device.\r
+  @param  IsochronousCallBack   When the transfer complete, the call back function will be called\r
+  @param  Context               Pass to the call back function as parameter\r
+\r
+  @retval EFI_UNSUPPORTED       This interface not available\r
+  @retval EFI_INVALID_PARAMETER Data is NULL or Datalength is 0\r
+\r
+**/\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciAsyncIsochronousTransfer (\r
+  IN     EFI_USB_HC_PROTOCOL                *This,\r
+  IN     UINT8                              DeviceAddress,\r
+  IN     UINT8                              EndPointAddress,\r
+  IN     UINT8                              MaximumPacketLength,\r
+  IN OUT VOID                               *Data,\r
+  IN OUT UINTN                              DataLength,\r
+  IN     EFI_ASYNC_USB_TRANSFER_CALLBACK    IsochronousCallBack,\r
+  IN     VOID                               *Context OPTIONAL\r
+  );\r
+\r
+/**\r
+\r
+  Retrieves the number of root hub ports.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.\r
+  @param  NumOfPorts            A pointer to the number of the root hub ports.\r
+\r
+  @retval EFI_SUCCESS           The port number was retrieved successfully.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+OhciGetRootHubNumOfPorts (\r
+  IN  EFI_USB_HC_PROTOCOL  *This,\r
+  OUT UINT8                *NumOfPorts\r
+  );\r
+/**\r
+\r
+  Retrieves the current status of a USB root hub port.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL.\r
+  @param  PortNumber            Specifies the root hub port from which the status\r
+                                is to be retrieved.  This value is zero-based. For example,\r
+                                if a root hub has two ports, then the first port is numbered 0,\r
+                                and the second port is numbered 1.\r
+  @param  PortStatus            A pointer to the current port status bits and\r
+                                port status change bits.\r
+\r
+  @retval EFI_SUCCESS           The status of the USB root hub port specified by PortNumber\r
+                                was returned in PortStatus.\r
+  @retval EFI_INVALID_PARAMETER Port number not valid\r
+**/\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+OhciGetRootHubPortStatus (\r
+  IN  EFI_USB_HC_PROTOCOL  *This,\r
+  IN  UINT8                PortNumber,\r
+  OUT EFI_USB_PORT_STATUS  *PortStatus\r
+  );\r
+\r
+/**\r
+\r
+  Sets a feature for the specified root hub port.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL.\r
+  @param  PortNumber            Specifies the root hub port whose feature\r
+                                is requested to be set.\r
+  @param  PortFeature           Indicates the feature selector associated\r
+                                with the feature set request.\r
+\r
+  @retval EFI_SUCCESS           The feature specified by PortFeature was set for the\r
+                                USB root hub port specified by PortNumber.\r
+  @retval EFI_DEVICE_ERROR      Set feature failed because of hardware issue\r
+  @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+OhciSetRootHubPortFeature (\r
+  IN EFI_USB_HC_PROTOCOL   *This,\r
+  IN UINT8                 PortNumber,\r
+  IN EFI_USB_PORT_FEATURE  PortFeature\r
+  );\r
+/**\r
+\r
+  Clears a feature for the specified root hub port.\r
+\r
+  @param  This                  A pointer to the EFI_USB_HC_PROTOCOL instance.\r
+  @param  PortNumber            Specifies the root hub port whose feature\r
+                                is requested to be cleared.\r
+  @param  PortFeature           Indicates the feature selector associated with the\r
+                                feature clear request.\r
+\r
+  @retval EFI_SUCCESS           The feature specified by PortFeature was cleared for the\r
+                                USB root hub port specified by PortNumber.\r
+  @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.\r
+  @retval EFI_DEVICE_ERROR      Some error happened when clearing feature\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+OhciClearRootHubPortFeature (\r
+  IN EFI_USB_HC_PROTOCOL   *This,\r
+  IN UINT8                 PortNumber,\r
+  IN EFI_USB_PORT_FEATURE  PortFeature\r
+  );\r
+\r
+\r
+/**\r
+  Test to see if this driver supports ControllerHandle. Any\r
+  ControllerHandle that has UsbHcProtocol installed will be supported.\r
+\r
+  @param  This                 Protocol instance pointer.\r
+  @param  Controller           Handle of device to test.\r
+  @param  RemainingDevicePath  Not used.\r
+\r
+  @return EFI_SUCCESS          This driver supports this device.\r
+  @return EFI_UNSUPPORTED      This driver does not support this device.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+\r
+OHCIDriverBindingSupported (\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
+  );\r
+\r
+/**\r
+  Starting the Usb OHCI Driver.\r
+\r
+  @param  This                  Protocol instance pointer.\r
+  @param  Controller            Handle of device to test.\r
+  @param  RemainingDevicePath   Not used.\r
+\r
+  @retval EFI_SUCCESS           This driver supports this device.\r
+  @retval EFI_UNSUPPORTED       This driver does not support this device.\r
+  @retval EFI_DEVICE_ERROR      This driver cannot be started due to device Error.\r
+                                EFI_OUT_OF_RESOURCES- Failed due to resource shortage.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+OHCIDriverBindingStart (\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
+  );\r
+\r
+/**\r
+  Stop this driver on ControllerHandle. Support stoping any child handles\r
+  created by this driver.\r
+\r
+  @param  This                  Protocol instance pointer.\r
+  @param  Controller            Handle of device to stop driver on.\r
+  @param  NumberOfChildren      Number of Children in the ChildHandleBuffer.\r
+  @param  ChildHandleBuffer     List of handles for the children we need to stop.\r
+\r
+  @return EFI_SUCCESS\r
+  @return others\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+OHCIDriverBindingStop (\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   Controller,\r
+  IN UINTN                        NumberOfChildren,\r
+  IN EFI_HANDLE                   *ChildHandleBuffer\r
+  );\r
+\r
+#endif\r