]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Pci/UhciDxe/UhciReg.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / UhciDxe / UhciReg.h
CommitLineData
913cb9dc 1/** @file\r
2\r
ab6495ea 3 The definition for UHCI register operation routines.\r
4\r
cd5ebaa0 5Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
9d510e61 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
913cb9dc 7\r
913cb9dc 8**/\r
9\r
10#ifndef _EFI_UHCI_REG_H_\r
11#define _EFI_UHCI_REG_H_\r
12\r
1ccdbf2a 13//\r
14// UHCI register offset\r
15//\r
16\r
1436aea4 17#define UHCI_FRAME_NUM 1024\r
1ccdbf2a 18\r
19//\r
20// Register offset and PCI related staff\r
21//\r
1436aea4 22#define USB_BAR_INDEX 4\r
1ccdbf2a 23\r
1436aea4
MK
24#define USBCMD_OFFSET 0\r
25#define USBSTS_OFFSET 2\r
26#define USBINTR_OFFSET 4\r
27#define USBPORTSC_OFFSET 0x10\r
28#define USB_FRAME_NO_OFFSET 6\r
29#define USB_FRAME_BASE_OFFSET 8\r
30#define USB_EMULATION_OFFSET 0xC0\r
1ccdbf2a 31\r
32//\r
33// Packet IDs\r
34//\r
1436aea4
MK
35#define SETUP_PACKET_ID 0x2D\r
36#define INPUT_PACKET_ID 0x69\r
37#define OUTPUT_PACKET_ID 0xE1\r
38#define ERROR_PACKET_ID 0x55\r
1ccdbf2a 39\r
40//\r
41// USB port status and control bit definition.\r
42//\r
1436aea4
MK
43#define USBPORTSC_CCS BIT0 // Current Connect Status\r
44#define USBPORTSC_CSC BIT1 // Connect Status Change\r
45#define USBPORTSC_PED BIT2 // Port Enable / Disable\r
46#define USBPORTSC_PEDC BIT3 // Port Enable / Disable Change\r
47#define USBPORTSC_LSL BIT4 // Line Status Low BIT\r
48#define USBPORTSC_LSH BIT5 // Line Status High BIT\r
49#define USBPORTSC_RD BIT6 // Resume Detect\r
50#define USBPORTSC_LSDA BIT8 // Low Speed Device Attached\r
51#define USBPORTSC_PR BIT9 // Port Reset\r
52#define USBPORTSC_SUSP BIT12 // Suspend\r
1ccdbf2a 53\r
54//\r
55// UHCI Spec said it must implement 2 ports each host at least,\r
56// and if more, check whether the bit7 of PORTSC is always 1.\r
57// So here assume the max of port number each host is 16.\r
58//\r
59#define USB_MAX_ROOTHUB_PORT 0x0F\r
60\r
61//\r
62// Command register bit definitions\r
63//\r
1436aea4
MK
64#define USBCMD_RS BIT0 // Run/Stop\r
65#define USBCMD_HCRESET BIT1 // Host reset\r
66#define USBCMD_GRESET BIT2 // Global reset\r
67#define USBCMD_EGSM BIT3 // Global Suspend Mode\r
68#define USBCMD_FGR BIT4 // Force Global Resume\r
69#define USBCMD_SWDBG BIT5 // SW Debug mode\r
70#define USBCMD_CF BIT6 // Config Flag (sw only)\r
71#define USBCMD_MAXP BIT7 // Max Packet (0 = 32, 1 = 64)\r
1ccdbf2a 72\r
73//\r
74// USB Status register bit definitions\r
75//\r
1436aea4
MK
76#define USBSTS_USBINT BIT0 // Interrupt due to IOC\r
77#define USBSTS_ERROR BIT1 // Interrupt due to error\r
78#define USBSTS_RD BIT2 // Resume Detect\r
79#define USBSTS_HSE BIT3 // Host System Error\r
80#define USBSTS_HCPE BIT4 // Host Controller Process Error\r
81#define USBSTS_HCH BIT5 // HC Halted\r
82\r
83#define USBTD_ACTIVE BIT7 // TD is still active\r
84#define USBTD_STALLED BIT6 // TD is stalled\r
85#define USBTD_BUFFERR BIT5 // Buffer underflow or overflow\r
86#define USBTD_BABBLE BIT4 // Babble condition\r
87#define USBTD_NAK BIT3 // NAK is received\r
88#define USBTD_CRC BIT2 // CRC/Time out error\r
89#define USBTD_BITSTUFF BIT1 // Bit stuff error\r
913cb9dc 90\r
91/**\r
ab6495ea 92 Read a UHCI register.\r
913cb9dc 93\r
ab6495ea 94 @param PciIo The EFI_PCI_IO_PROTOCOL to use.\r
95 @param Offset Register offset to USB_BAR_INDEX.\r
913cb9dc 96\r
ab6495ea 97 @return Content of register.\r
913cb9dc 98\r
99**/\r
100UINT16\r
101UhciReadReg (\r
1436aea4
MK
102 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
103 IN UINT32 Offset\r
ed66e1bc 104 );\r
913cb9dc 105\r
913cb9dc 106/**\r
ab6495ea 107 Write data to UHCI register.\r
913cb9dc 108\r
ab6495ea 109 @param PciIo The EFI_PCI_IO_PROTOCOL to use.\r
110 @param Offset Register offset to USB_BAR_INDEX.\r
111 @param Data Data to write.\r
913cb9dc 112\r
ab6495ea 113 @return None.\r
913cb9dc 114\r
115**/\r
116VOID\r
117UhciWriteReg (\r
1436aea4
MK
118 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
119 IN UINT32 Offset,\r
120 IN UINT16 Data\r
ed66e1bc 121 );\r
913cb9dc 122\r
913cb9dc 123/**\r
ab6495ea 124 Set a bit of the UHCI Register.\r
913cb9dc 125\r
ab6495ea 126 @param PciIo The EFI_PCI_IO_PROTOCOL to use.\r
127 @param Offset Register offset to USB_BAR_INDEX.\r
128 @param Bit The bit to set.\r
913cb9dc 129\r
ab6495ea 130 @return None.\r
913cb9dc 131\r
132**/\r
133VOID\r
134UhciSetRegBit (\r
1436aea4
MK
135 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
136 IN UINT32 Offset,\r
137 IN UINT16 Bit\r
ed66e1bc 138 );\r
913cb9dc 139\r
913cb9dc 140/**\r
ab6495ea 141 Clear a bit of the UHCI Register.\r
913cb9dc 142\r
ab6495ea 143 @param PciIo The PCI_IO protocol to access the PCI.\r
144 @param Offset Register offset to USB_BAR_INDEX.\r
145 @param Bit The bit to clear.\r
913cb9dc 146\r
ab6495ea 147 @return None.\r
913cb9dc 148\r
149**/\r
150VOID\r
151UhciClearRegBit (\r
1436aea4
MK
152 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
153 IN UINT32 Offset,\r
154 IN UINT16 Bit\r
ed66e1bc 155 );\r
913cb9dc 156\r
913cb9dc 157/**\r
158 Clear all the interrutp status bits, these bits\r
ab6495ea 159 are Write-Clean.\r
913cb9dc 160\r
ab6495ea 161 @param Uhc The UHCI device.\r
913cb9dc 162\r
ab6495ea 163 @return None.\r
913cb9dc 164\r
165**/\r
166VOID\r
167UhciAckAllInterrupt (\r
1436aea4 168 IN USB_HC_DEV *Uhc\r
ed66e1bc 169 );\r
913cb9dc 170\r
913cb9dc 171/**\r
ab6495ea 172 Stop the host controller.\r
913cb9dc 173\r
ab6495ea 174 @param Uhc The UHCI device.\r
175 @param Timeout Max time allowed.\r
913cb9dc 176\r
ab6495ea 177 @retval EFI_SUCCESS The host controller is stopped.\r
178 @retval EFI_TIMEOUT Failed to stop the host controller.\r
913cb9dc 179\r
180**/\r
181EFI_STATUS\r
182UhciStopHc (\r
1436aea4
MK
183 IN USB_HC_DEV *Uhc,\r
184 IN UINTN Timeout\r
ed66e1bc 185 );\r
913cb9dc 186\r
913cb9dc 187/**\r
ab6495ea 188 Check whether the host controller operates well.\r
913cb9dc 189\r
ab6495ea 190 @param PciIo The PCI_IO protocol to use.\r
913cb9dc 191\r
ab6495ea 192 @retval TRUE Host controller is working.\r
193 @retval FALSE Host controller is halted or system error.\r
913cb9dc 194\r
195**/\r
196BOOLEAN\r
197UhciIsHcWorking (\r
1436aea4 198 IN EFI_PCI_IO_PROTOCOL *PciIo\r
ed66e1bc 199 );\r
913cb9dc 200\r
913cb9dc 201/**\r
202 Set the UHCI frame list base address. It can't use\r
203 UhciWriteReg which access memory in UINT16.\r
204\r
ab6495ea 205 @param PciIo The EFI_PCI_IO_PROTOCOL to use.\r
206 @param Addr Address to set.\r
913cb9dc 207\r
ab6495ea 208 @return None.\r
913cb9dc 209\r
210**/\r
211VOID\r
212UhciSetFrameListBaseAddr (\r
1436aea4
MK
213 IN EFI_PCI_IO_PROTOCOL *PciIo,\r
214 IN VOID *Addr\r
ed66e1bc 215 );\r
913cb9dc 216\r
913cb9dc 217/**\r
ab6495ea 218 Disable USB Emulation.\r
913cb9dc 219\r
ab6495ea 220 @param PciIo The EFI_PCI_IO_PROTOCOL protocol to use.\r
913cb9dc 221\r
ab6495ea 222 @return None.\r
913cb9dc 223\r
224**/\r
225VOID\r
226UhciTurnOffUsbEmulation (\r
1436aea4 227 IN EFI_PCI_IO_PROTOCOL *PciIo\r
ed66e1bc 228 );\r
1436aea4 229\r
913cb9dc 230#endif\r