]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
Update the copyright notice format
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcImpl.c
index e5ff4addf67fee01f60df4cf5c8af7ef74a956b5..57f588efd32be4f85242c9f088a94e63a6c61920 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
   Interface routines for PxeBc.\r
 \r
-Copyright (c) 2007 - 2010, Intel Corporation.<BR>\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
 http://opensource.org/licenses/bsd-license.php\r
@@ -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