]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
remove PxeBc->Stop () when EFI_BUFFER_TOO_SMALL, the calling PxeBc->Stop() in Driver...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcImpl.c
index e5ff4addf67fee01f60df4cf5c8af7ef74a956b5..5ffae2ef79bbf3017d0e00a4c158941c9fe062ba 100644 (file)
@@ -347,6 +347,11 @@ EfiPxeBcStart (
     return Status;\r
   }\r
 \r
+  //\r
+  // Configure block size for TFTP as a default value to handle all link layers.\r
+  // \r
+  Private->BlockSize   = (UINTN) (MIN (Private->Ip4MaxPacketSize, PXEBC_DEFAULT_PACKET_SIZE) - \r
+                           PXEBC_DEFAULT_UDP_OVERHEAD_SIZE - PXEBC_DEFAULT_TFTP_OVERHEAD_SIZE);\r
   Private->AddressIsOk = FALSE;\r
 \r
   ZeroMem (Mode, sizeof (EFI_PXE_BASE_CODE_MODE));\r
@@ -2226,8 +2231,6 @@ EfiPxeBcSetPackets (
     return EFI_NOT_STARTED;\r
   }\r
 \r
-  Private->FileSize = 0;\r
-\r
   if (NewDhcpDiscoverValid != NULL) {\r
     Mode->DhcpDiscoverValid = *NewDhcpDiscoverValid;\r
   }\r
@@ -2421,7 +2424,6 @@ DiscoverBootFile (
   UINT16                      Type;\r
   UINT16                      Layer;\r
   BOOLEAN                     UseBis;\r
-  UINTN                       BlockSize;\r
   PXEBC_CACHED_DHCP4_PACKET   *Packet;\r
   UINT16                      Value;\r
 \r
@@ -2466,7 +2468,6 @@ DiscoverBootFile (
   }\r
 \r
   *BufferSize = 0;\r
-  BlockSize   = 0x8000;\r
 \r
   //\r
   // Get bootfile name and (m)tftp server ip addresss\r
@@ -2526,7 +2527,7 @@ DiscoverBootFile (
                       Buffer,\r
                       FALSE,\r
                       BufferSize,\r
-                      &BlockSize,\r
+                      &Private->BlockSize,\r
                       &Private->ServerIp,\r
                       (UINT8 *) Private->BootFileName,\r
                       NULL,\r
@@ -2580,14 +2581,13 @@ EfiPxeLoadFile (
   PXEBC_PRIVATE_DATA          *Private;\r
   EFI_PXE_BASE_CODE_PROTOCOL  *PxeBc;\r
   BOOLEAN                     NewMakeCallback;\r
-  UINTN                       BlockSize;\r
   EFI_STATUS                  Status;\r
   UINT64                      TmpBufSize;\r
+  BOOLEAN                     MediaPresent;\r
 \r
   Private         = PXEBC_PRIVATE_DATA_FROM_LOADFILE (This);\r
   PxeBc           = &Private->PxeBc;\r
   NewMakeCallback = FALSE;\r
-  BlockSize       = 0x8000;\r
   Status          = EFI_DEVICE_ERROR;\r
 \r
   if (This == NULL || BufferSize == NULL) {\r
@@ -2602,6 +2602,15 @@ EfiPxeLoadFile (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
+  //\r
+  // Check media status before PXE start\r
+  //\r
+  MediaPresent = TRUE;\r
+  NetLibDetectMedia (Private->Controller, &MediaPresent);\r
+  if (!MediaPresent) {\r
+    return EFI_NO_MEDIA;\r
+  }\r
+\r
   Status = PxeBc->Start (PxeBc, FALSE);\r
   if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {\r
     return Status;\r
@@ -2646,7 +2655,7 @@ EfiPxeLoadFile (
                         Buffer,\r
                         FALSE,\r
                         &TmpBufSize,\r
-                        &BlockSize,\r
+                        &Private->BlockSize,\r
                         &Private->ServerIp,\r
                         (UINT8 *) Private->BootFileName,\r
                         NULL,\r
@@ -2670,7 +2679,7 @@ EfiPxeLoadFile (
                       Buffer,\r
                       FALSE,\r
                       &TmpBufSize,\r
-                      &BlockSize,\r
+                      &Private->BlockSize,\r
                       &Private->ServerIp,\r
                       (UINT8 *) Private->BootFileName,\r
                       NULL,\r
@@ -2707,7 +2716,9 @@ EfiPxeLoadFile (
     if (Buffer != NULL) {\r
       AsciiPrint ("PXE-E05: Download buffer is smaller than requested file.\n");\r
     } else {\r
-      PxeBc->Stop (PxeBc);\r
+      //\r
+      // The functionality of PXE Base Code protocol will not be stopped.\r
+      //\r
       return Status;\r
     }\r
 \r