Home | History | Annotate | Download | only in Dxe
      1 /** @file
      2 This file contains the definination for host controller schedule routines.
      3 
      4 Copyright (c) 2013-2015 Intel Corporation.
      5 
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 
     17 
     18 #ifndef _OHCI_SCHED_H
     19 #define _OHCI_SCHED_H
     20 
     21 #include "Descriptor.h"
     22 
     23 #define HCCA_MEM_SIZE     256
     24 #define GRID_SIZE         16
     25 #define GRID_SHIFT        4
     26 
     27 typedef struct _INTERRUPT_CONTEXT_ENTRY INTERRUPT_CONTEXT_ENTRY;
     28 
     29 struct _INTERRUPT_CONTEXT_ENTRY{
     30   UINT8                               DeviceAddress;
     31   UINT8                               EndPointAddress;
     32   ED_DESCRIPTOR                       *Ed;
     33   TD_DESCRIPTOR                       *DataTd;
     34   BOOLEAN                             IsSlowDevice;
     35   UINT8                               MaxPacketLength;
     36   UINTN                               PollingInterval;
     37   EFI_ASYNC_USB_TRANSFER_CALLBACK     CallBackFunction;
     38   VOID                                *Context;
     39   BOOLEAN                             IsPeriodic;
     40   VOID                                *Buffer;
     41   UINTN                               DataLength;
     42   VOID                                *UCBuffer;
     43   VOID                                *UCBufferMapping;
     44   UINT8                               *Toggle;
     45   INTERRUPT_CONTEXT_ENTRY      *NextEntry;
     46 };
     47 
     48 
     49 typedef struct {
     50   UINT32                  ErrorCode;
     51   UINT8                   NextToggle;
     52 } OHCI_ED_RESULT;
     53 
     54 /**
     55 
     56   Add an item of interrupt context
     57 
     58   @param  Ohc                   UHC private data
     59   @param  NewEntry              New entry to add
     60 
     61   @retval EFI_SUCCESS           Item successfully added
     62 
     63 **/
     64 EFI_STATUS
     65 OhciAddInterruptContextEntry (
     66   IN  USB_OHCI_HC_DEV          *Ohc,
     67   IN  INTERRUPT_CONTEXT_ENTRY  *NewEntry
     68   );
     69 
     70 /**
     71 
     72   Free a interrupt context entry
     73 
     74   @param  Ohc                   UHC private data
     75   @param  Entry                 Pointer to an interrupt context entry
     76 
     77   @retval EFI_SUCCESS           Entry freed
     78   @retval EFI_INVALID_PARAMETER Entry is NULL
     79 
     80 **/
     81 EFI_STATUS
     82 OhciFreeInterruptContextEntry (
     83   IN USB_OHCI_HC_DEV          *Ohc,
     84   IN INTERRUPT_CONTEXT_ENTRY  *Entry
     85   );
     86 
     87 /**
     88 
     89   Free entries match the device address and endpoint address
     90 
     91   @Param  Ohc                   UHC private date
     92   @Param  DeviceAddress         Item to free must match this device address
     93   @Param  EndPointAddress       Item to free must match this end point address
     94   @Param  DataToggle            DataToggle for output
     95 
     96   @retval  EFI_SUCCESS          Items match the requirement removed
     97 
     98 **/
     99 EFI_STATUS
    100 OhciFreeInterruptContext(
    101   IN  USB_OHCI_HC_DEV     *Ohc,
    102   IN  UINT8               DeviceAddress,
    103   IN  UINT8               EndPointAddress,
    104   OUT UINT8               *DataToggle
    105   );
    106 
    107 
    108 /**
    109 
    110   Convert Error code from OHCI format to EFI format
    111 
    112   @Param  ErrorCode             ErrorCode in OHCI format
    113 
    114   @retval                       ErrorCode in EFI format
    115 
    116 **/
    117 UINT32
    118 ConvertErrorCode (
    119   IN  UINT32              ErrorCode
    120   );
    121 
    122 
    123 /**
    124 
    125   Check TDs Results
    126 
    127   @Param  Ohc                   UHC private data
    128   @Param  Td                    TD_DESCRIPTOR
    129   @Param  Result                Result to return
    130 
    131   @retval TRUE                  means OK
    132   @retval FLASE                 means Error or Short packet
    133 
    134 **/
    135 BOOLEAN
    136 OhciCheckTDsResults (
    137   IN  USB_OHCI_HC_DEV     *Ohc,
    138   IN  TD_DESCRIPTOR       *Td,
    139   OUT UINT32              *Result
    140   );
    141 /**
    142 
    143   Check the task status on an ED
    144 
    145   @Param  Ed                    Pointer to the ED task that TD hooked on
    146   @Param  HeadTd                TD header for current transaction
    147 
    148   @retval                       Task Status Code
    149 
    150 **/
    151 
    152 UINT32
    153 CheckEDStatus (
    154   IN  ED_DESCRIPTOR       *Ed,
    155   IN  TD_DESCRIPTOR       *HeadTd,
    156   OUT OHCI_ED_RESULT      *EdResult
    157   );
    158 /**
    159 
    160   Check the task status
    161 
    162   @Param  Ohc                   UHC private data
    163   @Param  ListType              Pipe type
    164   @Param  Ed                    Pointer to the ED task hooked on
    165   @Param  HeadTd                Head of TD corresponding to the task
    166   @Param  ErrorCode             return the ErrorCode
    167 
    168   @retval  EFI_SUCCESS          Task done
    169   @retval  EFI_NOT_READY        Task on processing
    170   @retval  EFI_DEVICE_ERROR     Some error occured
    171 
    172 **/
    173 EFI_STATUS
    174 CheckIfDone (
    175   IN  USB_OHCI_HC_DEV       *Ohc,
    176   IN  DESCRIPTOR_LIST_TYPE  ListType,
    177   IN  ED_DESCRIPTOR         *Ed,
    178   IN  TD_DESCRIPTOR         *HeadTd,
    179   OUT OHCI_ED_RESULT        *EdResult
    180   );
    181 
    182 /**
    183 
    184   Convert TD condition code to Efi Status
    185 
    186   @Param  ConditionCode         Condition code to convert
    187 
    188   @retval  EFI_SUCCESS          No error occured
    189   @retval  EFI_NOT_READY        TD still on processing
    190   @retval  EFI_DEVICE_ERROR     Error occured in processing TD
    191 
    192 **/
    193 
    194 EFI_STATUS
    195 OhciTDConditionCodeToStatus (
    196   IN  UINT32              ConditionCode
    197   );
    198 
    199 /**
    200 
    201   Invoke callbacks hooked on done TDs
    202 
    203   @Param  Entry                 Interrupt transfer transaction information data structure
    204   @Param  Context               Ohc private data
    205 
    206 **/
    207 
    208 VOID
    209 OhciInvokeInterruptCallBack(
    210   IN  INTERRUPT_CONTEXT_ENTRY  *Entry,
    211   IN  UINT32                   Result
    212 );
    213 
    214 
    215 /**
    216 
    217   Timer to submit periodic interrupt transfer, and invoke callbacks hooked on done TDs
    218 
    219   @param  Event                 Event handle
    220   @param  Context               Device private data
    221 
    222 **/
    223 
    224 VOID
    225 EFIAPI
    226 OhciHouseKeeper (
    227   IN  EFI_EVENT           Event,
    228   IN  VOID                *Context
    229   );
    230 
    231 #endif
    232