/** @file | |
Protocol to describe overrides required to support non-standard SDHCI | |
implementations | |
Copyright (c) 2017 - 2018, Linaro, Ltd. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#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 0x1 | |
typedef struct _EDKII_SD_MMC_OVERRIDE EDKII_SD_MMC_OVERRIDE; | |
typedef enum { | |
EdkiiSdMmcResetPre, | |
EdkiiSdMmcResetPost, | |
EdkiiSdMmcInitHostPre, | |
EdkiiSdMmcInitHostPost, | |
} 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. | |
@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 | |
); | |
/** | |
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) | |
@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 | |
); | |
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 |