1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
|
/** @file
Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciSched.h
Abstract:
This file contains the definination for host controller schedule routines
Revision History
**/
#ifndef _EFI_EHCI_SCHED_H_
#define _EFI_EHCI_SCHED_H_
EFI_STATUS
EhcInitSched (
IN USB2_HC_DEV *Ehc
)
/*++
Routine Description:
Initialize the schedule data structure such as frame list
Arguments:
Ehc - The EHCI device to init schedule data for
Returns:
EFI_OUT_OF_RESOURCES - Failed to allocate resource to init schedule data
EFI_SUCCESS - The schedule data is initialized
--*/
;
/**
Free the schedule data. It may be partially initialized.
@param Ehc The EHCI device
@return None
**/
VOID
EhcFreeSched (
IN USB2_HC_DEV *Ehc
)
;
/**
Link the queue head to the asynchronous schedule list.
UEFI only supports one CTRL/BULK transfer at a time
due to its interfaces. This simplifies the AsynList
management: A reclamation header is always linked to
the AsyncListAddr, the only active QH is appended to it.
@param Ehc The EHCI device
@param Qh The queue head to link
@return None
**/
VOID
EhcLinkQhToAsync (
IN USB2_HC_DEV *Ehc,
IN EHC_QH *Qh
)
;
/**
Unlink a queue head from the asynchronous schedule list.
Need to synchronize with hardware
@param Ehc The EHCI device
@param Qh The queue head to unlink
@return None
**/
VOID
EhcUnlinkQhFromAsync (
IN USB2_HC_DEV *Ehc,
IN EHC_QH *Qh
)
;
/**
Link a queue head for interrupt transfer to the periodic
schedule frame list. This code is very much the same as
that in UHCI.
@param Ehc The EHCI device
@param Qh The queue head to link
@return None
**/
VOID
EhcLinkQhToPeriod (
IN USB2_HC_DEV *Ehc,
IN EHC_QH *Qh
)
;
/**
Unlink an interrupt queue head from the periodic
schedule frame list
@param Ehc The EHCI device
@param Qh The queue head to unlink
@return None
**/
VOID
EhcUnlinkQhFromPeriod (
IN USB2_HC_DEV *Ehc,
IN EHC_QH *Qh
)
;
/**
Execute the transfer by polling the URB. This is a synchronous operation.
@param Ehc The EHCI device
@param Urb The URB to execute
@param TimeOut The time to wait before abort, in millisecond.
@return EFI_DEVICE_ERROR : The transfer failed due to transfer error
@return EFI_TIMEOUT : The transfer failed due to time out
@return EFI_SUCCESS : The transfer finished OK
**/
EFI_STATUS
EhcExecTransfer (
IN USB2_HC_DEV *Ehc,
IN URB *Urb,
IN UINTN TimeOut
)
;
/**
Delete a single asynchronous interrupt transfer for
the device and endpoint
@param Ehc The EHCI device
@param DevAddr The address of the target device
@param EpNum The endpoint of the target
@param DataToggle Return the next data toggle to use
@retval EFI_SUCCESS An asynchronous transfer is removed
@retval EFI_NOT_FOUND No transfer for the device is found
**/
EFI_STATUS
EhciDelAsyncIntTransfer (
IN USB2_HC_DEV *Ehc,
IN UINT8 DevAddr,
IN UINT8 EpNum,
OUT UINT8 *DataToggle
)
;
/**
Remove all the asynchronous interrutp transfers
@param Ehc The EHCI device
@return None
**/
VOID
EhciDelAllAsyncIntTransfers (
IN USB2_HC_DEV *Ehc
)
;
/**
Interrupt transfer periodic check handler
@param Event Interrupt event
@param Context Pointer to USB2_HC_DEV
@return None
**/
VOID
EhcMoniteAsyncRequests (
IN EFI_EVENT Event,
IN VOID *Context
)
;
#endif
|