• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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