]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDriver.c
1. add error handling in case DHCP success but boot request fail
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcDriver.c
index eaa3c03b6e46a6d86798d9f97d6fc5f44367fb31..f82f744b762fb0a022b4089892e19207280c5bc0 100644 (file)
@@ -152,6 +152,7 @@ PxeBcDriverBindingStart (
   PXEBC_PRIVATE_DATA  *Private;\r
   UINTN               Index;\r
   EFI_STATUS          Status;\r
+  EFI_IP4_MODE_DATA   Ip4ModeData;\r
 \r
   Private = AllocateZeroPool (sizeof (PXEBC_PRIVATE_DATA));\r
   if (Private == NULL) {\r
@@ -253,6 +254,16 @@ PxeBcDriverBindingStart (
   if (EFI_ERROR (Status)) {\r
     goto ON_ERROR;\r
   }\r
+
+  //
+  // Get max packet size from Ip4 to calculate block size for Tftp later.\r
+  //
+  Status = Private->Ip4->GetModeData (Private->Ip4, &Ip4ModeData, NULL, NULL);
+  if (EFI_ERROR (Status)) {
+    goto ON_ERROR;  
+  }
+
+  Private->Ip4MaxPacketSize = Ip4ModeData.MaxPacketSize;\r
 \r
   Status = NetLibCreateServiceChild (\r
              ControllerHandle,\r
@@ -534,6 +545,14 @@ PxeBcDriverBindingStop (
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
+  \r
+  //\r
+  // Stop functionality of PXE Base Code protocol\r
+  //\r
+  Status = PxeBc->Stop (PxeBc);\r
+  if (Status != EFI_SUCCESS && Status != EFI_NOT_STARTED) {\r
+    return Status;\r
+  }\r
 \r
   Private = PXEBC_PRIVATE_DATA_FROM_PXEBC (PxeBc);\r
 \r