In original DxeIpl64 PEIM, Creating page table is performed before sending End Of...
authorrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 22 Dec 2006 03:13:56 +0000 (03:13 +0000)
committerrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 22 Dec 2006 03:13:56 +0000 (03:13 +0000)
This fix revert to the way of original DxeIpl64.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2129 6f19259b-4bc3-4df7-8a09-765794883524

EdkModulePkg/Core/DxeIplPeim/DxeIpl.h
EdkModulePkg/Core/DxeIplPeim/DxeLoad.c
EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c
EdkModulePkg/Core/DxeIplPeim/Ipf/DxeLoadFunc.c
EdkModulePkg/Core/DxeIplPeim/X64/DxeLoadFunc.c

index eadcffa..2c711ed 100644 (file)
@@ -89,7 +89,8 @@ DxeLoadCore (
 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\r
index 6a4c53b..53be7d9 100644 (file)
@@ -241,14 +241,6 @@ Returns:
              );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  //\r
-  // Transfer control to the DXE Core\r
-  // The handoff state is simply a pointer to the HOB list\r
-  //\r
-\r
-  Status = PeiServicesInstallPpi (&mPpiSignal);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
   //\r
   // Add HOB for the DXE Core\r
   //\r
@@ -309,8 +301,13 @@ Returns:
       );\r
   }\r
 \r
+  //\r
+  // Transfer control to the DXE Core\r
+  // The handoff state is simply a pointer to the HOB list\r
+  //\r
+\r
   DEBUG ((EFI_D_INFO, "DXE Core Entry Point 0x%08x\n", (UINTN) DxeCoreEntryPoint));\r
-  HandOffToDxeCore (DxeCoreEntryPoint, HobList);\r
+  HandOffToDxeCore (DxeCoreEntryPoint, HobList, &mPpiSignal);\r
   //\r
   // If we get here, then the DXE Core returned.  This is an error\r
   // Dxe Core should not return.\r
index f66798e..7c9beff 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
index e53f708..ea88b77 100644 (file)
@@ -24,7 +24,8 @@ Abstract:
 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
   VOID                *BaseOfStack;\r
@@ -54,6 +55,12 @@ HandOffToDxeCore (
   TopOfStack = (VOID *) ((UINTN) BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT);\r
   TopOfStack = 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
   AsmSwitchStackAndBackingStore (\r
     (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,\r
     HobList.Raw,\r
index 02de149..83b00bb 100644 (file)
@@ -24,7 +24,8 @@ Abstract:
 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
   VOID                *BaseOfStack;\r
@@ -43,6 +44,12 @@ HandOffToDxeCore (
   TopOfStack = (VOID *) ((UINTN) BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT);\r
   TopOfStack = 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