1/** @file 2Provides the definition of Usb Hc Protocol and OHCI controller 3private data structure. 4 5Copyright (c) 2013-2015 Intel Corporation. 6 7This program and the accompanying materials 8are licensed and made available under the terms and conditions of the BSD License 9which accompanies this distribution. The full text of the license may be found at 10http://opensource.org/licenses/bsd-license.php 11 12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 14 15**/ 16 17 18 19#ifndef _OHCI_PEIM_H 20#define _OHCI_PEIM_H 21 22#include <PiPei.h> 23 24#include <Ppi/UsbController.h> 25#include <Ppi/UsbHostController.h> 26 27#include <Library/DebugLib.h> 28#include <Library/PeimEntryPoint.h> 29#include <Library/PeiServicesLib.h> 30#include <Library/BaseMemoryLib.h> 31#include <Library/TimerLib.h> 32#include <Library/IoLib.h> 33 34typedef struct _USB_OHCI_HC_DEV USB_OHCI_HC_DEV; 35 36#include "UsbHcMem.h" 37#include "OhciReg.h" 38#include "OhciSched.h" 39#include "OhciUrb.h" 40#include "Descriptor.h" 41 42#define EFI_USB_SPEED_FULL 0x0000 43#define EFI_USB_SPEED_LOW 0x0001 44#define EFI_USB_SPEED_HIGH 0x0002 45 46#define PAGESIZE 4096 47 48#define HC_1_MICROSECOND 1 49#define HC_1_MILLISECOND (1000 * HC_1_MICROSECOND) 50#define HC_1_SECOND (1000 * HC_1_MILLISECOND) 51 52 53#define USB_OHCI_HC_DEV_SIGNATURE SIGNATURE_32('o','h','c','i') 54 55struct _USB_OHCI_HC_DEV { 56 UINTN Signature; 57 PEI_USB_HOST_CONTROLLER_PPI UsbHostControllerPpi; 58 EFI_PEI_PPI_DESCRIPTOR PpiDescriptor; 59 UINT32 UsbHostControllerBaseAddress; 60 VOID *MemPool; 61}; 62 63#define PEI_RECOVERY_USB_OHC_DEV_FROM_EHCI_THIS(a) CR (a, USB_OHCI_HC_DEV, UsbHostControllerPpi, USB_OHCI_HC_DEV_SIGNATURE) 64 65// 66// Func List 67// 68 69/** 70 Provides software reset for the USB host controller. 71 72 @param PeiServices The pointer of EFI_PEI_SERVICES. 73 @param This The pointer of PEI_USB_HOST_CONTROLLER_PPI. 74 @param Attributes A bit mask of the reset operation to perform. 75 76 @retval EFI_SUCCESS The reset operation succeeded. 77 @retval EFI_INVALID_PARAMETER Attributes is not valid. 78 @retval EFI_UNSUPPOURTED The type of reset specified by Attributes is 79 not currently supported by the host controller. 80 @retval EFI_DEVICE_ERROR Host controller isn't halted to reset. 81 82**/ 83EFI_STATUS 84InitializeUsbHC ( 85 IN EFI_PEI_SERVICES **PeiServices, 86 IN USB_OHCI_HC_DEV *Ohc, 87 IN UINT16 Attributes 88 ); 89 90/** 91 Submits control transfer to a target USB device. 92 93 @param PeiServices The pointer of EFI_PEI_SERVICES. 94 @param This The pointer of PEI_USB_HOST_CONTROLLER_PPI. 95 @param DeviceAddress The target device address. 96 @param DeviceSpeed Target device speed. 97 @param MaximumPacketLength Maximum packet size the default control transfer 98 endpoint is capable of sending or receiving. 99 @param Request USB device request to send. 100 @param TransferDirection Specifies the data direction for the data stage. 101 @param Data Data buffer to be transmitted or received from USB device. 102 @param DataLength The size (in bytes) of the data buffer. 103 @param TimeOut Indicates the maximum timeout, in millisecond. 104 @param TransferResult Return the result of this control transfer. 105 106 @retval EFI_SUCCESS Transfer was completed successfully. 107 @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resources. 108 @retval EFI_INVALID_PARAMETER Some parameters are invalid. 109 @retval EFI_TIMEOUT Transfer failed due to timeout. 110 @retval EFI_DEVICE_ERROR Transfer failed due to host controller or device error. 111 112**/ 113EFI_STATUS 114EFIAPI 115OhciControlTransfer ( 116 IN EFI_PEI_SERVICES **PeiServices, 117 IN PEI_USB_HOST_CONTROLLER_PPI *This, 118 IN UINT8 DeviceAddress, 119 IN UINT8 DeviceSpeed, 120 IN UINT8 MaxPacketLength, 121 IN EFI_USB_DEVICE_REQUEST *Request, 122 IN EFI_USB_DATA_DIRECTION TransferDirection, 123 IN OUT VOID *Data, 124 IN OUT UINTN *DataLength, 125 IN UINTN TimeOut, 126 OUT UINT32 *TransferResult 127 ); 128/** 129 Submits bulk transfer to a bulk endpoint of a USB device. 130 131 @param PeiServices The pointer of EFI_PEI_SERVICES. 132 @param This The pointer of PEI_USB_HOST_CONTROLLER_PPI. 133 @param DeviceAddress Target device address. 134 @param EndPointAddress Endpoint number and its direction in bit 7. 135 @param MaxiPacketLength Maximum packet size the endpoint is capable of 136 sending or receiving. 137 @param Data A pointers to the buffers of data to transmit 138 from or receive into. 139 @param DataLength The lenght of the data buffer. 140 @param DataToggle On input, the initial data toggle for the transfer; 141 On output, it is updated to to next data toggle to use of 142 the subsequent bulk transfer. 143 @param TimeOut Indicates the maximum time, in millisecond, which the 144 transfer is allowed to complete. 145 @param TransferResult A pointer to the detailed result information of the 146 bulk transfer. 147 148 @retval EFI_SUCCESS The transfer was completed successfully. 149 @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource. 150 @retval EFI_INVALID_PARAMETER Parameters are invalid. 151 @retval EFI_TIMEOUT The transfer failed due to timeout. 152 @retval EFI_DEVICE_ERROR The transfer failed due to host controller error. 153 154**/ 155EFI_STATUS 156EFIAPI 157OhciBulkTransfer ( 158 IN EFI_PEI_SERVICES **PeiServices, 159 IN PEI_USB_HOST_CONTROLLER_PPI *This, 160 IN UINT8 DeviceAddress, 161 IN UINT8 EndPointAddress, 162 IN UINT8 MaxPacketLength, 163 IN OUT VOID *Data, 164 IN OUT UINTN *DataLength, 165 IN OUT UINT8 *DataToggle, 166 IN UINTN TimeOut, 167 OUT UINT32 *TransferResult 168 ); 169/** 170 Retrieves the number of root hub ports. 171 172 @param[in] PeiServices The pointer to the PEI Services Table. 173 @param[in] This The pointer to this instance of the 174 PEI_USB_HOST_CONTROLLER_PPI. 175 @param[out] NumOfPorts The pointer to the number of the root hub ports. 176 177 @retval EFI_SUCCESS The port number was retrieved successfully. 178 @retval EFI_INVALID_PARAMETER PortNumber is NULL. 179 180**/ 181 182EFI_STATUS 183EFIAPI 184OhciGetRootHubNumOfPorts ( 185 IN EFI_PEI_SERVICES **PeiServices, 186 IN PEI_USB_HOST_CONTROLLER_PPI *This, 187 OUT UINT8 *NumOfPorts 188 ); 189/** 190 Retrieves the current status of a USB root hub port. 191 192 @param PeiServices The pointer of EFI_PEI_SERVICES. 193 @param This The pointer of PEI_USB_HOST_CONTROLLER_PPI. 194 @param PortNumber The root hub port to retrieve the state from. 195 @param PortStatus Variable to receive the port state. 196 197 @retval EFI_SUCCESS The status of the USB root hub port specified. 198 by PortNumber was returned in PortStatus. 199 @retval EFI_INVALID_PARAMETER PortNumber is invalid. 200 201**/ 202 203EFI_STATUS 204EFIAPI 205OhciGetRootHubPortStatus ( 206 IN EFI_PEI_SERVICES **PeiServices, 207 IN PEI_USB_HOST_CONTROLLER_PPI *This, 208 IN UINT8 PortNumber, 209 OUT EFI_USB_PORT_STATUS *PortStatus 210 ); 211/** 212 213 Sets a feature for the specified root hub port. 214 215 @param This A pointer to the EFI_USB_HC_PROTOCOL. 216 @param PortNumber Specifies the root hub port whose feature 217 is requested to be set. 218 @param PortFeature Indicates the feature selector associated 219 with the feature set request. 220 221 @retval EFI_SUCCESS The feature specified by PortFeature was set for the 222 USB root hub port specified by PortNumber. 223 @retval EFI_DEVICE_ERROR Set feature failed because of hardware issue 224 @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid. 225**/ 226EFI_STATUS 227EFIAPI 228OhciSetRootHubPortFeature ( 229 IN EFI_PEI_SERVICES **PeiServices, 230 IN PEI_USB_HOST_CONTROLLER_PPI *This, 231 IN UINT8 PortNumber, 232 IN EFI_USB_PORT_FEATURE PortFeature 233 ); 234/** 235 Clears a feature for the specified root hub port. 236 237 @param PeiServices The pointer of EFI_PEI_SERVICES. 238 @param This The pointer of PEI_USB_HOST_CONTROLLER_PPI. 239 @param PortNumber Specifies the root hub port whose feature 240 is requested to be cleared. 241 @param PortFeature Indicates the feature selector associated with the 242 feature clear request. 243 244 @retval EFI_SUCCESS The feature specified by PortFeature was cleared 245 for the USB root hub port specified by PortNumber. 246 @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid. 247 248**/ 249 250EFI_STATUS 251EFIAPI 252OhciClearRootHubPortFeature ( 253 IN EFI_PEI_SERVICES **PeiServices, 254 IN PEI_USB_HOST_CONTROLLER_PPI *This, 255 IN UINT8 PortNumber, 256 IN EFI_USB_PORT_FEATURE PortFeature 257 ); 258#endif 259