]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c
In original DxeIpl64 PEIM, Creating page table is performed before sending End Of...
[mirror_edk2.git] / EdkModulePkg / Core / DxeIplPeim / Ia32 / DxeLoadFunc.c
index f66798ed56a9a44a2994e2bbdf3abadda18437c5..7c9beff5f6cf35950e11c81dfb1794d39037e782 100644 (file)
@@ -22,7 +22,7 @@ Abstract:
 #include "DxeIpl.h"\r
 #include "VirtualMemory.h"\r
 \r
-//
+//\r
 // Global Descriptor Table (GDT)
 //
 GLOBAL_REMOVE_IF_UNREFERENCED IA32_GDT gGdtEntries [] = {\r
@@ -49,7 +49,8 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST IA32_DESCRIPTOR gGdt = {
 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
@@ -86,6 +87,13 @@ HandOffToDxeCore (
     // 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
@@ -106,6 +114,12 @@ HandOffToDxeCore (
     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