#include "DxeIpl.h"\r
#include "VirtualMemory.h"\r
\r
-//
+//\r
// Global Descriptor Table (GDT)
//
GLOBAL_REMOVE_IF_UNREFERENCED IA32_GDT gGdtEntries [] = {\r
VOID\r
HandOffToDxeCore (\r
IN EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint,\r
- IN EFI_PEI_HOB_POINTERS HobList\r
+ IN EFI_PEI_HOB_POINTERS HobList,\r
+ IN EFI_PEI_PPI_DESCRIPTOR *EndOfPeiSignal\r
)\r
{\r
EFI_STATUS Status;\r
// Create page table and save PageMapLevel4 to CR3\r
//\r
PageTables = CreateIdentityMappingPageTables ();\r
+\r
+ //\r
+ // End of PEI phase singal\r
+ //\r
+ Status = PeiServicesInstallPpi (EndOfPeiSignal);\r
+ ASSERT_EFI_ERROR (Status);\r
+ \r
AsmWriteCr3 (PageTables);\r
//\r
// Go to Long Mode. Interrupts will not get turned on until the CPU AP is loaded.\r
TopOfStack = BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT;\r
TopOfStack = (EFI_PHYSICAL_ADDRESS) (UINTN) ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);\r
\r
+ //\r
+ // End of PEI phase singal\r
+ //\r
+ Status = PeiServicesInstallPpi (EndOfPeiSignal);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
SwitchStack (\r
(SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,\r
HobList.Raw,\r