#include <Ppi/GuidedSectionExtraction.h>\r
#include <Ppi/LoadFile.h>\r
#include <Ppi/Security2.h>\r
+#include <Ppi/SecPlatformInformation.h>\r
#include <Library/DebugLib.h>\r
#include <Library/PeiCoreEntryPoint.h>\r
#include <Library/BaseLib.h>\r
PEI_CORE_INSTANCE *OldCoreData;\r
EFI_PEI_CPU_IO_PPI *CpuIo;\r
EFI_PEI_PCI_CFG2_PPI *PciCfg;\r
+ UINT64 SecPlatformInfoRecordSize;\r
+ EFI_SEC_PLATFORM_INFORMATION_PPI *SecPlatformInfoPpi;\r
+ EFI_SEC_PLATFORM_INFORMATION_RECORD *SecPlatformInfoRecord;\r
\r
mTick = 0;\r
OldCoreData = (PEI_CORE_INSTANCE *) Data;\r
if (PpiList != NULL) {\r
Status = PeiServicesInstallPpi (PpiList);\r
ASSERT_EFI_ERROR (Status);\r
+ \r
+ //\r
+ // PI spec Vol 1, 7.3.1 specifies that this same information reported by EFI_SEC_PLATFORM_INFORMATION_PPI\r
+ // will be placed in a GUIDed HOB with the PPI GUID as the HOB GUID for HOB consumer phase.\r
+ //\r
+ Status = PeiServicesLocatePpi (\r
+ &gEfiSecPlatformInformationPpiGuid,\r
+ 0,\r
+ NULL,\r
+ (VOID **) &SecPlatformInfoPpi\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ SecPlatformInfoRecord = AllocateZeroPool (sizeof(*SecPlatformInfoRecord));\r
+ ASSERT (SecPlatformInfoRecord != NULL);\r
+\r
+ SecPlatformInfoRecordSize = sizeof(*SecPlatformInfoRecord);\r
+ \r
+ Status = SecPlatformInfoPpi->PlatformInformation (\r
+ (CONST EFI_PEI_SERVICES **) GetPeiServicesTablePointer (),\r
+ &SecPlatformInfoRecordSize,\r
+ SecPlatformInfoRecord\r
+ );\r
+ \r
+ if (!EFI_ERROR (Status)) {\r
+ BuildGuidDataHob (\r
+ &gEfiSecPlatformInformationPpiGuid,\r
+ SecPlatformInfoRecord,\r
+ sizeof (*SecPlatformInfoRecord)\r
+ );\r
+ }\r
+ }\r
}\r
}\r
\r