]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Pci/EhciDxe/EhciReg.h
1) Fix a typo in EhcMoniteAsyncRequests.
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / EhciDxe / EhciReg.h
CommitLineData
913cb9dc 1/** @file\r
2\r
78c2ffb5 3 This file contains the definination for host controller register operation routines.\r
4\r
597f4ee2 5Copyright (c) 2007 - 2009, Intel Corporation\r
913cb9dc 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_EHCI_REG_H_\r
17#define _EFI_EHCI_REG_H_\r
18\r
19\r
78c2ffb5 20typedef enum {\r
913cb9dc 21 //\r
22 // Capability register offset\r
23 //\r
24 EHC_CAPLENGTH_OFFSET = 0, // Capability register length offset\r
25 EHC_HCSPARAMS_OFFSET = 0x04, // Structural Parameters 04-07h\r
26 EHC_HCCPARAMS_OFFSET = 0x08, // Capability parameters offset\r
27\r
28 //\r
29 // Capability register bit definition\r
30 //\r
31 HCSP_NPORTS = 0x0F, // Number of root hub port\r
32 HCCP_64BIT = 0x01, // 64-bit addressing capability\r
33\r
34 //\r
35 // Operational register offset\r
36 //\r
37 EHC_USBCMD_OFFSET = 0x0, // USB command register offset\r
38 EHC_USBSTS_OFFSET = 0x04, // Statue register offset\r
39 EHC_USBINTR_OFFSET = 0x08, // USB interrutp offset\r
40 EHC_FRINDEX_OFFSET = 0x0C, // Frame index offset\r
41 EHC_CTRLDSSEG_OFFSET = 0x10, // Control data structure segment offset\r
42 EHC_FRAME_BASE_OFFSET = 0x14, // Frame list base address offset\r
43 EHC_ASYNC_HEAD_OFFSET = 0x18, // Next asynchronous list address offset\r
44 EHC_CONFIG_FLAG_OFFSET = 0x40, // Configure flag register offset\r
45 EHC_PORT_STAT_OFFSET = 0x44, // Port status/control offset\r
46\r
47 EHC_FRAME_LEN = 1024,\r
48\r
49 //\r
50 // Register bit definition\r
51 //\r
52 CONFIGFLAG_ROUTE_EHC = 0x01, // Route port to EHC\r
53\r
54 USBCMD_RUN = 0x01, // Run/stop\r
55 USBCMD_RESET = 0x02, // Start the host controller reset\r
56 USBCMD_ENABLE_PERIOD = 0x10, // Enable periodic schedule\r
57 USBCMD_ENABLE_ASYNC = 0x20, // Enable asynchronous schedule\r
58 USBCMD_IAAD = 0x40, // Interrupt on async advance doorbell\r
59\r
60 USBSTS_IAA = 0x20, // Interrupt on async advance\r
61 USBSTS_PERIOD_ENABLED = 0x4000, // Periodic schedule status\r
62 USBSTS_ASYNC_ENABLED = 0x8000, // Asynchronous schedule status\r
63 USBSTS_HALT = 0x1000, // Host controller halted\r
64 USBSTS_SYS_ERROR = 0x10, // Host system error\r
65 USBSTS_INTACK_MASK = 0x003F, // Mask for the interrupt ACK, the WC\r
66 // (write clean) bits in USBSTS register\r
67\r
68 PORTSC_CONN = 0x01, // Current Connect Status\r
69 PORTSC_CONN_CHANGE = 0x02, // Connect Status Change\r
70 PORTSC_ENABLED = 0x04, // Port Enable / Disable\r
71 PORTSC_ENABLE_CHANGE = 0x08, // Port Enable / Disable Change\r
72 PORTSC_OVERCUR = 0x10, // Over current Active\r
73 PORTSC_OVERCUR_CHANGE = 0x20, // Over current Change\r
74 PORSTSC_RESUME = 0x40, // Force Port Resume\r
75 PORTSC_SUSPEND = 0x80, // Port Suspend State\r
76 PORTSC_RESET = 0x100, // Port Reset\r
77 PORTSC_LINESTATE_K = 0x400, // Line Status K-state\r
78 PORTSC_LINESTATE_J = 0x800, // Line Status J-state\r
79 PORTSC_POWER = 0x1000, // Port Power\r
80 PORTSC_OWNER = 0x2000, // Port Owner\r
81 PORTSC_CHANGE_MASK = 0x2A, // Mask of the port change bits,\r
82 // they are WC (write clean)\r
83 //\r
84 // PCI Configuration Registers\r
85 //\r
86 EHC_PCI_CLASSC = 0x09,\r
87 EHC_PCI_CLASSC_PI = 0x20,\r
c52fa98c 88 EHC_BAR_INDEX = 0 /* how many bytes away from USB_BASE to 0x10 */\r
78c2ffb5 89}EHCI_REGISTER_OFFSET;\r
913cb9dc 90\r
91#define EHC_LINK_TERMINATED(Link) (((Link) & 0x01) != 0)\r
92\r
93#define EHC_ADDR(High, QhHw32) \\r
94 ((VOID *) (UINTN) (LShiftU64 ((High), 32) | ((QhHw32) & 0xFFFFFFF0)))\r
95\r
96#define EHCI_IS_DATAIN(EndpointAddr) EHC_BIT_IS_SET((EndpointAddr), 0x80)\r
97\r
98//\r
99// Structure to map the hardware port states to the\r
100// UEFI's port states.\r
101//\r
102typedef struct {\r
103 UINT16 HwState;\r
104 UINT16 UefiState;\r
105} USB_PORT_STATE_MAP;\r
106\r
107//\r
108// Ehci Data and Ctrl Structures\r
109//\r
110#pragma pack(1)\r
111typedef struct {\r
112 UINT8 PI;\r
113 UINT8 SubClassCode;\r
114 UINT8 BaseCode;\r
115} USB_CLASSC;\r
116#pragma pack()\r
117\r
78c2ffb5 118/**\r
119 Read EHCI capability register.\r
120\r
121 @param Ehc The EHCI device.\r
122 @param Offset Capability register address.\r
123\r
124 @return The register content.\r
913cb9dc 125\r
78c2ffb5 126**/\r
913cb9dc 127UINT32\r
128EhcReadCapRegister (\r
129 IN USB2_HC_DEV *Ehc,\r
130 IN UINT32 Offset\r
ed66e1bc 131 );\r
913cb9dc 132\r
133\r
134/**\r
78c2ffb5 135 Read EHCI Operation register.\r
913cb9dc 136\r
78c2ffb5 137 @param Ehc The EHCI device.\r
138 @param Offset The operation register offset.\r
913cb9dc 139\r
78c2ffb5 140 @return The register content.\r
913cb9dc 141\r
142**/\r
143UINT32\r
144EhcReadOpReg (\r
145 IN USB2_HC_DEV *Ehc,\r
146 IN UINT32 Offset\r
ed66e1bc 147 );\r
913cb9dc 148\r
149\r
150/**\r
78c2ffb5 151 Write the data to the EHCI operation register.\r
913cb9dc 152\r
78c2ffb5 153 @param Ehc The EHCI device.\r
154 @param Offset EHCI operation register offset.\r
155 @param Data The data to write.\r
913cb9dc 156\r
913cb9dc 157**/\r
158VOID\r
159EhcWriteOpReg (\r
160 IN USB2_HC_DEV *Ehc,\r
161 IN UINT32 Offset,\r
162 IN UINT32 Data\r
ed66e1bc 163 );\r
913cb9dc 164\r
165\r
166/**\r
167 Add support for UEFI Over Legacy (UoL) feature, stop\r
78c2ffb5 168 the legacy USB SMI support.\r
913cb9dc 169\r
170 @param Ehc The EHCI device.\r
171\r
913cb9dc 172**/\r
173VOID\r
174EhcClearLegacySupport (\r
175 IN USB2_HC_DEV *Ehc\r
ed66e1bc 176 );\r
913cb9dc 177\r
178\r
179\r
180/**\r
181 Set door bell and wait it to be ACKed by host controller.\r
182 This function is used to synchronize with the hardware.\r
183\r
78c2ffb5 184 @param Ehc The EHCI device.\r
185 @param Timeout The time to wait before abort (in millisecond, ms).\r
913cb9dc 186\r
78c2ffb5 187 @retval EFI_SUCCESS Synchronized with the hardware.\r
188 @retval EFI_TIMEOUT Time out happened while waiting door bell to set.\r
913cb9dc 189\r
190**/\r
191EFI_STATUS\r
192EhcSetAndWaitDoorBell (\r
193 IN USB2_HC_DEV *Ehc,\r
194 IN UINT32 Timeout\r
ed66e1bc 195 );\r
913cb9dc 196\r
197\r
198/**\r
78c2ffb5 199 Clear all the interrutp status bits, these bits are Write-Clean.\r
913cb9dc 200\r
78c2ffb5 201 @param Ehc The EHCI device.\r
913cb9dc 202\r
913cb9dc 203**/\r
204VOID\r
205EhcAckAllInterrupt (\r
206 IN USB2_HC_DEV *Ehc\r
ed66e1bc 207 );\r
913cb9dc 208\r
209\r
210\r
211/**\r
78c2ffb5 212 Whether Ehc is halted.\r
913cb9dc 213\r
78c2ffb5 214 @param Ehc The EHCI device.\r
913cb9dc 215\r
78c2ffb5 216 @retval TRUE The controller is halted.\r
217 @retval FALSE It isn't halted.\r
913cb9dc 218\r
219**/\r
220BOOLEAN\r
221EhcIsHalt (\r
222 IN USB2_HC_DEV *Ehc\r
ed66e1bc 223 );\r
913cb9dc 224\r
225\r
226/**\r
78c2ffb5 227 Whether system error occurred.\r
913cb9dc 228\r
78c2ffb5 229 @param Ehc The EHCI device.\r
913cb9dc 230\r
78c2ffb5 231 @retval TRUE System error happened.\r
232 @retval FALSE No system error.\r
913cb9dc 233\r
234**/\r
235BOOLEAN\r
236EhcIsSysError (\r
237 IN USB2_HC_DEV *Ehc\r
ed66e1bc 238 );\r
913cb9dc 239\r
240\r
913cb9dc 241/**\r
78c2ffb5 242 Reset the host controller.\r
913cb9dc 243\r
78c2ffb5 244 @param Ehc The EHCI device.\r
245 @param Timeout Time to wait before abort (in millisecond, ms).\r
913cb9dc 246\r
78c2ffb5 247 @retval EFI_SUCCESS The host controller is reset.\r
248 @return Others Failed to reset the host.\r
913cb9dc 249\r
250**/\r
251EFI_STATUS\r
252EhcResetHC (\r
253 IN USB2_HC_DEV *Ehc,\r
254 IN UINT32 Timeout\r
ed66e1bc 255 );\r
913cb9dc 256\r
257\r
913cb9dc 258/**\r
78c2ffb5 259 Halt the host controller.\r
913cb9dc 260\r
78c2ffb5 261 @param Ehc The EHCI device.\r
262 @param Timeout Time to wait before abort.\r
913cb9dc 263\r
78c2ffb5 264 @return EFI_SUCCESS The EHCI is halt.\r
265 @return EFI_TIMEOUT Failed to halt the controller before Timeout.\r
913cb9dc 266\r
267**/\r
268EFI_STATUS\r
269EhcHaltHC (\r
270 IN USB2_HC_DEV *Ehc,\r
271 IN UINT32 Timeout\r
ed66e1bc 272 );\r
913cb9dc 273\r
274\r
913cb9dc 275/**\r
78c2ffb5 276 Set the EHCI to run.\r
913cb9dc 277\r
78c2ffb5 278 @param Ehc The EHCI device.\r
279 @param Timeout Time to wait before abort.\r
913cb9dc 280\r
78c2ffb5 281 @return EFI_SUCCESS The EHCI is running.\r
282 @return Others Failed to set the EHCI to run.\r
913cb9dc 283\r
284**/\r
285EFI_STATUS\r
286EhcRunHC (\r
287 IN USB2_HC_DEV *Ehc,\r
288 IN UINT32 Timeout\r
ed66e1bc 289 );\r
913cb9dc 290\r
291\r
292\r
293/**\r
294 Initialize the HC hardware.\r
78c2ffb5 295 EHCI spec lists the five things to do to initialize the hardware:\r
913cb9dc 296 1. Program CTRLDSSEGMENT\r
297 2. Set USBINTR to enable interrupts\r
298 3. Set periodic list base\r
299 4. Set USBCMD, interrupt threshold, frame list size etc\r
300 5. Write 1 to CONFIGFLAG to route all ports to EHCI\r
301\r
78c2ffb5 302 @param Ehc The EHCI device.\r
913cb9dc 303\r
78c2ffb5 304 @return EFI_SUCCESS The EHCI has come out of halt state.\r
305 @return EFI_TIMEOUT Time out happened.\r
913cb9dc 306\r
307**/\r
308EFI_STATUS\r
309EhcInitHC (\r
310 IN USB2_HC_DEV *Ehc\r
ed66e1bc 311 );\r
913cb9dc 312\r
313#endif\r