PeiPolicyInit.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /** @file
  2. This file is SampleCode for Intel PEI Platform Policy initialization.
  3. Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "PeiPolicyInit.h"
  7. /**
  8. Performs silicon post-mem policy initialization.
  9. The meaning of Policy is defined by silicon code.
  10. It could be the raw data, a handle, a PPI, etc.
  11. The returned data must be used as input data for SiliconPolicyDonePostMem(),
  12. and SiliconPolicyUpdateLib.SiliconPolicyUpdatePostMem().
  13. 1) In FSP path, the input Policy should be FspsUpd.
  14. Value of FspsUpd has been initialized by FSP binary default value.
  15. Only a subset of FspsUpd needs to be updated for different silicon sku.
  16. The return data is same FspsUpd.
  17. 2) In non-FSP path, the input policy could be NULL.
  18. The return data is the initialized policy.
  19. @param[in, out] Policy Pointer to policy.
  20. @return the initialized policy.
  21. **/
  22. VOID *
  23. EFIAPI
  24. SiliconPolicyInitPostMem (
  25. IN OUT VOID *Policy
  26. )
  27. {
  28. EFI_STATUS Status;
  29. SI_POLICY_PPI *SiPolicyPpi;
  30. PEI_SI_DEFAULT_POLICY_INIT_PPI *PeiSiDefaultPolicyInitPpi;
  31. DEBUG ((DEBUG_INFO, "Silicon PEI Policy Initialization Start in Post-Memory...\n"));
  32. ASSERT (Policy == NULL);
  33. //
  34. // Locate Policy init PPI to install default silicon policy
  35. //
  36. Status = PeiServicesLocatePpi (
  37. &gSiDefaultPolicyInitPpiGuid,
  38. 0,
  39. NULL,
  40. (VOID **) &PeiSiDefaultPolicyInitPpi
  41. );
  42. ASSERT_EFI_ERROR (Status);
  43. if (PeiSiDefaultPolicyInitPpi != NULL) {
  44. Status = PeiSiDefaultPolicyInitPpi->PeiPolicyInit ();
  45. ASSERT_EFI_ERROR (Status);
  46. if (Status == EFI_SUCCESS) {
  47. Status = PeiServicesLocatePpi (
  48. &gSiPolicyPpiGuid,
  49. 0,
  50. NULL,
  51. (VOID **) &SiPolicyPpi
  52. );
  53. ASSERT_EFI_ERROR (Status);
  54. }
  55. }
  56. return SiPolicyPpi;
  57. }
  58. /*
  59. The silicon post-mem policy is finalized.
  60. Silicon code can do initialization based upon the policy data.
  61. The input Policy must be returned by SiliconPolicyInitPostMem().
  62. @param[in] Policy Pointer to policy.
  63. @retval EFI_SUCCESS The policy is handled consumed by silicon code.
  64. */
  65. EFI_STATUS
  66. EFIAPI
  67. SiliconPolicyDonePostMem (
  68. IN VOID *Policy
  69. )
  70. {
  71. EFI_STATUS Status;
  72. SI_POLICY_PPI *SiPolicyPpi;
  73. SiPolicyPpi = Policy;
  74. //
  75. // Install SiPolicyPpi.
  76. // While installed, RC assumes the Policy is ready and finalized. So please
  77. // update and override any setting before calling this function.
  78. //
  79. Status = SiInstallPolicyReadyPpi ();
  80. ASSERT_EFI_ERROR (Status);
  81. DEBUG ((DEBUG_INFO, "Silicon PEI Policy Initialization Done in Post-Memory\n"));
  82. return Status;
  83. }