PlatformPeim.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /** @file
  2. *
  3. * Copyright (c) 2011, ARM Limited. All rights reserved.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause-Patent
  6. *
  7. **/
  8. #include <PiPei.h>
  9. //
  10. // The protocols, PPI and GUID defintions for this module
  11. //
  12. #include <Ppi/MasterBootMode.h>
  13. #include <Ppi/BootInRecoveryMode.h>
  14. #include <Ppi/GuidedSectionExtraction.h>
  15. //
  16. // The Library classes this module consumes
  17. //
  18. #include <Library/ArmPlatformLib.h>
  19. #include <Library/BaseMemoryLib.h>
  20. #include <Library/DebugLib.h>
  21. #include <Library/HobLib.h>
  22. #include <Library/PeimEntryPoint.h>
  23. #include <Library/PeiServicesLib.h>
  24. #include <Library/PcdLib.h>
  25. EFI_STATUS
  26. EFIAPI
  27. InitializePlatformPeim (
  28. IN EFI_PEI_FILE_HANDLE FileHandle,
  29. IN CONST EFI_PEI_SERVICES **PeiServices
  30. );
  31. EFI_STATUS
  32. EFIAPI
  33. PlatformPeim (
  34. VOID
  35. );
  36. //
  37. // Module globals
  38. //
  39. CONST EFI_PEI_PPI_DESCRIPTOR mPpiListBootMode = {
  40. (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
  41. &gEfiPeiMasterBootModePpiGuid,
  42. NULL
  43. };
  44. CONST EFI_PEI_PPI_DESCRIPTOR mPpiListRecoveryBootMode = {
  45. (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
  46. &gEfiPeiBootInRecoveryModePpiGuid,
  47. NULL
  48. };
  49. /*++
  50. Routine Description:
  51. Arguments:
  52. FileHandle - Handle of the file being invoked.
  53. PeiServices - Describes the list of possible PEI Services.
  54. Returns:
  55. Status - EFI_SUCCESS if the boot mode could be set
  56. --*/
  57. EFI_STATUS
  58. EFIAPI
  59. InitializePlatformPeim (
  60. IN EFI_PEI_FILE_HANDLE FileHandle,
  61. IN CONST EFI_PEI_SERVICES **PeiServices
  62. )
  63. {
  64. EFI_STATUS Status;
  65. EFI_BOOT_MODE BootMode;
  66. DEBUG ((EFI_D_LOAD | EFI_D_INFO, "Platform PEIM Loaded\n"));
  67. Status = PeiServicesSetBootMode (ArmPlatformGetBootMode ());
  68. ASSERT_EFI_ERROR (Status);
  69. PlatformPeim ();
  70. Status = PeiServicesGetBootMode (&BootMode);
  71. ASSERT_EFI_ERROR (Status);
  72. Status = PeiServicesInstallPpi (&mPpiListBootMode);
  73. ASSERT_EFI_ERROR (Status);
  74. if (BootMode == BOOT_IN_RECOVERY_MODE) {
  75. Status = PeiServicesInstallPpi (&mPpiListRecoveryBootMode);
  76. ASSERT_EFI_ERROR (Status);
  77. }
  78. return Status;
  79. }