From: Ard Biesheuvel <a...@kernel.org> In addition to setting up the home grown reset notification, register with the generic EFI protocol that does the same. This event is triggered from the reset runtime implemented in MdeModulePkg, to which we will be switching the RPi platforms in a subsequent patch.
Signed-off-by: Ard Biesheuvel <a...@kernel.org> --- Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.inf | 1 + Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.c | 35 ++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.inf b/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.inf index c2edb25bd41d..43a2b06022c8 100644 --- a/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.inf +++ b/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.inf @@ -61,6 +61,7 @@ [Protocols] gEfiBlockIoProtocolGuid gEfiFirmwareVolumeBlockProtocolGuid # PROTOCOL SOMETIMES_PRODUCED gEfiDevicePathProtocolGuid # PROTOCOL SOMETIMES_PRODUCED + gEfiResetNotificationProtocolGuid [FixedPcd] gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize diff --git a/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.c b/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.c index 6bd026a7b763..3aa2ec76cae7 100644 --- a/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.c +++ b/Platform/RaspberryPi/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.c @@ -10,6 +10,8 @@ #include "VarBlockService.h" +#include <Protocol/ResetNotification.h> + // // Minimum delay to enact before reset, when variables are dirty (in μs). // Needed to ensure that SSD-based USB 3.0 devices have time to flush their @@ -209,6 +211,19 @@ DumpVarsOnEvent ( DumpVars (); } +STATIC +VOID +EFIAPI +DumpVarsOnReset ( + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL + ) +{ + DumpVars (); +} + VOID ReadyToBootHandler ( IN EFI_EVENT Event, @@ -246,9 +261,10 @@ InstallDumpVarEventHandlers ( VOID ) { - EFI_STATUS Status; - EFI_EVENT ResetEvent; - EFI_EVENT ReadyToBootEvent; + EFI_STATUS Status; + EFI_EVENT ResetEvent; + EFI_EVENT ReadyToBootEvent; + EFI_RESET_NOTIFICATION_PROTOCOL *ResetNotify; Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, @@ -269,6 +285,19 @@ InstallDumpVarEventHandlers ( &ReadyToBootEvent ); ASSERT_EFI_ERROR (Status); + + Status = gBS->LocateProtocol ( + &gEfiResetNotificationProtocolGuid, + NULL, + (VOID **)&ResetNotify + ); + if (!EFI_ERROR (Status)) { + Status = ResetNotify->RegisterResetNotify ( + ResetNotify, + DumpVarsOnReset + ); + ASSERT_EFI_ERROR (Status); + } } -- 2.46.0.rc1.232.g9752f9e123-goog -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#120096): https://edk2.groups.io/g/devel/message/120096 Mute This Topic: https://groups.io/mt/107628960/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-