#include "Ehci.h"\r
\r
\r
+VOID\r
+HostReset (\r
+ IN USB2_HC_DEV *HcDev\r
+ )\r
+{\r
+ UINT32 Value;\r
+ UINT32 TimeOut;\r
+ \r
+ ReadEhcOperationalReg (\r
+ HcDev,\r
+ USBCMD,\r
+ &Value\r
+ );\r
+\r
+ Value = Value & (~USBCMD_RS);\r
+ WriteEhcOperationalReg (\r
+ HcDev,\r
+ USBCMD,\r
+ Value\r
+ );\r
+\r
+ TimeOut = 40;\r
+ while (TimeOut --) {\r
+ gBS->Stall (500);\r
+ ReadEhcOperationalReg (\r
+ HcDev,\r
+ USBSTS,\r
+ &Value\r
+ );\r
+ if ((Value & USBSTS_HCH) != 0) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (TimeOut == 0) {\r
+ DEBUG((gEHCErrorLevel, "TimeOut for clearing Run/Stop bit\n"));\r
+ }\r
+\r
+ ReadEhcOperationalReg (\r
+ HcDev,\r
+ USBCMD,\r
+ &Value\r
+ );\r
+ Value = Value | USBCMD_HCRESET;\r
+ WriteEhcOperationalReg (\r
+ HcDev,\r
+ USBCMD,\r
+ Value\r
+ );\r
+\r
+ TimeOut = 40;\r
+ while (TimeOut --) {\r
+ gBS->Stall (500);\r
+ ReadEhcOperationalReg (\r
+ HcDev,\r
+ USBCMD,\r
+ &Value\r
+ );\r
+ if ((Value & USBCMD_HCRESET) == 0) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (TimeOut == 0) {\r
+ DEBUG((gEHCErrorLevel, "TimeOut for Host Reset\n"));\r
+ }\r
+\r
+}\r
+\r
EFI_STATUS\r
ReadEhcCapabiltiyReg (\r
IN USB2_HC_DEV *HcDev,\r
\r
--*/\r
{\r
- ASSERT (mUsbCapabilityLen);\r
+ ASSERT (HcDev->UsbCapabilityLen);\r
return HcDev->PciIo->Mem.Read (\r
HcDev->PciIo,\r
EfiPciIoWidthUint32,\r
USB_BAR_INDEX,\r
- (UINT64) (OperationalRegAddr + mUsbCapabilityLen),\r
+ (UINT64) (OperationalRegAddr + HcDev->UsbCapabilityLen),\r
1,\r
Data\r
);\r
\r
--*/\r
{\r
- ASSERT (mUsbCapabilityLen);\r
+ ASSERT (HcDev->UsbCapabilityLen);\r
return HcDev->PciIo->Mem.Write (\r
HcDev->PciIo,\r
EfiPciIoWidthUint32,\r
USB_BAR_INDEX,\r
- (UINT64) (OperationalRegAddr + mUsbCapabilityLen),\r
+ (UINT64) (OperationalRegAddr + HcDev->UsbCapabilityLen),\r
1,\r
&Data\r
);\r
}\r
\r
+VOID\r
+ClearLegacySupport (\r
+ IN USB2_HC_DEV *HcDev\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ Stop the legacy USB SMI\r
+\r
+Arguments:\r
+\r
+ HcDev - USB2_HC_DEV\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS Success\r
+ EFI_DEVICE_ERROR Fail\r
+\r
+--*/\r
+{\r
+ UINT32 EECP;\r
+ UINT32 Value;\r
+ UINT32 TimeOut;\r
+\r
+ ReadEhcCapabiltiyReg (\r
+ HcDev,\r
+ HCCPARAMS,\r
+ &EECP\r
+ );\r
+\r
+ EECP = (EECP >> 8) & 0xFF;\r
+\r
+ DEBUG ((gEHCDebugLevel, "EHCI: EECPBase = 0x%x\n", EECP));\r
+\r
+\r
+ HcDev->PciIo->Pci.Read (\r
+ HcDev->PciIo,\r
+ EfiPciIoWidthUint32,\r
+ EECP,\r
+ 1,\r
+ &Value \r
+ );\r
+\r
+ DEBUG((gEHCDebugLevel, "EECP[0] = 0x%x\n", Value));\r
+\r
+ HcDev->PciIo->Pci.Read (\r
+ HcDev->PciIo,\r
+ EfiPciIoWidthUint32,\r
+ EECP + 0x4,\r
+ 1,\r
+ &Value \r
+ );\r
+\r
+ DEBUG((gEHCDebugLevel, "EECP[4] = 0x%x\n", Value));\r
+\r
+ HcDev->PciIo->Pci.Read (\r
+ HcDev->PciIo,\r
+ EfiPciIoWidthUint32,\r
+ EECP,\r
+ 1,\r
+ &Value \r
+ );\r
+\r
+ Value = Value | (0x1 << 24);\r
+ DEBUG((gEHCErrorLevel, "Value Written = 0x%x\n", Value));\r
+\r
+ HcDev->PciIo->Pci.Write (\r
+ HcDev->PciIo,\r
+ EfiPciIoWidthUint32,\r
+ EECP,\r
+ 1,\r
+ &Value \r
+ );\r
+\r
+ TimeOut = 40;\r
+ while (TimeOut --) {\r
+ gBS->Stall (500);\r
+\r
+ HcDev->PciIo->Pci.Read (\r
+ HcDev->PciIo,\r
+ EfiPciIoWidthUint32,\r
+ EECP,\r
+ 1,\r
+ &Value \r
+ );\r
+ if ((Value & 0x01010000) == 0x01000000) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (TimeOut == 0) {\r
+ DEBUG((gEHCErrorLevel, "Timeout for getting HC OS Owned Semaphore\n" ));\r
+ } \r
+ \r
+ DEBUG((gEHCErrorLevel, "After Release Value\n" ));\r
+\r
+ HcDev->PciIo->Pci.Read (\r
+ HcDev->PciIo,\r
+ EfiPciIoWidthUint32,\r
+ EECP,\r
+ 1,\r
+ &Value \r
+ );\r
+\r
+ DEBUG((gEHCDebugLevel, "EECP[0] = 0x%x\n", Value));\r
+\r
+ HcDev->PciIo->Pci.Read (\r
+ HcDev->PciIo,\r
+ EfiPciIoWidthUint32,\r
+ EECP + 0x4,\r
+ 1,\r
+ &Value \r
+ );\r
+\r
+ DEBUG((gEHCDebugLevel, "EECP[4] = 0x%x\n", Value));\r
+\r
+\r
+}\r
+\r
EFI_STATUS\r
GetCapabilityLen (\r
IN USB2_HC_DEV *HcDev\r
Status = ReadEhcCapabiltiyReg (\r
HcDev,\r
CapabilityLenAddr,\r
- &mUsbCapabilityLen\r
+ &(HcDev->UsbCapabilityLen)\r
);\r
- mUsbCapabilityLen = (UINT8) mUsbCapabilityLen;\r
+ HcDev->UsbCapabilityLen = (UINT8) HcDev->UsbCapabilityLen;\r
\r
return Status;\r
}\r
\r
HcCapParamsAddr = HCCPARAMS;\r
\r
- ReadEhcOperationalReg (\r
+ ReadEhcCapabiltiyReg(\r
HcDev,\r
HcCapParamsAddr,\r
&HcCapParamsReg\r
&PortStatusControlReg\r
);\r
\r
- return ((PortStatusControlReg & PORTSC_PED) ? TRUE : FALSE);\r
+ return ((BOOLEAN) ((PortStatusControlReg & PORTSC_PED) ? TRUE : FALSE));\r
}\r
\r
BOOLEAN\r
//\r
gBS->Stall (EHCI_CLEAR_PORT_RESET_RECOVERY_TIME);\r
\r
- return (IsEhcPortEnabled (HcDev, PortNum) ? TRUE : FALSE);\r
+ return ((BOOLEAN) (IsEhcPortEnabled (HcDev, PortNum) ? TRUE : FALSE));\r
}\r
\r
EFI_STATUS\r