]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.h
Clean up DEC files:
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / UhciDxe / UhciSched.h
1 /** @file
2
3 The definition for EHCI register operation routines.
4
5 Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
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 #ifndef _EFI_UHCI_SCHED_H_
17 #define _EFI_UHCI_SCHED_H_
18
19
20 #define UHCI_ASYNC_INT_SIGNATURE SIGNATURE_32 ('u', 'h', 'c', 'a')
21 //
22 // The failure mask for USB transfer return status. If any of
23 // these bit is set, the transfer failed. EFI_USB_ERR_NOEXECUTE
24 // and EFI_USB_ERR_NAK are not considered as error condition:
25 // the transfer is still going on.
26 //
27 #define USB_ERR_FAIL_MASK (EFI_USB_ERR_STALL | EFI_USB_ERR_BUFFER | \
28 EFI_USB_ERR_BABBLE | EFI_USB_ERR_CRC | \
29 EFI_USB_ERR_TIMEOUT | EFI_USB_ERR_BITSTUFF | \
30 EFI_USB_ERR_SYSTEM)
31
32
33 //
34 // Structure to return the result of UHCI QH execution.
35 // Result is the final result of the QH's QTD. NextToggle
36 // is the next data toggle to use. Complete is the actual
37 // length of data transferred.
38 //
39 typedef struct {
40 UINT32 Result;
41 UINT8 NextToggle;
42 UINTN Complete;
43 } UHCI_QH_RESULT;
44
45 typedef struct _UHCI_ASYNC_REQUEST UHCI_ASYNC_REQUEST;
46
47 //
48 // Structure used to manager the asynchronous interrupt transfers.
49 //
50 struct _UHCI_ASYNC_REQUEST{
51 UINTN Signature;
52 LIST_ENTRY Link;
53 UHCI_ASYNC_REQUEST *Recycle;
54
55 //
56 // Endpoint attributes
57 //
58 UINT8 DevAddr;
59 UINT8 EndPoint;
60 BOOLEAN IsLow;
61 UINTN Interval;
62
63 //
64 // Data and UHC structures
65 //
66 UHCI_QH_SW *QhSw;
67 UHCI_TD_SW *FirstTd;
68 UINT8 *Data; // Allocated host memory, not mapped memory
69 UINTN DataLen;
70 VOID *Mapping;
71
72 //
73 // User callback and its context
74 //
75 EFI_ASYNC_USB_TRANSFER_CALLBACK Callback;
76 VOID *Context;
77 };
78
79 #define UHCI_ASYNC_INT_FROM_LINK(a) \
80 CR (a, UHCI_ASYNC_REQUEST, Link, UHCI_ASYNC_INT_SIGNATURE)
81
82
83 /**
84 Create Frame List Structure.
85
86 @param Uhc The UHCI device.
87
88 @return EFI_OUT_OF_RESOURCES Can't allocate memory resources.
89 @return EFI_UNSUPPORTED Map memory fail.
90 @return EFI_SUCCESS Success.
91
92 **/
93 EFI_STATUS
94 UhciInitFrameList (
95 IN USB_HC_DEV *Uhc
96 );
97
98 /**
99 Destory FrameList buffer.
100
101 @param Uhc The UHCI device.
102
103 @return None.
104
105 **/
106 VOID
107 UhciDestoryFrameList (
108 IN USB_HC_DEV *Uhc
109 );
110
111
112 /**
113 Convert the poll rate to the maxium 2^n that is smaller
114 than Interval.
115
116 @param Interval The poll rate to convert.
117
118 @return The converted poll rate.
119
120 **/
121 UINTN
122 UhciConvertPollRate (
123 IN UINTN Interval
124 );
125
126
127 /**
128 Link a queue head (for asynchronous interrupt transfer) to
129 the frame list.
130
131 @param Uhc The UHCI device.
132 @param Qh The queue head to link into.
133
134 **/
135 VOID
136 UhciLinkQhToFrameList (
137 USB_HC_DEV *Uhc,
138 UHCI_QH_SW *Qh
139 );
140
141
142 /**
143 Unlink QH from the frame list is easier: find all
144 the precedence node, and pointer there next to QhSw's
145 next.
146
147 @param Uhc The UHCI device.
148 @param Qh The queue head to unlink.
149
150 **/
151 VOID
152 UhciUnlinkQhFromFrameList (
153 USB_HC_DEV *Uhc,
154 UHCI_QH_SW *Qh
155 );
156
157
158 /**
159 Check the result of the transfer.
160
161 @param Uhc The UHCI device.
162 @param Qh The queue head of the transfer.
163 @param Td The first TDs of the transfer.
164 @param TimeOut TimeOut value in milliseconds.
165 @param IsLow Is Low Speed Device.
166 @param QhResult The variable to return result.
167
168 @retval EFI_SUCCESS The transfer finished with success.
169 @retval EFI_DEVICE_ERROR Transfer failed.
170
171 **/
172 EFI_STATUS
173 UhciExecuteTransfer (
174 IN USB_HC_DEV *Uhc,
175 IN UHCI_QH_SW *Qh,
176 IN UHCI_TD_SW *Td,
177 IN UINTN TimeOut,
178 IN BOOLEAN IsLow,
179 OUT UHCI_QH_RESULT *QhResult
180 );
181
182
183 /**
184 Create Async Request node, and Link to List.
185
186 @param Uhc The UHCI device.
187 @param Qh The queue head of the transfer.
188 @param FirstTd First TD of the transfer.
189 @param DevAddr Device Address.
190 @param EndPoint EndPoint Address.
191 @param DataLen Data length.
192 @param Interval Polling Interval when inserted to frame list.
193 @param Data Data buffer, unmapped.
194 @param Callback Callback after interrupt transfeer.
195 @param Context Callback Context passed as function parameter.
196 @param IsLow Is Low Speed.
197
198 @retval EFI_SUCCESS An asynchronous transfer is created.
199 @retval EFI_INVALID_PARAMETER Paremeter is error.
200 @retval EFI_OUT_OF_RESOURCES Failed because of resource shortage.
201
202 **/
203 EFI_STATUS
204 UhciCreateAsyncReq (
205 IN USB_HC_DEV *Uhc,
206 IN UHCI_QH_SW *Qh,
207 IN UHCI_TD_SW *FirstTd,
208 IN UINT8 DevAddr,
209 IN UINT8 EndPoint,
210 IN UINTN DataLen,
211 IN UINTN Interval,
212 IN UINT8 *Data,
213 IN EFI_ASYNC_USB_TRANSFER_CALLBACK Callback,
214 IN VOID *Context,
215 IN BOOLEAN IsLow
216 );
217
218
219 /**
220 Delete Async Interrupt QH and TDs.
221
222 @param Uhc The UHCI device.
223 @param DevAddr Device Address.
224 @param EndPoint EndPoint Address.
225 @param Toggle The next data toggle to use.
226
227 @retval EFI_SUCCESS The request is deleted.
228 @retval EFI_INVALID_PARAMETER Paremeter is error.
229 @retval EFI_NOT_FOUND The asynchronous isn't found.
230
231 **/
232 EFI_STATUS
233 UhciRemoveAsyncReq (
234 IN USB_HC_DEV *Uhc,
235 IN UINT8 DevAddr,
236 IN UINT8 EndPoint,
237 OUT UINT8 *Toggle
238 );
239
240
241 /**
242 Release all the asynchronous transfers on the lsit.
243
244 @param Uhc The UHCI device.
245
246 @return None.
247
248 **/
249 VOID
250 UhciFreeAllAsyncReq (
251 IN USB_HC_DEV *Uhc
252 );
253
254
255 /**
256 Interrupt transfer periodic check handler.
257
258 @param Event The event of the time.
259 @param Context Context of the event, pointer to USB_HC_DEV.
260
261 @return None.
262
263 **/
264 VOID
265 EFIAPI
266 UhciMonitorAsyncReqList (
267 IN EFI_EVENT Event,
268 IN VOID *Context
269 );
270
271 #endif