]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Pci/EhciDxe/EhciSched.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / EhciDxe / EhciSched.h
CommitLineData
913cb9dc 1/** @file\r
2\r
78c2ffb5 3 This file contains the definination for host controller schedule routines.\r
4\r
4f792685 5Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
9d510e61 6SPDX-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 23EFI_STATUS\r
24EhcInitSched (\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
35VOID\r
36EhcFreeSched (\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
52VOID\r
53EhcLinkQhToAsync (\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
67VOID\r
68EhcUnlinkQhFromAsync (\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
83VOID\r
84EhcLinkQhToPeriod (\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
98VOID\r
99EhcUnlinkQhFromPeriod (\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
118EFI_STATUS\r
119EhcExecTransfer (\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
139EFI_STATUS\r
140EhciDelAsyncIntTransfer (\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
154VOID\r
155EhciDelAllAsyncIntTransfers (\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
178URB *\r
179EhciInsertAsyncIntTransfer (\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
200VOID\r
6d3ea23f 201EFIAPI\r
597f4ee2 202EhcMonitorAsyncRequests (\r
913cb9dc 203 IN EFI_EVENT Event,\r
204 IN VOID *Context\r
ed66e1bc 205 );\r
913cb9dc 206\r
207#endif\r