/** @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
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
return EFI_NOT_STARTED;\r
}\r
\r
- Private->FileSize = 0;\r
-\r
if (NewDhcpDiscoverValid != NULL) {\r
Mode->DhcpDiscoverValid = *NewDhcpDiscoverValid;\r
}\r
UINT16 Type;\r
UINT16 Layer;\r
BOOLEAN UseBis;\r
- UINTN BlockSize;\r
PXEBC_CACHED_DHCP4_PACKET *Packet;\r
UINT16 Value;\r
\r
}\r
\r
*BufferSize = 0;\r
- BlockSize = 0x8000;\r
\r
//\r
// Get bootfile name and (m)tftp server ip addresss\r
Buffer,\r
FALSE,\r
BufferSize,\r
- &BlockSize,\r
+ &Private->BlockSize,\r
&Private->ServerIp,\r
(UINT8 *) Private->BootFileName,\r
NULL,\r
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
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
Buffer,\r
FALSE,\r
&TmpBufSize,\r
- &BlockSize,\r
+ &Private->BlockSize,\r
&Private->ServerIp,\r
(UINT8 *) Private->BootFileName,\r
NULL,\r
Buffer,\r
FALSE,\r
&TmpBufSize,\r
- &BlockSize,\r
+ &Private->BlockSize,\r
&Private->ServerIp,\r
(UINT8 *) Private->BootFileName,\r
NULL,\r
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