CpuFeaturesPei.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /** @file
  2. CPU Features PEIM driver to initialize CPU features.
  3. Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include <PiPei.h>
  7. #include <Library/BaseLib.h>
  8. #include <Library/DebugLib.h>
  9. #include <Library/PeiServicesLib.h>
  10. #include <Library/RegisterCpuFeaturesLib.h>
  11. #include <Library/HobLib.h>
  12. #include <Guid/CpuFeaturesInitDone.h>
  13. EFI_PEI_PPI_DESCRIPTOR mPeiCpuFeaturesInitDonePpiDesc = {
  14. (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
  15. &gEdkiiCpuFeaturesInitDoneGuid,
  16. NULL
  17. };
  18. /**
  19. CPU Features driver entry point function.
  20. It will perform CPU features initialization, except for
  21. PcdCpuFeaturesInitOnS3Resume is FALSE on S3 resume.
  22. @param FileHandle Handle of the file being invoked.
  23. @param PeiServices Describes the list of possible PEI Services.
  24. @retval EFI_SUCCESS CPU Features is initialized successfully.
  25. **/
  26. EFI_STATUS
  27. EFIAPI
  28. CpuFeaturesPeimInitialize (
  29. IN EFI_PEI_FILE_HANDLE FileHandle,
  30. IN CONST EFI_PEI_SERVICES **PeiServices
  31. )
  32. {
  33. EFI_STATUS Status;
  34. EFI_BOOT_MODE BootMode;
  35. Status = PeiServicesGetBootMode (&BootMode);
  36. ASSERT_EFI_ERROR (Status);
  37. if ((BootMode == BOOT_ON_S3_RESUME) &&
  38. !PcdGetBool (PcdCpuFeaturesInitOnS3Resume))
  39. {
  40. //
  41. // Does nothing when if PcdCpuFeaturesInitOnS3Resume is FLASE
  42. // on S3 boot mode
  43. //
  44. return EFI_SUCCESS;
  45. }
  46. CpuFeaturesDetect ();
  47. CpuFeaturesInitialize ();
  48. //
  49. // Install CPU Features Init Done PPI
  50. //
  51. Status = PeiServicesInstallPpi (&mPeiCpuFeaturesInitDonePpiDesc);
  52. ASSERT_EFI_ERROR (Status);
  53. //
  54. // Build HOB to let CpuFeatureDxe driver skip the initialization process.
  55. //
  56. BuildGuidHob (&gEdkiiCpuFeaturesInitDoneGuid, 0);
  57. return EFI_SUCCESS;
  58. }