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