]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Include/Protocol/UfsHostControllerPlatform.h
MdeModulePkg: Add definition of the EDKII_UFS_HC_PLATFORM_PROTOCOL
[mirror_edk2.git] / MdeModulePkg / Include / Protocol / UfsHostControllerPlatform.h
diff --git a/MdeModulePkg/Include/Protocol/UfsHostControllerPlatform.h b/MdeModulePkg/Include/Protocol/UfsHostControllerPlatform.h
new file mode 100644 (file)
index 0000000..0f6732a
--- /dev/null
@@ -0,0 +1,124 @@
+/** @file\r
+  EDKII_UFS_HC_PLATFORM_PROTOCOL definition.\r
+\r
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef __EDKII_UFS_HC_PLATFORM_PROTOCOL_H__\r
+#define __EDKII_UFS_HC_PLATFORM_PROTOCOL_H__\r
+\r
+#include <Protocol/UfsHostController.h>\r
+\r
+#define EDKII_UFS_HC_PLATFORM_PROTOCOL_VERSION 1\r
+\r
+extern EFI_GUID  gEdkiiUfsHcPlatformProtocolGuid;\r
+\r
+typedef struct _EDKII_UFS_HC_PLATFORM_PROTOCOL  EDKII_UFS_HC_PLATFORM_PROTOCOL;\r
+\r
+typedef struct _EDKII_UFS_HC_DRIVER_INTERFACE  EDKII_UFS_HC_DRIVER_INTERFACE;\r
+\r
+typedef struct {\r
+  UINT32 Opcode;\r
+  UINT32 Arg1;\r
+  UINT32 Arg2;\r
+  UINT32 Arg3;\r
+} EDKII_UIC_COMMAND;\r
+\r
+/**\r
+  Execute UIC command\r
+\r
+  @param[in]      This        Pointer to driver interface produced by the UFS controller.\r
+  @param[in, out] UicCommand  Descriptor of the command that will be executed.\r
+\r
+  @retval EFI_SUCCESS            Command executed successfully.\r
+  @retval EFI_INVALID_PARAMETER  This or UicCommand is NULL.\r
+  @retval Others                 Command failed to execute.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_UFS_EXEC_UIC_COMMAND) (\r
+  IN      EDKII_UFS_HC_DRIVER_INTERFACE  *This,\r
+  IN OUT  EDKII_UIC_COMMAND              *UicCommand\r
+);\r
+\r
+struct _EDKII_UFS_HC_DRIVER_INTERFACE {\r
+  ///\r
+  /// Protocol to accesss host controller MMIO and PCI registers.\r
+  ///\r
+  EDKII_UFS_HOST_CONTROLLER_PROTOCOL  *UfsHcProtocol;\r
+  ///\r
+  /// Function implementing UIC command execution.\r
+  ///\r
+  EDKII_UFS_EXEC_UIC_COMMAND          UfsExecUicCommand;\r
+};\r
+\r
+typedef struct {\r
+  UINT32 Capabilities;\r
+  UINT32 Version;\r
+} EDKII_UFS_HC_INFO;\r
+\r
+/**\r
+  Allows platform protocol to override host controller information\r
+\r
+  @param[in]      ControllerHandle  Handle of the UFS controller.\r
+  @param[in, out] HcInfo            Pointer EDKII_UFS_HC_INFO associated with host controller.\r
+\r
+  @retval EFI_SUCCESS            Function completed successfully.\r
+  @retval EFI_INVALID_PARAMETER  HcInfo is NULL.\r
+  @retval Others                 Function failed to complete.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_UFS_HC_PLATFORM_OVERRIDE_HC_INFO) (\r
+  IN     EFI_HANDLE         ControllerHandle,\r
+  IN OUT EDKII_UFS_HC_INFO  *HcInfo\r
+);\r
+\r
+typedef enum {\r
+  EdkiiUfsHcPreHce,\r
+  EdkiiUfsHcPostHce,\r
+  EdkiiUfsHcPreLinkStartup,\r
+  EdkiiUfsHcPostLinkStartup\r
+} EDKII_UFS_HC_PLATFORM_CALLBACK_PHASE;\r
+\r
+/**\r
+  Callback function for platform driver.\r
+\r
+  @param[in]      ControllerHandle  Handle of the UFS controller.\r
+  @param[in]      CallbackPhase     Specifies when the platform protocol is called\r
+  @param[in, out] CallbackData      Data specific to the callback phase.\r
+                                    For PreHce and PostHce - EDKII_UFS_HC_DRIVER_INTERFACE.\r
+                                    For PreLinkStartup and PostLinkStartup - EDKII_UFS_HC_DRIVER_INTERFACE.\r
+\r
+  @retval EFI_SUCCESS            Override function completed successfully.\r
+  @retval EFI_INVALID_PARAMETER  CallbackPhase is invalid or CallbackData is NULL when phase expects valid data.\r
+  @retval Others                 Function failed to complete.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EDKII_UFS_HC_PLATFORM_CALLBACK) (\r
+  IN     EFI_HANDLE                            ControllerHandle,\r
+  IN     EDKII_UFS_HC_PLATFORM_CALLBACK_PHASE  CallbackPhase,\r
+  IN OUT VOID                                  *CallbackData\r
+);\r
+\r
+struct _EDKII_UFS_HC_PLATFORM_PROTOCOL {\r
+  ///\r
+  /// Version of the protocol.\r
+  ///\r
+  UINT32                                  Version;\r
+  ///\r
+  /// Allows platform driver to override host controller information.\r
+  ///\r
+  EDKII_UFS_HC_PLATFORM_OVERRIDE_HC_INFO  OverrideHcInfo;\r
+  ///\r
+  /// Allows platform driver to implement platform specific flows\r
+  /// for host controller.\r
+  ///\r
+  EDKII_UFS_HC_PLATFORM_CALLBACK          Callback;\r
+};\r
+\r
+#endif\r
+\r