summaryrefslogtreecommitdiffstats
path: root/EdkModulePkg/Core/Dxe/DxeMain/DxeMain.c
diff options
context:
space:
mode:
Diffstat (limited to 'EdkModulePkg/Core/Dxe/DxeMain/DxeMain.c')
-rw-r--r--EdkModulePkg/Core/Dxe/DxeMain/DxeMain.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/EdkModulePkg/Core/Dxe/DxeMain/DxeMain.c b/EdkModulePkg/Core/Dxe/DxeMain/DxeMain.c
index 5e5b95af38..6b1f084e77 100644
--- a/EdkModulePkg/Core/Dxe/DxeMain/DxeMain.c
+++ b/EdkModulePkg/Core/Dxe/DxeMain/DxeMain.c
@@ -157,7 +157,7 @@ EFI_METRONOME_ARCH_PROTOCOL *gMetronome = NULL;
EFI_TIMER_ARCH_PROTOCOL *gTimer = NULL;
EFI_BDS_ARCH_PROTOCOL *gBds = NULL;
EFI_WATCHDOG_TIMER_ARCH_PROTOCOL *gWatchdogTimer = NULL;
-EFI_RUNTIME_ARCH_PROTOCOL *gRuntime = NULL;
+
//
// BugBug: I'n not runtime, but is the PPI?
@@ -324,6 +324,26 @@ EFI_RUNTIME_SERVICES mEfiRuntimeServicesTableTemplate = {
#endif
};
+EFI_RUNTIME_ARCH_PROTOCOL gRuntimeTemplate = {
+ INITIALIZE_LIST_HEAD_VARIABLE (gRuntimeTemplate.ImageHead),
+ INITIALIZE_LIST_HEAD_VARIABLE (gRuntimeTemplate.EventHead),
+
+ //
+ // Make sure Size != sizeof (EFI_MEMORY_DESCRIPTOR). This will
+ // prevent people from having pointer math bugs in their code.
+ // now you have to use *DescriptorSize to make things work.
+ //
+ sizeof (EFI_MEMORY_DESCRIPTOR) + sizeof (UINT64) - (sizeof (EFI_MEMORY_DESCRIPTOR) % sizeof (UINT64)),
+ EFI_MEMORY_DESCRIPTOR_VERSION,
+ 0,
+ NULL,
+ NULL,
+ FALSE,
+ FALSE
+};
+
+EFI_RUNTIME_ARCH_PROTOCOL *gRuntime = &gRuntimeTemplate;
+
//
// DXE Core Global Variables for the EFI System Table, Boot Services Table,
// DXE Services Table, and Runtime Services Table
@@ -886,11 +906,11 @@ CoreExitBootServices (
Routine Description:
- EFI 1.0 API to terminate Boot Services
+ Terminates all boot services.
Arguments:
- ImageHandle - Handle that represents the identity of the calling image
+ ImageHandle - Handle that identifies the exiting image.
MapKey -Key to the latest memory map.
@@ -927,16 +947,6 @@ Returns:
gCpu->DisableInterrupt (gCpu);
//
- // Register Runtime events with the Runtime Architectural Protocol
- //
- CoreShutdownEventServices ();
-
- //
- // Register Runtime images with the Runtime Architectural Protocol
- //
- CoreShutdownImageServices ();
-
- //
// Report that ExitBootServices() has been called
//
// We are using gEfiDxeServicesTableGuid as the caller ID for Dxe Core
@@ -964,7 +974,12 @@ Returns:
//
SetMem (gBS, sizeof (EFI_BOOT_SERVICES), 0);
gBS = NULL;
-
+
+ //
+ // Update the AtRuntime field in Runtiem AP.
+ //
+ gRuntime->AtRuntime = TRUE;
+
return Status;
}