diff options
Diffstat (limited to 'MdeModulePkg/Include/Protocol/SdMmcOverride.h')
| -rw-r--r-- | MdeModulePkg/Include/Protocol/SdMmcOverride.h | 320 |
1 files changed, 160 insertions, 160 deletions
diff --git a/MdeModulePkg/Include/Protocol/SdMmcOverride.h b/MdeModulePkg/Include/Protocol/SdMmcOverride.h index 4fd12b9ad4..40bd604815 100644 --- a/MdeModulePkg/Include/Protocol/SdMmcOverride.h +++ b/MdeModulePkg/Include/Protocol/SdMmcOverride.h @@ -1,160 +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
+/** @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 |
