/** @file PCH eMMC HS400 Tuning Protocol Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _PCH_EMMC_TUNING_PROTOCOL_H_ #define _PCH_EMMC_TUNING_PROTOCOL_H_ #define PCH_EMMC_TUNING_PROTOCOL_REVISION 2 // // Extern the GUID for protocol users. // extern EFI_GUID gPchEmmcTuningProtocolGuid; // // Forward declaration for PCH_EMMC_TUNING_PROTOCOL // typedef struct _PCH_EMMC_TUNING_PROTOCOL PCH_EMMC_TUNING_PROTOCOL; /** This structure decribes the required Emmc info for HS400 tuning **/ typedef struct { EFI_HANDLE PartitionHandle; ///< eMMC partition handle for block read/write EFI_LBA Lba; ///< Logical Block Address for HS400 Tuning block read/write UINT32 RelativeDevAddress; ///< Device system address, dynamically assigned by the host during initialization. UINT8 HS200BusWidth; ///< The value to be programmed for BUS_WIDTH[183] byte } EMMC_INFO; /// /// This structure describes the return value after HS400 tuning /// typedef struct { UINT8 Hs400DataValid; ///< Set if Hs400 Tuning Data is valid after tuning UINT8 Hs400RxStrobe1Dll; ///< Rx Strobe Delay Control - Rx Strobe Delay DLL 1 (HS400 Mode) UINT8 Hs400TxDataDll; ///< Tx Data Delay Control 1 - Tx Data Delay (HS400 Mode) UINT8 Hs400DriverStrength; ///< Hs400 Driver Strength } EMMC_TUNING_DATA; /// /// EMMC HS400 TUNING INTERFACE /// typedef EFI_STATUS (EFIAPI *EMMC_TUNE) ( IN PCH_EMMC_TUNING_PROTOCOL *This, ///< This pointer to PCH_EMMC_TUNING_PROTOCOL /** Revision parameter is used to verify the layout of EMMC_INFO and TUNINGDATA. If the revision is not matched, means the revision of EMMC_INFO and TUNINGDATA is not matched. And function will return immediately. **/ IN UINT8 Revision, IN EMMC_INFO *EmmcInfo, ///< Pointer to EMMC_INFO OUT EMMC_TUNING_DATA *EmmcTuningData ///< Pointer to EMMC_TUNING_DATA ); /** PCH EMMC TUNING PROTOCOL INTERFACE Platform code uses this protocol to configure Emmc Hs400 mode, by passing the EMMC_INFO information. PCH will setting EMMC controller based on EMMC_INFO and return EMMC_TUNING_DATA to platform code. Platform should keep values of EMMC_TUNING_DATA and uses to configure EMMC through policies, to prevent from doing EMMC tuning every boot. **/ struct _PCH_EMMC_TUNING_PROTOCOL { EMMC_TUNE EmmcTune; ///< Emmc Hs400 Tuning Interface }; #endif