return Status;\r
}\r
\r
- Status = LoadFileProtocol->LoadFile (LoadFileProtocol, *DevicePath, TRUE, &BufferSize, NULL);\r
+ Status = LoadFileProtocol->LoadFile (LoadFileProtocol, RemainingDevicePath, TRUE, &BufferSize, NULL);\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(BufferSize), Image);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- Status = LoadFileProtocol->LoadFile (LoadFileProtocol, *DevicePath, TRUE, &BufferSize, (VOID*)(UINTN)(*Image));\r
+ Status = LoadFileProtocol->LoadFile (LoadFileProtocol, RemainingDevicePath, TRUE, &BufferSize, (VOID*)(UINTN)(*Image));\r
if (!EFI_ERROR (Status) && (ImageSize != NULL)) {\r
*ImageSize = BufferSize;\r
}\r
EFI_DHCP4_MODE_DATA Dhcp4Mode;\r
EFI_MTFTP4_CONFIG_DATA Mtftp4CfgData;\r
IPv4_DEVICE_PATH *IPv4DevicePathNode;\r
- FILEPATH_DEVICE_PATH *FilePathDevicePathNode;\r
+ CHAR16 *PathName;\r
CHAR8 *AsciiFilePath;\r
EFI_MTFTP4_TOKEN Mtftp4Token;\r
UINT64 FileSize;\r
goto Error;\r
}\r
\r
- //\r
- // Convert the Unicode path of the file to Ascii\r
- //\r
-\r
- FilePathDevicePathNode = (FILEPATH_DEVICE_PATH*)(IPv4DevicePathNode + 1);\r
- AsciiFilePath = AllocatePool ((StrLen (FilePathDevicePathNode->PathName) + 1) * sizeof (CHAR8));\r
- if (AsciiFilePath == NULL) {\r
- Status = EFI_OUT_OF_RESOURCES;\r
- goto Error;\r
- }\r
- UnicodeStrToAsciiStr (FilePathDevicePathNode->PathName, AsciiFilePath);\r
+ // The Device Path might contain multiple FilePath nodes\r
+ PathName = ConvertDevicePathToText ((EFI_DEVICE_PATH_PROTOCOL*)(IPv4DevicePathNode + 1), FALSE, FALSE);\r
+ AsciiFilePath = AllocatePool (StrLen (PathName) + 1);\r
+ UnicodeStrToAsciiStr (PathName, AsciiFilePath);\r
\r
//\r
// Try to get the size of the file in bytes from the server. If it fails,\r
if (Mtftp4GetFileSize (Mtftp4, AsciiFilePath, &FileSize) == EFI_SUCCESS) {\r
TftpBufferSize = FileSize;\r
} else {\r
- TftpBufferSize = SIZE_8MB;\r
+ TftpBufferSize = SIZE_16MB;\r
}\r
\r
TftpContext = AllocatePool (sizeof (BDS_TFTP_CONTEXT));\r
TftpContext->FileSize = FileSize;\r
\r
for (; TftpBufferSize <= FixedPcdGet32 (PcdMaxTftpFileSize);\r
- TftpBufferSize = (TftpBufferSize + SIZE_8MB) & (~(SIZE_8MB-1))) {\r
+ TftpBufferSize = (TftpBufferSize + SIZE_16MB) & (~(SIZE_16MB-1))) {\r
//\r
// Allocate a buffer to hold the whole file.\r
//\r
Mtftp4Token.CheckPacket = Mtftp4CheckPacket;\r
Mtftp4Token.Context = (VOID*)TftpContext;\r
\r
- Print (L"Downloading the file <%s> from the TFTP server\n", FilePathDevicePathNode->PathName);\r
+ Print (L"Downloading the file <%a> from the TFTP server\n", AsciiFilePath);\r
Status = Mtftp4->ReadFile (Mtftp4, &Mtftp4Token);\r
Print (L"\n");\r
if (EFI_ERROR (Status)) {\r
}\r
\r
if (EFI_ERROR (Status)) {\r
+ *Image = 0;\r
Print (L"Failed to download the file - Error=%r\n", Status);\r
}\r
\r