diff --git a/NetworkPkg/NetworkPkg.dec b/NetworkPkg/NetworkPkg.dec index 944b1d1501..66e500cbea 100644 --- a/NetworkPkg/NetworkPkg.dec +++ b/NetworkPkg/NetworkPkg.dec @@ -109,6 +109,13 @@ # @Prompt TFTP block size. gEfiNetworkPkgTokenSpaceGuid.PcdTftpBlockSize|0x0|UINT64|0x1000000B + ## Indicates whether SnpDxe driver will create an event that will be notified + # upon gBS->ExitBootServices() call. + # TRUE - Event being triggered upon ExitBootServices call will be created + # FALSE - Event being triggered upon ExitBootServices call will NOT be created + # @Prompt Indicates whether SnpDxe creates event for ExitBootServices() call. + gEfiNetworkPkgTokenSpaceGuid.PcdSnpCreateExitBootServicesEvent|TRUE|BOOLEAN|0x1000000C + [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx] ## IPv6 DHCP Unique Identifier (DUID) Type configuration (From RFCs 3315 and 6355). # 01 = DUID Based on Link-layer Address Plus Time [DUID-LLT] diff --git a/NetworkPkg/SnpDxe/Snp.c b/NetworkPkg/SnpDxe/Snp.c index a23af05078..9fb007f7ae 100644 --- a/NetworkPkg/SnpDxe/Snp.c +++ b/NetworkPkg/SnpDxe/Snp.c @@ -1,7 +1,7 @@ /** @file Implementation of driver entry point and driver binding protocol. -Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -647,19 +647,21 @@ SimpleNetworkDriverStart ( PxeShutdown (Snp); PxeStop (Snp); - // - // Create EXIT_BOOT_SERIVES Event - // - Status = gBS->CreateEventEx ( - EVT_NOTIFY_SIGNAL, - TPL_NOTIFY, - SnpNotifyExitBootServices, - Snp, - &gEfiEventExitBootServicesGuid, - &Snp->ExitBootServicesEvent - ); - if (EFI_ERROR (Status)) { - goto Error_DeleteSNP; + if (FixedPcdGetBool (PcdSnpCreateExitBootServicesEvent)) { + // + // Create EXIT_BOOT_SERIVES Event + // + Status = gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_NOTIFY, + SnpNotifyExitBootServices, + Snp, + &gEfiEventExitBootServicesGuid, + &Snp->ExitBootServicesEvent + ); + if (EFI_ERROR (Status)) { + goto Error_DeleteSNP; + } } // @@ -778,10 +780,12 @@ SimpleNetworkDriverStop ( return Status; } - // - // Close EXIT_BOOT_SERIVES Event - // - gBS->CloseEvent (Snp->ExitBootServicesEvent); + if (FixedPcdGetBool (PcdSnpCreateExitBootServicesEvent)) { + // + // Close EXIT_BOOT_SERIVES Event + // + gBS->CloseEvent (Snp->ExitBootServicesEvent); + } Status = gBS->CloseProtocol ( Controller, diff --git a/NetworkPkg/SnpDxe/Snp.h b/NetworkPkg/SnpDxe/Snp.h index e6b6293039..9e4b7d6f86 100644 --- a/NetworkPkg/SnpDxe/Snp.h +++ b/NetworkPkg/SnpDxe/Snp.h @@ -1,7 +1,7 @@ /** @file Declaration of strctures and functions for SnpDxe driver. -Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -26,6 +26,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include +#include #include #include diff --git a/NetworkPkg/SnpDxe/SnpDxe.inf b/NetworkPkg/SnpDxe/SnpDxe.inf index afeb1526cc..d16f1888b3 100644 --- a/NetworkPkg/SnpDxe/SnpDxe.inf +++ b/NetworkPkg/SnpDxe/SnpDxe.inf @@ -4,7 +4,7 @@ # This module produces Simple Network Protocol upon EFI Network Interface # Identifier Protocol, to provide a packet level interface to a network adapter. # -# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -73,5 +73,8 @@ gEfiNetworkInterfaceIdentifierProtocolGuid_31 ## TO_START gEfiPciIoProtocolGuid ## TO_START +[Pcd] + gEfiNetworkPkgTokenSpaceGuid.PcdSnpCreateExitBootServicesEvent ## CONSUMES + [UserExtensions.TianoCore."ExtraFiles"] SnpDxeExtra.uni