\r
The definition for UHCI driver model and HC protocol routines.\r
\r
-Copyright (c) 2004 - 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
#include <Protocol/UsbHostController.h>\r
#include <Protocol/PciIo.h>\r
\r
+#include <Guid/EventGroup.h>\r
+\r
#include <Library/DebugLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/BaseLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
#include <Library/PcdLib.h>\r
+#include <Library/ReportStatusCodeLib.h>\r
\r
-#include <IndustryStandard/Pci22.h>\r
+#include <IndustryStandard/Pci.h>\r
\r
typedef struct _USB_HC_DEV USB_HC_DEV;\r
\r
#include "UhciReg.h"\r
#include "UhciSched.h"\r
#include "UhciDebug.h"\r
+#include "ComponentName.h"\r
\r
-typedef enum {\r
- UHC_1_MICROSECOND = 1,\r
- UHC_1_MILLISECOND = 1000 * UHC_1_MICROSECOND,\r
- UHC_1_SECOND = 1000 * UHC_1_MILLISECOND,\r
+//\r
+// UHC timeout experience values\r
+//\r
\r
- //\r
- // UHCI register operation timeout, set by experience\r
- //\r
- UHC_GENERIC_TIMEOUT = UHC_1_SECOND,\r
+#define UHC_1_MICROSECOND 1\r
+#define UHC_1_MILLISECOND (1000 * UHC_1_MICROSECOND)\r
+#define UHC_1_SECOND (1000 * UHC_1_MILLISECOND)\r
\r
- //\r
- // Wait for force global resume(FGR) complete, refers to\r
- // specification[UHCI11-2.1.1]\r
- //\r
- UHC_FORCE_GLOBAL_RESUME_STALL = 20 * UHC_1_MILLISECOND,\r
+//\r
+// UHCI register operation timeout, set by experience\r
+//\r
+#define UHC_GENERIC_TIMEOUT UHC_1_SECOND\r
\r
- //\r
- // Wait for roothub port reset and recovery, reset stall\r
- // is set by experience, and recovery stall refers to\r
- // specification[UHCI11-2.1.1]\r
- //\r
- UHC_ROOT_PORT_RESET_STALL = 50 * UHC_1_MILLISECOND,\r
- UHC_ROOT_PORT_RECOVERY_STALL = 10 * UHC_1_MILLISECOND,\r
+//\r
+// Wait for force global resume(FGR) complete, refers to\r
+// specification[UHCI11-2.1.1]\r
+//\r
+#define UHC_FORCE_GLOBAL_RESUME_STALL (20 * UHC_1_MILLISECOND)\r
\r
- //\r
- // Sync and Async transfer polling interval, set by experience,\r
- // and the unit of Async is 100us.\r
- //\r
- UHC_SYNC_POLL_INTERVAL = 50 * UHC_1_MICROSECOND,\r
- UHC_ASYNC_POLL_INTERVAL = 50 * 10000UL\r
-}UHC_TIMEOUT_EXPERIENCE_VALUE;\r
+//\r
+// Wait for roothub port reset and recovery, reset stall\r
+// is set by experience, and recovery stall refers to\r
+// specification[UHCI11-2.1.1]\r
+//\r
+#define UHC_ROOT_PORT_RESET_STALL (50 * UHC_1_MILLISECOND)\r
+#define UHC_ROOT_PORT_RECOVERY_STALL (10 * UHC_1_MILLISECOND)\r
\r
+//\r
+// Sync and Async transfer polling interval, set by experience,\r
+// and the unit of Async is 100us.\r
+//\r
+#define UHC_SYNC_POLL_INTERVAL (1 * UHC_1_MILLISECOND)\r
+#define UHC_ASYNC_POLL_INTERVAL EFI_TIMER_PERIOD_MILLISECONDS(1)\r
\r
//\r
// UHC raises TPL to TPL_NOTIFY to serialize all its operations\r
//\r
#define UHCI_TPL TPL_NOTIFY\r
\r
-#define USB_HC_DEV_SIGNATURE EFI_SIGNATURE_32 ('u', 'h', 'c', 'i')\r
+#define USB_HC_DEV_SIGNATURE SIGNATURE_32 ('u', 'h', 'c', 'i')\r
\r
#pragma pack(1)\r
typedef struct {\r
- UINT8 PI;\r
+ UINT8 ProgInterface;\r
UINT8 SubClassCode;\r
UINT8 BaseCode;\r
} USB_CLASSC;\r
UINT32 Signature;\r
EFI_USB2_HC_PROTOCOL Usb2Hc;\r
EFI_PCI_IO_PROTOCOL *PciIo;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
UINT64 OriginalPciAttributes;\r
\r
//\r
// Schedule data structures\r
//\r
- UINT32 *FrameBase;\r
+ UINT32 *FrameBase; // the buffer pointed by this pointer is used to store pci bus address of the QH descriptor.\r
+ UINT32 *FrameBaseHostAddr; // the buffer pointed by this pointer is used to store host memory address of the QH descriptor.\r
UHCI_QH_SW *SyncIntQh;\r
UHCI_QH_SW *CtrlQh;\r
UHCI_QH_SW *BulkQh;\r
USBHC_MEM_POOL *MemPool;\r
EFI_UNICODE_STRING_TABLE *CtrlNameTable;\r
VOID *FrameMapping;\r
+\r
+ //\r
+ // ExitBootServicesEvent is used to stop the EHC DMA operation \r
+ // after exit boot service.\r
+ //\r
+ EFI_EVENT ExitBootServiceEvent;\r
};\r
\r
extern EFI_DRIVER_BINDING_PROTOCOL gUhciDriverBinding;\r
extern EFI_COMPONENT_NAME_PROTOCOL gUhciComponentName;\r
extern EFI_COMPONENT_NAME2_PROTOCOL gUhciComponentName2;\r
\r
+/**\r
+ Test to see if this driver supports ControllerHandle. Any\r
+ ControllerHandle that has UsbHcProtocol installed will be supported.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param Controller Handle of device to test.\r
+ @param RemainingDevicePath Not used.\r
+\r
+ @return EFI_SUCCESS This driver supports this device.\r
+ @return EFI_UNSUPPORTED This driver does not support this device.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UhciDriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ );\r
+\r
+/**\r
+ Starting the Usb UHCI Driver.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param Controller Handle of device to test.\r
+ @param RemainingDevicePath Not used.\r
+\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval EFI_UNSUPPORTED This driver does not support this device.\r
+ @retval EFI_DEVICE_ERROR This driver cannot be started due to device Error.\r
+ EFI_OUT_OF_RESOURCES- Failed due to resource shortage.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UhciDriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ );\r
+\r
+/**\r
+ Stop this driver on ControllerHandle. Support stoping any child handles\r
+ created by this driver.\r
+\r
+ @param This Protocol instance pointer.\r
+ @param Controller Handle of device to stop driver on.\r
+ @param NumberOfChildren Number of Children in the ChildHandleBuffer.\r
+ @param ChildHandleBuffer List of handles for the children we need to stop.\r
+\r
+ @return EFI_SUCCESS\r
+ @return others\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UhciDriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
#endif\r