]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Bus/Pci/EhciDxe/EhciSched.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / EhciDxe / EhciSched.h
1 /** @file
2
3 This file contains the definination for host controller schedule routines.
4
5 Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef _EFI_EHCI_SCHED_H_
11 #define _EFI_EHCI_SCHED_H_
12
13
14 /**
15 Initialize the schedule data structure such as frame list.
16
17 @param Ehc The EHCI device to init schedule data for.
18
19 @retval EFI_OUT_OF_RESOURCES Failed to allocate resource to init schedule data.
20 @retval EFI_SUCCESS The schedule data is initialized.
21
22 **/
23 EFI_STATUS
24 EhcInitSched (
25 IN USB2_HC_DEV *Ehc
26 );
27
28
29 /**
30 Free the schedule data. It may be partially initialized.
31
32 @param Ehc The EHCI device.
33
34 **/
35 VOID
36 EhcFreeSched (
37 IN USB2_HC_DEV *Ehc
38 );
39
40
41 /**
42 Link the queue head to the asynchronous schedule list.
43 UEFI only supports one CTRL/BULK transfer at a time
44 due to its interfaces. This simplifies the AsynList
45 management: A reclamation header is always linked to
46 the AsyncListAddr, the only active QH is appended to it.
47
48 @param Ehc The EHCI device.
49 @param Qh The queue head to link.
50
51 **/
52 VOID
53 EhcLinkQhToAsync (
54 IN USB2_HC_DEV *Ehc,
55 IN EHC_QH *Qh
56 );
57
58
59 /**
60 Unlink a queue head from the asynchronous schedule list.
61 Need to synchronize with hardware.
62
63 @param Ehc The EHCI device.
64 @param Qh The queue head to unlink.
65
66 **/
67 VOID
68 EhcUnlinkQhFromAsync (
69 IN USB2_HC_DEV *Ehc,
70 IN EHC_QH *Qh
71 );
72
73
74 /**
75 Link a queue head for interrupt transfer to the periodic
76 schedule frame list. This code is very much the same as
77 that in UHCI.
78
79 @param Ehc The EHCI device.
80 @param Qh The queue head to link.
81
82 **/
83 VOID
84 EhcLinkQhToPeriod (
85 IN USB2_HC_DEV *Ehc,
86 IN EHC_QH *Qh
87 );
88
89
90 /**
91 Unlink an interrupt queue head from the periodic
92 schedule frame list.
93
94 @param Ehc The EHCI device.
95 @param Qh The queue head to unlink.
96
97 **/
98 VOID
99 EhcUnlinkQhFromPeriod (
100 IN USB2_HC_DEV *Ehc,
101 IN EHC_QH *Qh
102 );
103
104
105
106 /**
107 Execute the transfer by polling the URB. This is a synchronous operation.
108
109 @param Ehc The EHCI device.
110 @param Urb The URB to execute.
111 @param TimeOut The time to wait before abort, in millisecond.
112
113 @retval EFI_DEVICE_ERROR The transfer failed due to transfer error.
114 @retval EFI_TIMEOUT The transfer failed due to time out.
115 @retval EFI_SUCCESS The transfer finished OK.
116
117 **/
118 EFI_STATUS
119 EhcExecTransfer (
120 IN USB2_HC_DEV *Ehc,
121 IN URB *Urb,
122 IN UINTN TimeOut
123 );
124
125
126 /**
127 Delete a single asynchronous interrupt transfer for
128 the device and endpoint.
129
130 @param Ehc The EHCI device.
131 @param DevAddr The address of the target device.
132 @param EpNum The endpoint of the target.
133 @param DataToggle Return the next data toggle to use.
134
135 @retval EFI_SUCCESS An asynchronous transfer is removed.
136 @retval EFI_NOT_FOUND No transfer for the device is found.
137
138 **/
139 EFI_STATUS
140 EhciDelAsyncIntTransfer (
141 IN USB2_HC_DEV *Ehc,
142 IN UINT8 DevAddr,
143 IN UINT8 EpNum,
144 OUT UINT8 *DataToggle
145 );
146
147
148 /**
149 Remove all the asynchronous interrutp transfers.
150
151 @param Ehc The EHCI device.
152
153 **/
154 VOID
155 EhciDelAllAsyncIntTransfers (
156 IN USB2_HC_DEV *Ehc
157 );
158
159 /**
160 Insert a single asynchronous interrupt transfer for
161 the device and endpoint.
162
163 @param Ehc The EHCI device.
164 @param DevAddr The device address.
165 @param EpAddr Endpoint addrress & its direction.
166 @param DevSpeed The device speed.
167 @param Toggle Initial data toggle to use.
168 @param MaxPacket The max packet length of the endpoint.
169 @param Hub The transaction translator to use.
170 @param DataLen The length of data buffer.
171 @param Callback The function to call when data is transferred.
172 @param Context The context to the callback.
173 @param Interval The interval for interrupt transfer.
174
175 @return Created URB or NULL.
176
177 **/
178 URB *
179 EhciInsertAsyncIntTransfer (
180 IN USB2_HC_DEV *Ehc,
181 IN UINT8 DevAddr,
182 IN UINT8 EpAddr,
183 IN UINT8 DevSpeed,
184 IN UINT8 Toggle,
185 IN UINTN MaxPacket,
186 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Hub,
187 IN UINTN DataLen,
188 IN EFI_ASYNC_USB_TRANSFER_CALLBACK Callback,
189 IN VOID *Context,
190 IN UINTN Interval
191 );
192
193 /**
194 Interrupt transfer periodic check handler.
195
196 @param Event Interrupt event.
197 @param Context Pointer to USB2_HC_DEV.
198
199 **/
200 VOID
201 EFIAPI
202 EhcMonitorAsyncRequests (
203 IN EFI_EVENT Event,
204 IN VOID *Context
205 );
206
207 #endif