Home | History | Annotate | Download | only in Pei
      1 /** @file
      2 Provides the definition of Usb Hc Protocol and OHCI controller
      3 private data structure.
      4 
      5 Copyright (c) 2013-2015 Intel Corporation.
      6 
      7 This program and the accompanying materials
      8 are licensed and made available under the terms and conditions of the BSD License
      9 which accompanies this distribution.  The full text of the license may be found at
     10 http://opensource.org/licenses/bsd-license.php
     11 
     12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13 WITHOUT 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 
     34 typedef 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 
     55 struct _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 **/
     83 EFI_STATUS
     84 InitializeUsbHC (
     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 **/
    113 EFI_STATUS
    114 EFIAPI
    115 OhciControlTransfer (
    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 **/
    155 EFI_STATUS
    156 EFIAPI
    157 OhciBulkTransfer (
    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 
    182 EFI_STATUS
    183 EFIAPI
    184 OhciGetRootHubNumOfPorts (
    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 
    203 EFI_STATUS
    204 EFIAPI
    205 OhciGetRootHubPortStatus (
    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 **/
    226 EFI_STATUS
    227 EFIAPI
    228 OhciSetRootHubPortFeature (
    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 
    250 EFI_STATUS
    251 EFIAPI
    252 OhciClearRootHubPortFeature (
    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