]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg: Add definition of the EDKII_UFS_HC_PLATFORM_PROTOCOL
authorAlbecki, Mateusz <mateusz.albecki@intel.com>
Fri, 9 Aug 2019 14:36:17 +0000 (22:36 +0800)
committerHao A Wu <hao.a.wu@intel.com>
Tue, 13 Aug 2019 02:54:35 +0000 (10:54 +0800)
https://bugzilla.tianocore.org/show_bug.cgi?id=1343

EDKII_UFS_HC_PLATFORM_PROTOCOL will allow the platform to inject
platform specific logic into standard UFS flows. Right now we
support callbacks pre and post host controller enable and pre
and post link startup. Provided callbacks allow the platform
driver to inject UIC programming after HCE is set which is
a standard initialization step covered by UFS specification as
well as cover some additional use cases during other callbacks.
For instance platform driver may switch to fast mode after link
startup.

We also allow the platform to override host controller capabilities
and version which might be useful to manage silicon bugs or
allow testing experimental features from new versions of the
specification.

Signed-off-by: Mateusz Albecki <mateusz.albecki@intel.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
MdeModulePkg/Include/Protocol/UfsHostControllerPlatform.h [new file with mode: 0644]
MdeModulePkg/MdeModulePkg.dec

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
index 35935d7aa623d042156cc041342892986092d71c..857735f7a9ec20e198666c96ed68db1d84c824b4 100644 (file)
   ## Include/Protocol/UfsHostController.h\r
   gEdkiiUfsHostControllerProtocolGuid = { 0xebc01af5, 0x7a9, 0x489e, { 0xb7, 0xce, 0xdc, 0x8, 0x9e, 0x45, 0x9b, 0x2f } }\r
 \r
+  ## Include/Protocol/UfsHostControllerPlatform.h\r
+  gEdkiiUfsHcPlatformProtocolGuid = { 0x3d18ba13, 0xd9b1, 0x4dd4, {0xb9, 0x16, 0xd3, 0x07, 0x96, 0x53, 0x9e, 0xd8}}\r
+\r
   ## Include/Protocol/EsrtManagement.h\r
   gEsrtManagementProtocolGuid         = { 0xa340c064, 0x723c, 0x4a9c, { 0xa4, 0xdd, 0xd5, 0xb4, 0x7a, 0x26, 0xfb, 0xb0 }}\r
 \r