NetworkPkg/SnpDxe: Shutdown SnpDxe on BeforeExitBootServices Event.

SnpDxe registers for an ExitBootServices callback and runs the
PXE_OPCODE_SHUTDOWN and PXE_OPCODE_STOP commands for any network
controllers that the driver is attached to.

Register the SnpDxe callback for gEfiEventBeforeExitBootServicesGuid
instead of gEfiEventExitBootServicesGuid to ensure the correct ordering:

1. ExitBootServices event
2. Network card shutdown sequence is completed

Also, close the event to prevent rerunning the shutdown if multiple
ExitBootServices events need to be called by the OS.

Signed-off-by: Aaron Pop <aaronpop@microsoft.com>
This commit is contained in:
joe 2023-08-14 15:27:08 -07:00 committed by mergify[bot]
parent c1548908c9
commit 89d413731d
2 changed files with 6 additions and 2 deletions

View File

@ -32,6 +32,10 @@ SnpNotifyExitBootServices (
//
PxeShutdown (Snp);
PxeStop (Snp);
// Since BeforeExitBootServices is run on each call, close event
// to prevent reentry.
gBS->CloseEvent (Event);
}
/**
@ -655,7 +659,7 @@ SimpleNetworkDriverStart (
TPL_CALLBACK,
SnpNotifyExitBootServices,
Snp,
&gEfiEventExitBootServicesGuid,
&gEfiEventBeforeExitBootServicesGuid,
&Snp->ExitBootServicesEvent
);
if (EFI_ERROR (Status)) {

View File

@ -65,7 +65,7 @@
NetLib
[Guids]
gEfiEventExitBootServicesGuid ## SOMETIMES_CONSUMES ## Event
gEfiEventBeforeExitBootServicesGuid ## SOMETIMES_CONSUMES ## Event
[Protocols]
gEfiSimpleNetworkProtocolGuid ## BY_START