]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Pci/UhciDxe/UhciQueue.h
Update some module INF files in MdeModulePkg to "UEFI_DRIVER"
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / UhciDxe / UhciQueue.h
CommitLineData
913cb9dc 1/** @file\r
2\r
ab6495ea 3 The definition for UHCI register operation routines.\r
4\r
913cb9dc 5Copyright (c) 2007, Intel Corporation\r
6All rights reserved. This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
913cb9dc 14**/\r
15\r
16#ifndef _EFI_UHCI_QUEUE_H_\r
17#define _EFI_UHCI_QUEUE_H_\r
18\r
19//\r
20// Macroes used to set various links in UHCI's driver.\r
21// In this UHCI driver, QH's horizontal link always pointers to other QH,\r
22// and its vertical link always pointers to TD. TD's next pointer always\r
23// pointers to other sibling TD. Frame link always pointers to QH because\r
24// ISO transfer isn't supported.\r
25//\r
26// We should use UINT32 to access these pointers to void race conditions\r
27// with hardware.\r
28//\r
29#define QH_HLINK(Pointer, Terminate) \\r
30 (((UINT32) ((UINTN) (Pointer)) & 0xFFFFFFF0) | 0x02 | ((Terminate) ? 0x01 : 0))\r
31\r
32#define QH_VLINK(Pointer, Terminate) \\r
33 (((UINT32) ((UINTN) (Pointer)) & 0xFFFFFFF0) | ((Terminate) ? 0x01 : 0))\r
34\r
35#define TD_LINK(Pointer, VertFirst, Terminate) \\r
36 (((UINT32) ((UINTN) (Pointer)) & 0xFFFFFFF0) | \\r
37 ((VertFirst) ? 0x04 : 0) | ((Terminate) ? 0x01 : 0))\r
38\r
39#define LINK_TERMINATED(Link) (((Link) & 0x01) != 0)\r
40\r
41#define UHCI_ADDR(QhOrTd) ((VOID *) (UINTN) ((QhOrTd) & 0xFFFFFFF0))\r
42\r
43#pragma pack(1)\r
44//\r
45// Both links in QH has this internal structure:\r
46// Next pointer: 28, Reserved: 2, NextIsQh: 1, Terminate: 1\r
47// This is the same as frame list entry.\r
48//\r
49typedef struct {\r
50 UINT32 HorizonLink;\r
51 UINT32 VerticalLink;\r
52} UHCI_QH_HW;\r
53\r
54//\r
55// Next link in TD has this internal structure:\r
56// Next pointer: 28, Reserved: 1, Vertical First: 1, NextIsQh: 1, Terminate: 1\r
57//\r
58typedef struct {\r
59 UINT32 NextLink;\r
60 UINT32 ActualLen : 11;\r
61 UINT32 Reserved1 : 5;\r
62 UINT32 Status : 8;\r
63 UINT32 IntOnCpl : 1;\r
64 UINT32 IsIsoch : 1;\r
65 UINT32 LowSpeed : 1;\r
66 UINT32 ErrorCount : 2;\r
67 UINT32 ShortPacket : 1;\r
68 UINT32 Reserved2 : 2;\r
69 UINT32 PidCode : 8;\r
70 UINT32 DeviceAddr : 7;\r
71 UINT32 EndPoint : 4;\r
72 UINT32 DataToggle : 1;\r
73 UINT32 Reserved3 : 1;\r
74 UINT32 MaxPacketLen: 11;\r
75 UINT32 DataBuffer;\r
76} UHCI_TD_HW;\r
77#pragma pack()\r
78\r
79typedef struct _UHCI_TD_SW UHCI_TD_SW;\r
80typedef struct _UHCI_QH_SW UHCI_QH_SW;\r
81\r
c52fa98c 82struct _UHCI_QH_SW {\r
913cb9dc 83 UHCI_QH_HW QhHw;\r
84 UHCI_QH_SW *NextQh;\r
85 UHCI_TD_SW *TDs;\r
86 UINTN Interval;\r
c52fa98c 87};\r
913cb9dc 88\r
c52fa98c 89struct _UHCI_TD_SW {\r
913cb9dc 90 UHCI_TD_HW TdHw;\r
91 UHCI_TD_SW *NextTd;\r
92 UINT8 *Data;\r
93 UINT16 DataLen;\r
c52fa98c 94};\r
913cb9dc 95\r
96\r
97/**\r
ab6495ea 98 Link the TD To QH.\r
913cb9dc 99\r
ab6495ea 100 @param Qh The queue head for the TD to link to.\r
101 @param Td The TD to link.\r
913cb9dc 102\r
ab6495ea 103 @return None.\r
913cb9dc 104\r
105**/\r
106VOID\r
107UhciLinkTdToQh (\r
108 IN UHCI_QH_SW *Qh,\r
109 IN UHCI_TD_SW *Td\r
110 )\r
111;\r
112\r
113\r
114/**\r
ab6495ea 115 Unlink TD from the QH.\r
913cb9dc 116\r
ab6495ea 117 @param Qh The queue head to unlink from.\r
118 @param Td The TD to unlink.\r
913cb9dc 119\r
ab6495ea 120 @return None.\r
913cb9dc 121\r
122**/\r
123VOID\r
124UhciUnlinkTdFromQh (\r
125 IN UHCI_QH_SW *Qh,\r
126 IN UHCI_TD_SW *Td\r
127 )\r
128;\r
129\r
130\r
131/**\r
ab6495ea 132 Map address of request structure buffer.\r
913cb9dc 133\r
ab6495ea 134 @param Uhc The UHCI device.\r
135 @param Request The user request buffer.\r
136 @param MappedAddr Mapped address of request.\r
137 @param Map Identificaion of this mapping to return.\r
913cb9dc 138\r
ab6495ea 139 @return EFI_SUCCESS Success.\r
140 @return EFI_DEVICE_ERROR Fail to map the user request.\r
913cb9dc 141\r
142**/\r
143EFI_STATUS\r
144UhciMapUserRequest (\r
145 IN USB_HC_DEV *Uhc,\r
146 IN OUT VOID *Request,\r
147 OUT UINT8 **MappedAddr,\r
148 OUT VOID **Map\r
149 )\r
150;\r
151\r
152\r
153/**\r
ab6495ea 154 Map address of user data buffer.\r
913cb9dc 155\r
ab6495ea 156 @param Uhc The UHCI device.\r
157 @param Direction Direction of the data transfer.\r
158 @param Data The user data buffer.\r
159 @param Len Length of the user data.\r
160 @param PktId Packet identificaion.\r
161 @param MappedAddr Mapped address to return.\r
162 @param Map Identificaion of this mapping to return.\r
913cb9dc 163\r
ab6495ea 164 @return EFI_SUCCESS Success.\r
165 @return EFI_DEVICE_ERROR Fail to map the user data.\r
913cb9dc 166\r
167**/\r
168EFI_STATUS\r
169UhciMapUserData (\r
170 IN USB_HC_DEV *Uhc,\r
171 IN EFI_USB_DATA_DIRECTION Direction,\r
172 IN VOID *Data,\r
173 IN OUT UINTN *Len,\r
174 OUT UINT8 *PktId,\r
175 OUT UINT8 **MappedAddr,\r
176 OUT VOID **Map\r
177 )\r
178;\r
179\r
180\r
181/**\r
ab6495ea 182 Delete a list of TDs.\r
913cb9dc 183\r
ab6495ea 184 @param Uhc The UHCI device.\r
185 @param FirstTd TD link list head.\r
913cb9dc 186\r
ab6495ea 187 @return None.\r
913cb9dc 188\r
189**/\r
190VOID\r
191UhciDestoryTds (\r
192 IN USB_HC_DEV *Uhc,\r
193 IN UHCI_TD_SW *FirstTd\r
194 )\r
195;\r
196\r
197\r
198/**\r
ab6495ea 199 Create an initialize a new queue head.\r
913cb9dc 200\r
ab6495ea 201 @param Uhc The UHCI device.\r
202 @param Interval The polling interval for the queue.\r
913cb9dc 203\r
ab6495ea 204 @return The newly created queue header.\r
913cb9dc 205\r
206**/\r
207UHCI_QH_SW *\r
208UhciCreateQh (\r
209 IN USB_HC_DEV *Uhc,\r
210 IN UINTN Interval\r
211 )\r
212;\r
213\r
214\r
215/**\r
ab6495ea 216 Create Tds list for Control Transfer.\r
913cb9dc 217\r
ab6495ea 218 @param Uhc The UHCI device.\r
219 @param DeviceAddr The device address.\r
220 @param DataPktId Packet Identification of Data Tds.\r
221 @param Request A pointer to request structure buffer to transfer.\r
222 @param Data A pointer to user data buffer to transfer.\r
223 @param DataLen Length of user data to transfer.\r
224 @param MaxPacket Maximum packet size for control transfer.\r
225 @param IsLow Full speed or low speed.\r
913cb9dc 226\r
ab6495ea 227 @return The Td list head for the control transfer.\r
913cb9dc 228\r
229**/\r
230UHCI_TD_SW *\r
231UhciCreateCtrlTds (\r
232 IN USB_HC_DEV *Uhc,\r
233 IN UINT8 DeviceAddr,\r
234 IN UINT8 DataPktId,\r
235 IN UINT8 *Request,\r
236 IN UINT8 *Data,\r
237 IN UINTN DataLen,\r
238 IN UINT8 MaxPacket,\r
239 IN BOOLEAN IsLow\r
240 )\r
241;\r
242\r
243\r
244/**\r
ab6495ea 245 Create Tds list for Bulk/Interrupt Transfer.\r
246\r
247 @param Uhc USB_HC_DEV.\r
248 @param DevAddr Address of Device.\r
249 @param EndPoint Endpoint Number.\r
250 @param PktId Packet Identification of Data Tds.\r
251 @param Data A pointer to user data buffer to transfer.\r
252 @param DataLen Length of user data to transfer.\r
253 @param DataToggle Data Toggle Pointer.\r
254 @param MaxPacket Maximum packet size for Bulk/Interrupt transfer.\r
255 @param IsLow Is Low Speed Device.\r
256\r
257 @return The Tds list head for the bulk transfer.\r
913cb9dc 258\r
259**/\r
260UHCI_TD_SW *\r
261UhciCreateBulkOrIntTds (\r
262 IN USB_HC_DEV *Uhc,\r
263 IN UINT8 DevAddr,\r
264 IN UINT8 EndPoint,\r
265 IN UINT8 PktId,\r
266 IN UINT8 *Data,\r
267 IN UINTN DataLen,\r
268 IN OUT UINT8 *DataToggle,\r
269 IN UINT8 MaxPacket,\r
270 IN BOOLEAN IsLow\r
271 )\r
272;\r
273\r
274#endif\r