\r
#include <PeiMain.h>\r
\r
-//\r
-//CAR is filled with this initial value during SEC phase\r
-//\r
-#define INIT_CAR_VALUE 0x5AA55AA5\r
-\r
static EFI_PEI_PPI_DESCRIPTOR mMemoryDiscoveredPpi = {\r
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
&gEfiPeiMemoryDiscoveredPpiGuid,\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
+ PEI_CORE_ENTRY_POINT ShadowedPeiCore;\r
\r
mTick = 0;\r
OldCoreData = (PEI_CORE_INSTANCE *) Data;\r
}\r
}\r
\r
- //\r
- // For IPF in CAR mode the real memory access is uncached,in InstallPeiMemory()\r
- // the 63-bit of address is set to 1.\r
- //\r
- SWITCH_TO_CACHE_MODE (OldCoreData);\r
-\r
if (OldCoreData != NULL) {\r
+ ShadowedPeiCore = (PEI_CORE_ENTRY_POINT) (UINTN) OldCoreData->ShadowedPeiCore;\r
+ if (ShadowedPeiCore != NULL) {\r
+ OldCoreData->ShadowedPeiCore = NULL;\r
+ ShadowedPeiCore (\r
+ SecCoreData,\r
+ PpiList,\r
+ OldCoreData\r
+ );\r
+ }\r
+\r
CopyMem (&PrivateData, OldCoreData, sizeof (PEI_CORE_INSTANCE));\r
\r
CpuIo = (VOID*)PrivateData.ServiceTableShadow.CpuIo;\r
PERF_END (NULL,"PreMem", NULL, 0);\r
PERF_START (NULL,"PostMem", NULL, 0);\r
\r
- //\r
- // The following code dumps out interesting cache as RAM usage information\r
- // so we can keep tabs on how the cache as RAM is being utilized. The\r
- // DEBUG_CODE_BEGIN macro is used to prevent this code from being compiled\r
- // on a debug build.\r
- //\r
- DEBUG_CODE_BEGIN ();\r
- UINTN *StackPointer;\r
- UINTN StackValue;\r
-\r
- StackValue = INIT_CAR_VALUE;\r
- for (StackPointer = (UINTN *) OldCoreData->MaxTopOfCarHeap;\r
- ((UINTN) StackPointer < ((UINTN) OldCoreData->BottomOfCarHeap + OldCoreData->SizeOfCacheAsRam))\r
- && StackValue == INIT_CAR_VALUE;\r
- StackPointer++) {\r
- StackValue = *StackPointer;\r
- }\r
-\r
- DEBUG ((EFI_D_INFO, "Total Cache as RAM: %d bytes.\n", OldCoreData->SizeOfCacheAsRam));\r
- DEBUG ((EFI_D_INFO, " CAR stack ever used: %d bytes.\n",\r
- ((UINTN) OldCoreData->TopOfCarHeap - (UINTN) StackPointer)\r
- ));\r
- DEBUG ((EFI_D_INFO, " CAR heap used: %d bytes.\n",\r
- ((UINTN) OldCoreData->HobList.HandoffInformationTable->EfiFreeMemoryBottom -\r
- (UINTN) OldCoreData->HobList.Raw)\r
- ));\r
- DEBUG_CODE_END ();\r
-\r
//\r
// Alert any listeners that there is permanent memory available\r
//\r
//\r
REPORT_STATUS_CODE (\r
EFI_PROGRESS_CODE,\r
- EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT\r
+ FixedPcdGet32 (PcdStatusCodeValuePeiCoreEntry)\r
);\r
\r
PERF_START (NULL,"PEI", NULL, mTick);\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
return EFI_NOT_FOUND;\r
}\r
\r
+\r