summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Include/Protocol/SdMmcOverride.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/MdeModulePkg/Include/Protocol/SdMmcOverride.h')
-rw-r--r--src/VBox/Devices/EFI/Firmware/MdeModulePkg/Include/Protocol/SdMmcOverride.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Include/Protocol/SdMmcOverride.h b/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Include/Protocol/SdMmcOverride.h
new file mode 100644
index 00000000..e530dd24
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Include/Protocol/SdMmcOverride.h
@@ -0,0 +1,160 @@
+/** @file
+ Protocol to describe overrides required to support non-standard SDHCI
+ implementations
+
+ Copyright (c) 2017 - 2018, Linaro, Ltd. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef __SD_MMC_OVERRIDE_H__
+#define __SD_MMC_OVERRIDE_H__
+
+#include <Protocol/SdMmcPassThru.h>
+
+#define EDKII_SD_MMC_OVERRIDE_PROTOCOL_GUID \
+ { 0xeaf9e3c1, 0xc9cd, 0x46db, { 0xa5, 0xe5, 0x5a, 0x12, 0x4c, 0x83, 0x23, 0x23 } }
+
+#define EDKII_SD_MMC_OVERRIDE_PROTOCOL_VERSION 0x3
+
+typedef struct _EDKII_SD_MMC_OVERRIDE EDKII_SD_MMC_OVERRIDE;
+
+#define EDKII_SD_MMC_BUS_WIDTH_IGNORE MAX_UINT8
+#define EDKII_SD_MMC_CLOCK_FREQ_IGNORE MAX_UINT32
+#define EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE MAX_UINT8
+
+typedef enum {
+ SdDriverStrengthTypeB = 0,
+ SdDriverStrengthTypeA,
+ SdDriverStrengthTypeC,
+ SdDriverStrengthTypeD,
+ SdDriverStrengthIgnore = EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE
+} SD_DRIVER_STRENGTH_TYPE;
+
+typedef enum {
+ EmmcDriverStrengthType0 = 0,
+ EmmcDriverStrengthType1,
+ EmmcDriverStrengthType2,
+ EmmcDriverStrengthType3,
+ EmmcDriverStrengthType4,
+ EmmcDriverStrengthIgnore = EDKII_SD_MMC_DRIVER_STRENGTH_IGNORE
+} EMMC_DRIVER_STRENGTH_TYPE;
+
+typedef union {
+ SD_DRIVER_STRENGTH_TYPE Sd;
+ EMMC_DRIVER_STRENGTH_TYPE Emmc;
+} EDKII_SD_MMC_DRIVER_STRENGTH;
+
+typedef struct {
+ //
+ // The target width of the bus. If user tells driver to ignore it
+ // or specifies unsupported width driver will choose highest supported
+ // bus width for a given mode.
+ //
+ UINT8 BusWidth;
+ //
+ // The target clock frequency of the bus in MHz. If user tells driver to ignore
+ // it or specifies unsupported frequency driver will choose highest supported
+ // clock frequency for a given mode.
+ //
+ UINT32 ClockFreq;
+ //
+ // The target driver strength of the bus. If user tells driver to
+ // ignore it or specifies unsupported driver strength, driver will
+ // default to Type0 for eMMC cards and TypeB for SD cards. Driver strength
+ // setting is only considered if chosen bus timing supports them.
+ //
+ EDKII_SD_MMC_DRIVER_STRENGTH DriverStrength;
+} EDKII_SD_MMC_OPERATING_PARAMETERS;
+
+typedef enum {
+ SdMmcSdDs,
+ SdMmcSdHs,
+ SdMmcUhsSdr12,
+ SdMmcUhsSdr25,
+ SdMmcUhsSdr50,
+ SdMmcUhsDdr50,
+ SdMmcUhsSdr104,
+ SdMmcMmcLegacy,
+ SdMmcMmcHsSdr,
+ SdMmcMmcHsDdr,
+ SdMmcMmcHs200,
+ SdMmcMmcHs400,
+} SD_MMC_BUS_MODE;
+
+typedef enum {
+ EdkiiSdMmcResetPre,
+ EdkiiSdMmcResetPost,
+ EdkiiSdMmcInitHostPre,
+ EdkiiSdMmcInitHostPost,
+ EdkiiSdMmcUhsSignaling,
+ EdkiiSdMmcSwitchClockFreqPost,
+ EdkiiSdMmcGetOperatingParam
+} EDKII_SD_MMC_PHASE_TYPE;
+
+/**
+ Override function for SDHCI capability bits
+
+ @param[in] ControllerHandle The EFI_HANDLE of the controller.
+ @param[in] Slot The 0 based slot index.
+ @param[in,out] SdMmcHcSlotCapability The SDHCI capability structure.
+ @param[in,out] BaseClkFreq The base clock frequency value that
+ optionally can be updated.
+
+ @retval EFI_SUCCESS The override function completed successfully.
+ @retval EFI_NOT_FOUND The specified controller or slot does not exist.
+ @retval EFI_INVALID_PARAMETER SdMmcHcSlotCapability is NULL
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI * EDKII_SD_MMC_CAPABILITY) (
+ IN EFI_HANDLE ControllerHandle,
+ IN UINT8 Slot,
+ IN OUT VOID *SdMmcHcSlotCapability,
+ IN OUT UINT32 *BaseClkFreq
+ );
+
+/**
+ Override function for SDHCI controller operations
+
+ @param[in] ControllerHandle The EFI_HANDLE of the controller.
+ @param[in] Slot The 0 based slot index.
+ @param[in] PhaseType The type of operation and whether the
+ hook is invoked right before (pre) or
+ right after (post)
+ @param[in,out] PhaseData The pointer to a phase-specific data.
+
+ @retval EFI_SUCCESS The override function completed successfully.
+ @retval EFI_NOT_FOUND The specified controller or slot does not exist.
+ @retval EFI_INVALID_PARAMETER PhaseType is invalid
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI * EDKII_SD_MMC_NOTIFY_PHASE) (
+ IN EFI_HANDLE ControllerHandle,
+ IN UINT8 Slot,
+ IN EDKII_SD_MMC_PHASE_TYPE PhaseType,
+ IN OUT VOID *PhaseData
+ );
+
+struct _EDKII_SD_MMC_OVERRIDE {
+ //
+ // Protocol version of this implementation
+ //
+ UINTN Version;
+ //
+ // Callback to override SD/MMC host controller capability bits
+ //
+ EDKII_SD_MMC_CAPABILITY Capability;
+ //
+ // Callback to invoke SD/MMC override hooks
+ //
+ EDKII_SD_MMC_NOTIFY_PHASE NotifyPhase;
+};
+
+extern EFI_GUID gEdkiiSdMmcOverrideProtocolGuid;
+
+#endif