diff options
-rw-r--r-- | MdeModulePkg/Core/Pei/PeiMain.h | 1 | ||||
-rw-r--r-- | MdeModulePkg/Core/Pei/PeiMain.inf | 1 | ||||
-rw-r--r-- | MdeModulePkg/Core/Pei/PeiMain/PeiMain.c | 34 |
3 files changed, 36 insertions, 0 deletions
diff --git a/MdeModulePkg/Core/Pei/PeiMain.h b/MdeModulePkg/Core/Pei/PeiMain.h index 156c6b2..37aca73 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.h +++ b/MdeModulePkg/Core/Pei/PeiMain.h @@ -37,6 +37,7 @@ Revision History #include <Ppi/GuidedSectionExtraction.h>
#include <Ppi/LoadFile.h>
#include <Ppi/Security2.h>
+#include <Ppi/SecPlatformInformation.h>
#include <Library/DebugLib.h>
#include <Library/PeiCoreEntryPoint.h>
#include <Library/BaseLib.h>
diff --git a/MdeModulePkg/Core/Pei/PeiMain.inf b/MdeModulePkg/Core/Pei/PeiMain.inf index a954cad..392a548 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.inf +++ b/MdeModulePkg/Core/Pei/PeiMain.inf @@ -96,6 +96,7 @@ gEfiPeiFirmwareVolumeInfoPpiGuid
gEfiPeiLoadFilePpiGuid
gEfiPeiSecurity2PpiGuid
+ gEfiSecPlatformInformationPpiGuid
[FixedPcd.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxFvSupported
diff --git a/MdeModulePkg/Core/Pei/PeiMain/PeiMain.c b/MdeModulePkg/Core/Pei/PeiMain/PeiMain.c index 4dd7f26..d7b5807 100644 --- a/MdeModulePkg/Core/Pei/PeiMain/PeiMain.c +++ b/MdeModulePkg/Core/Pei/PeiMain/PeiMain.c @@ -122,6 +122,9 @@ Returns: PEI_CORE_INSTANCE *OldCoreData;
EFI_PEI_CPU_IO_PPI *CpuIo;
EFI_PEI_PCI_CFG2_PPI *PciCfg;
+ UINT64 SecPlatformInfoRecordSize;
+ EFI_SEC_PLATFORM_INFORMATION_PPI *SecPlatformInfoPpi;
+ EFI_SEC_PLATFORM_INFORMATION_RECORD *SecPlatformInfoRecord;
mTick = 0;
OldCoreData = (PEI_CORE_INSTANCE *) Data;
@@ -234,6 +237,37 @@ Returns: if (PpiList != NULL) {
Status = PeiServicesInstallPpi (PpiList);
ASSERT_EFI_ERROR (Status);
+
+ //
+ // PI spec Vol 1, 7.3.1 specifies that this same information reported by EFI_SEC_PLATFORM_INFORMATION_PPI
+ // will be placed in a GUIDed HOB with the PPI GUID as the HOB GUID for HOB consumer phase.
+ //
+ Status = PeiServicesLocatePpi (
+ &gEfiSecPlatformInformationPpiGuid,
+ 0,
+ NULL,
+ (VOID **) &SecPlatformInfoPpi
+ );
+ if (!EFI_ERROR (Status)) {
+ SecPlatformInfoRecord = AllocateZeroPool (sizeof(*SecPlatformInfoRecord));
+ ASSERT (SecPlatformInfoRecord != NULL);
+
+ SecPlatformInfoRecordSize = sizeof(*SecPlatformInfoRecord);
+
+ Status = SecPlatformInfoPpi->PlatformInformation (
+ (CONST EFI_PEI_SERVICES **) GetPeiServicesTablePointer (),
+ &SecPlatformInfoRecordSize,
+ SecPlatformInfoRecord
+ );
+
+ if (!EFI_ERROR (Status)) {
+ BuildGuidDataHob (
+ &gEfiSecPlatformInformationPpiGuid,
+ SecPlatformInfoRecord,
+ sizeof (*SecPlatformInfoRecord)
+ );
+ }
+ }
}
}
|