X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FCore%2FDxeIplPeim%2FIa32%2FDxeLoadFunc.c;fp=EdkModulePkg%2FCore%2FDxeIplPeim%2FIa32%2FDxeLoadFunc.c;h=7c9beff5f6cf35950e11c81dfb1794d39037e782;hp=f66798ed56a9a44a2994e2bbdf3abadda18437c5;hb=3d109491d637eeb71df8278700b0e1b1863444d3;hpb=ed09422e6b32d60f0591c1dcd41146472585378d diff --git a/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c b/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c index f66798ed56..7c9beff5f6 100644 --- a/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c +++ b/EdkModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c @@ -22,7 +22,7 @@ Abstract: #include "DxeIpl.h" #include "VirtualMemory.h" -// +// // Global Descriptor Table (GDT) // GLOBAL_REMOVE_IF_UNREFERENCED IA32_GDT gGdtEntries [] = { @@ -49,7 +49,8 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST IA32_DESCRIPTOR gGdt = { VOID HandOffToDxeCore ( IN EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint, - IN EFI_PEI_HOB_POINTERS HobList + IN EFI_PEI_HOB_POINTERS HobList, + IN EFI_PEI_PPI_DESCRIPTOR *EndOfPeiSignal ) { EFI_STATUS Status; @@ -86,6 +87,13 @@ HandOffToDxeCore ( // Create page table and save PageMapLevel4 to CR3 // PageTables = CreateIdentityMappingPageTables (); + + // + // End of PEI phase singal + // + Status = PeiServicesInstallPpi (EndOfPeiSignal); + ASSERT_EFI_ERROR (Status); + AsmWriteCr3 (PageTables); // // Go to Long Mode. Interrupts will not get turned on until the CPU AP is loaded. @@ -106,6 +114,12 @@ HandOffToDxeCore ( TopOfStack = BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT; TopOfStack = (EFI_PHYSICAL_ADDRESS) (UINTN) ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT); + // + // End of PEI phase singal + // + Status = PeiServicesInstallPpi (EndOfPeiSignal); + ASSERT_EFI_ERROR (Status); + SwitchStack ( (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint, HobList.Raw,