--- /dev/null
+/** @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