summaryrefslogtreecommitdiff
path: root/edk2/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
diff options
context:
space:
mode:
Diffstat (limited to 'edk2/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c')
-rw-r--r--edk2/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/edk2/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c b/edk2/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
index 5f693729d..183dc0ced 100644
--- a/edk2/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
+++ b/edk2/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
@@ -2348,6 +2348,15 @@ EfiPxeLoadFile (
// Start Pxe Base Code to initialize PXE boot.
//
Status = PxeBc->Start (PxeBc, UsingIpv6);
+ if (Status == EFI_ALREADY_STARTED && UsingIpv6 != PxeBc->Mode->UsingIpv6) {
+ //
+ // PxeBc protocol has already been started but not on the required IP version, restart it.
+ //
+ Status = PxeBc->Stop (PxeBc);
+ if (!EFI_ERROR (Status)) {
+ Status = PxeBc->Start (PxeBc, UsingIpv6);
+ }
+ }
if (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED) {
Status = PxeBcLoadBootFile (Private, BufferSize, Buffer);
}