/** @file This file is SampleCode for Intel PEI Platform Policy initialization. Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "PeiPolicyInit.h" /** Performs silicon pre-mem policy initialization. The meaning of Policy is defined by silicon code. It could be the raw data, a handle, a PPI, etc. The returned data must be used as input data for SiliconPolicyDonePreMem(), and SiliconPolicyUpdateLib.SiliconPolicyUpdatePreMem(). 1) In FSP path, the input Policy should be FspmUpd. Value of FspmUpd has been initialized by FSP binary default value. Only a subset of FspmUpd needs to be updated for different silicon sku. The return data is same FspmUpd. 2) In non-FSP path, the input policy could be NULL. The return data is the initialized policy. @param[in, out] Policy Pointer to policy. @return the initialized policy. **/ VOID * EFIAPI SiliconPolicyInitPreMem ( IN OUT VOID *Policy ) { EFI_STATUS Status; SI_PREMEM_POLICY_PPI *SiPreMemPolicyPpi; PEI_PREMEM_SI_DEFAULT_POLICY_INIT_PPI *PeiPreMemSiDefaultPolicyInitPpi; DEBUG ((DEBUG_INFO, "Silicon PEI Policy Initialization Start in Pre-Memory...\n")); ASSERT (Policy == NULL); SiPreMemPolicyPpi = NULL; // // Locate Policy init PPI to install default silicon policy // Status = PeiServicesLocatePpi ( &gSiPreMemDefaultPolicyInitPpiGuid, 0, NULL, (VOID **) &PeiPreMemSiDefaultPolicyInitPpi ); ASSERT_EFI_ERROR (Status); if (PeiPreMemSiDefaultPolicyInitPpi != NULL) { Status = PeiPreMemSiDefaultPolicyInitPpi->PeiPreMemPolicyInit (); ASSERT_EFI_ERROR (Status); if (Status == EFI_SUCCESS) { Status = PeiServicesLocatePpi ( &gSiPreMemPolicyPpiGuid, 0, NULL, (VOID **) &SiPreMemPolicyPpi ); ASSERT_EFI_ERROR (Status); } } return SiPreMemPolicyPpi; } /* The silicon pre-mem policy is finalized. Silicon code can do initialization based upon the policy data. The input Policy must be returned by SiliconPolicyInitPreMem(). @param[in] Policy Pointer to policy. @retval EFI_SUCCESS The policy is handled consumed by silicon code. */ EFI_STATUS EFIAPI SiliconPolicyDonePreMem ( IN VOID *Policy ) { EFI_STATUS Status; // // Install Policy Ready PPI // While installed, RC assumes the Policy is ready and finalized. So please // update and override any setting before calling this function. // Status = SiPreMemInstallPolicyReadyPpi (); ASSERT_EFI_ERROR (Status); DEBUG ((DEBUG_INFO, "Silicon PEI Policy Initialization Done in Pre-Memory\n")); return Status; }