]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Include/Protocol/SdMmcOverride.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Include / Protocol / SdMmcOverride.h
index f948befba5b1989a283d864d8807c886b21d74a3..4fd12b9ad4c09bbe7793f09a3363d7da68d5fb41 100644 (file)
@@ -4,13 +4,7 @@
 \r
   Copyright (c) 2017 - 2018, Linaro, Ltd. All rights reserved.<BR>\r
 \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
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #define EDKII_SD_MMC_OVERRIDE_PROTOCOL_GUID \\r
   { 0xeaf9e3c1, 0xc9cd, 0x46db, { 0xa5, 0xe5, 0x5a, 0x12, 0x4c, 0x83, 0x23, 0x23 } }\r
 \r
-#define EDKII_SD_MMC_OVERRIDE_PROTOCOL_VERSION    0x1\r
+#define EDKII_SD_MMC_OVERRIDE_PROTOCOL_VERSION  0x3\r
 \r
 typedef struct _EDKII_SD_MMC_OVERRIDE EDKII_SD_MMC_OVERRIDE;\r
 \r
-//\r
-// Bus timing modes\r
-//\r
+#define EDKII_SD_MMC_BUS_WIDTH_IGNORE        MAX_UINT8\r
+#define EDKII_SD_MMC_CLOCK_FREQ_IGNORE       MAX_UINT32\r
+#define EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE  MAX_UINT8\r
+\r
+typedef enum {\r
+  SdDriverStrengthTypeB = 0,\r
+  SdDriverStrengthTypeA,\r
+  SdDriverStrengthTypeC,\r
+  SdDriverStrengthTypeD,\r
+  SdDriverStrengthIgnore = EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE\r
+} SD_DRIVER_STRENGTH_TYPE;\r
+\r
+typedef enum {\r
+  EmmcDriverStrengthType0 = 0,\r
+  EmmcDriverStrengthType1,\r
+  EmmcDriverStrengthType2,\r
+  EmmcDriverStrengthType3,\r
+  EmmcDriverStrengthType4,\r
+  EmmcDriverStrengthIgnore = EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE\r
+} EMMC_DRIVER_STRENGTH_TYPE;\r
+\r
+typedef union {\r
+  SD_DRIVER_STRENGTH_TYPE      Sd;\r
+  EMMC_DRIVER_STRENGTH_TYPE    Emmc;\r
+} EDKII_SD_MMC_DRIVER_STRENGTH;\r
+\r
+typedef struct {\r
+  //\r
+  // The target width of the bus. If user tells driver to ignore it\r
+  // or specifies unsupported width driver will choose highest supported\r
+  // bus width for a given mode.\r
+  //\r
+  UINT8                           BusWidth;\r
+  //\r
+  // The target clock frequency of the bus in MHz. If user tells driver to ignore\r
+  // it or specifies unsupported frequency driver will choose highest supported\r
+  // clock frequency for a given mode.\r
+  //\r
+  UINT32                          ClockFreq;\r
+  //\r
+  // The target driver strength of the bus. If user tells driver to\r
+  // ignore it or specifies unsupported driver strength, driver will\r
+  // default to Type0 for eMMC cards and TypeB for SD cards. Driver strength\r
+  // setting is only considered if chosen bus timing supports them.\r
+  //\r
+  EDKII_SD_MMC_DRIVER_STRENGTH    DriverStrength;\r
+} EDKII_SD_MMC_OPERATING_PARAMETERS;\r
+\r
 typedef enum {\r
+  SdMmcSdDs,\r
+  SdMmcSdHs,\r
   SdMmcUhsSdr12,\r
   SdMmcUhsSdr25,\r
   SdMmcUhsSdr50,\r
-  SdMmcUhsSdr104,\r
   SdMmcUhsDdr50,\r
+  SdMmcUhsSdr104,\r
   SdMmcMmcLegacy,\r
   SdMmcMmcHsSdr,\r
   SdMmcMmcHsDdr,\r
@@ -48,15 +89,18 @@ typedef enum {
   EdkiiSdMmcInitHostPre,\r
   EdkiiSdMmcInitHostPost,\r
   EdkiiSdMmcUhsSignaling,\r
+  EdkiiSdMmcSwitchClockFreqPost,\r
+  EdkiiSdMmcGetOperatingParam\r
 } EDKII_SD_MMC_PHASE_TYPE;\r
 \r
 /**\r
-\r
   Override function for SDHCI capability bits\r
 \r
   @param[in]      ControllerHandle      The EFI_HANDLE of the controller.\r
   @param[in]      Slot                  The 0 based slot index.\r
   @param[in,out]  SdMmcHcSlotCapability The SDHCI capability structure.\r
+  @param[in,out]  BaseClkFreq           The base clock frequency value that\r
+                                        optionally can be updated.\r
 \r
   @retval EFI_SUCCESS           The override function completed successfully.\r
   @retval EFI_NOT_FOUND         The specified controller or slot does not exist.\r
@@ -65,14 +109,14 @@ typedef enum {
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI * EDKII_SD_MMC_CAPABILITY) (\r
+(EFIAPI *EDKII_SD_MMC_CAPABILITY)(\r
   IN      EFI_HANDLE                      ControllerHandle,\r
   IN      UINT8                           Slot,\r
-  IN  OUT VOID                            *SdMmcHcSlotCapability\r
+  IN OUT  VOID                            *SdMmcHcSlotCapability,\r
+  IN OUT  UINT32                          *BaseClkFreq\r
   );\r
 \r
 /**\r
-\r
   Override function for SDHCI controller operations\r
 \r
   @param[in]      ControllerHandle      The EFI_HANDLE of the controller.\r
@@ -89,7 +133,7 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI * EDKII_SD_MMC_NOTIFY_PHASE) (\r
+(EFIAPI *EDKII_SD_MMC_NOTIFY_PHASE)(\r
   IN      EFI_HANDLE                      ControllerHandle,\r
   IN      UINT8                           Slot,\r
   IN      EDKII_SD_MMC_PHASE_TYPE         PhaseType,\r
@@ -100,17 +144,17 @@ struct _EDKII_SD_MMC_OVERRIDE {
   //\r
   // Protocol version of this implementation\r
   //\r
-  UINTN                         Version;\r
+  UINTN                        Version;\r
   //\r
   // Callback to override SD/MMC host controller capability bits\r
   //\r
-  EDKII_SD_MMC_CAPABILITY       Capability;\r
+  EDKII_SD_MMC_CAPABILITY      Capability;\r
   //\r
   // Callback to invoke SD/MMC override hooks\r
   //\r
-  EDKII_SD_MMC_NOTIFY_PHASE     NotifyPhase;\r
+  EDKII_SD_MMC_NOTIFY_PHASE    NotifyPhase;\r
 };\r
 \r
-extern EFI_GUID gEdkiiSdMmcOverrideProtocolGuid;\r
+extern EFI_GUID  gEdkiiSdMmcOverrideProtocolGuid;\r
 \r
 #endif\r