#ifndef _EFI_EHCI_H_\r
#define _EFI_EHCI_H_\r
\r
-//\r
-// The package level header files this module uses\r
-//\r
+\r
#include <PiDxe.h>\r
-//\r
-// The protocols, PPI and GUID defintions for this module\r
-//\r
+\r
#include <Protocol/Usb2HostController.h>\r
#include <Protocol/PciIo.h>\r
-//\r
-// The Library classes this module consumes\r
-//\r
+\r
#include <Library/DebugLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiLib.h>\r
#include <Library/BaseLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
-\r
+#include <Library/PcdLib.h>\r
\r
#include <IndustryStandard/Pci22.h>\r
\r
#include "EhciDebug.h"\r
\r
enum {\r
- USB2_HC_DEV_SIGNATURE = EFI_SIGNATURE_32 ('e', 'h', 'c', 'i'),\r
- EHC_STALL_1_MICROSECOND = 1,\r
- EHC_STALL_1_MILLISECOND = 1000 * EHC_STALL_1_MICROSECOND,\r
- EHC_STALL_1_SECOND = 1000 * EHC_STALL_1_MILLISECOND,\r
-\r
- EHC_SET_PORT_RESET_TIME = 50 * EHC_STALL_1_MILLISECOND,\r
- EHC_CLEAR_PORT_RESET_TIME = EHC_STALL_1_MILLISECOND,\r
- EHC_GENERIC_TIME = 10 * EHC_STALL_1_MILLISECOND,\r
- EHC_SYNC_POLL_TIME = 20 * EHC_STALL_1_MICROSECOND,\r
- EHC_ASYNC_POLL_TIME = 50 * 10000UL, // The unit of time is 100us\r
-\r
- EHC_TPL = TPL_NOTIFY,\r
+ EHC_1_MICROSECOND = 1,\r
+ EHC_1_MILLISECOND = 1000 * EHC_1_MICROSECOND,\r
+ EHC_1_SECOND = 1000 * EHC_1_MILLISECOND,\r
+\r
+ //\r
+ // EHCI register operation timeout, set by experience\r
+ //\r
+ EHC_RESET_TIMEOUT = 1 * EHC_1_SECOND,\r
+ EHC_GENERIC_TIMEOUT = 10 * EHC_1_MILLISECOND,\r
+\r
+ //\r
+ // Wait for roothub port power stable, refers to Spec[EHCI1.0-2.3.9]\r
+ //\r
+ EHC_ROOT_PORT_RECOVERY_STALL = 20 * EHC_1_MILLISECOND,\r
+\r
+ //\r
+ // Sync and Async transfer polling interval, set by experience,\r
+ // and the unit of Async is 100us, means 50ms as interval.\r
+ //\r
+ EHC_SYNC_POLL_INTERVAL = 20 * EHC_1_MICROSECOND,\r
+ EHC_ASYNC_POLL_INTERVAL = 50 * 10000U,\r
+\r
+ //\r
+ // EHC raises TPL to TPL_NOTIFY to serialize all its operations\r
+ // to protect shared data structures.\r
+ //\r
+ EHC_TPL = TPL_NOTIFY,\r
+\r
+ USB2_HC_DEV_SIGNATURE = EFI_SIGNATURE_32 ('e', 'h', 'c', 'i')\r
};\r
\r
//\r
\r
#define EHC_FROM_THIS(a) CR(a, USB2_HC_DEV, Usb2Hc, USB2_HC_DEV_SIGNATURE)\r
\r
-typedef struct _USB2_HC_DEV {\r
+struct _USB2_HC_DEV {\r
UINTN Signature;\r
EFI_USB2_HC_PROTOCOL Usb2Hc;\r
\r
EFI_PCI_IO_PROTOCOL *PciIo;\r
+ UINT64 OriginalPciAttributes;\r
USBHC_MEM_POOL *MemPool;\r
\r
//\r
// Misc\r
//\r
EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
-} USB2_HC_DEV;\r
+};\r
\r
\r
-extern EFI_DRIVER_BINDING_PROTOCOL gEhciDriverBinding;\r
-extern EFI_COMPONENT_NAME_PROTOCOL gEhciComponentName;\r
+extern EFI_DRIVER_BINDING_PROTOCOL gEhciDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gEhciComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gEhciComponentName2;\r
\r
#endif\r