diff --git a/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3Save.c b/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3Save.c index ac3e9470bd..e0fa866535 100644 --- a/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3Save.c +++ b/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3Save.c @@ -28,6 +28,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include @@ -549,6 +550,40 @@ S3Ready ( return EFI_SUCCESS; } +/** + Callback function executed when the EndOfDxe event group is signaled. + + @param[in] Event Event whose notification function is being invoked. + @param[in] Context The pointer to the notification function's context, which + is implementation-dependent. +**/ +VOID +EFIAPI +OnEndOfDxe ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + EFI_STATUS Status; + + // + // Our S3Ready() function ignores both of its parameters, and always + // succeeds. + // + Status = S3Ready ( + NULL, // This + NULL // LegacyMemoryAddress + ); + ASSERT_EFI_ERROR (Status); + + // + // Close the event, deregistering the callback and freeing resources. + // + Status = gBS->CloseEvent (Event); + ASSERT_EFI_ERROR (Status); +} + + /** The Driver Entry Point. @@ -570,6 +605,7 @@ InstallAcpiS3Save ( ) { EFI_STATUS Status; + EFI_EVENT EndOfDxeEvent; if (!FeaturePcdGet(PcdPlatformCsmSupport)) { // @@ -591,5 +627,15 @@ InstallAcpiS3Save ( &mS3Save ); ASSERT_EFI_ERROR (Status); + + Status = gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + OnEndOfDxe, + NULL, /* NotifyContext */ + &gEfiEndOfDxeEventGroupGuid, + &EndOfDxeEvent + ); + ASSERT_EFI_ERROR (Status); return Status; } diff --git a/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf b/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf index c5dec0546a..e5fb92e4c5 100644 --- a/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf +++ b/IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf @@ -60,6 +60,7 @@ ## SOMETIMES_CONSUMES ## Variable:L"AcpiGlobalVariable" ## SOMETIMES_PRODUCES ## Variable:L"AcpiGlobalVariable" gEfiAcpiVariableCompatiblityGuid + gEfiEndOfDxeEventGroupGuid ## CONSUMES ## Event [Protocols] gEfiAcpiS3SaveProtocolGuid ## PRODUCES