| /** @file | |
| CPU Features PEIM driver to initialize CPU features. | |
| Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #include <PiPei.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/PeiServicesLib.h> | |
| #include <Library/RegisterCpuFeaturesLib.h> | |
| #include <Library/HobLib.h> | |
| #include <Guid/CpuFeaturesInitDone.h> | |
| EFI_PEI_PPI_DESCRIPTOR mPeiCpuFeaturesInitDonePpiDesc = { | |
| (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), | |
| &gEdkiiCpuFeaturesInitDoneGuid, | |
| NULL | |
| }; | |
| /** | |
| CPU Features driver entry point function. | |
| It will perform CPU features initialization, except for | |
| PcdCpuFeaturesInitOnS3Resume is FALSE on S3 resume. | |
| @param FileHandle Handle of the file being invoked. | |
| @param PeiServices Describes the list of possible PEI Services. | |
| @retval EFI_SUCCESS CPU Features is initialized successfully. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| CpuFeaturesPeimInitialize ( | |
| IN EFI_PEI_FILE_HANDLE FileHandle, | |
| IN CONST EFI_PEI_SERVICES **PeiServices | |
| ) | |
| { | |
| EFI_STATUS Status; | |
| EFI_BOOT_MODE BootMode; | |
| Status = PeiServicesGetBootMode (&BootMode); | |
| ASSERT_EFI_ERROR (Status); | |
| if ((BootMode == BOOT_ON_S3_RESUME) && | |
| !PcdGetBool (PcdCpuFeaturesInitOnS3Resume)) | |
| { | |
| // | |
| // Does nothing when if PcdCpuFeaturesInitOnS3Resume is FLASE | |
| // on S3 boot mode | |
| // | |
| return EFI_SUCCESS; | |
| } | |
| CpuFeaturesDetect (); | |
| CpuFeaturesInitialize (); | |
| // | |
| // Install CPU Features Init Done PPI | |
| // | |
| Status = PeiServicesInstallPpi (&mPeiCpuFeaturesInitDonePpiDesc); | |
| ASSERT_EFI_ERROR (Status); | |
| // | |
| // Build HOB to let CpuFeatureDxe driver skip the initialization process. | |
| // | |
| BuildGuidHob (&gEdkiiCpuFeaturesInitDoneGuid, 0); | |
| return EFI_SUCCESS; | |
| } |