summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Core
diff options
context:
space:
mode:
Diffstat (limited to 'MdeModulePkg/Core')
-rw-r--r--MdeModulePkg/Core/Pei/PeiMain.h1
-rw-r--r--MdeModulePkg/Core/Pei/PeiMain.inf1
-rw-r--r--MdeModulePkg/Core/Pei/PeiMain/PeiMain.c34
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)
+ );
+ }
+ }
}
}