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
);\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
);\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
#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
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
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
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
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