+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