mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-25 22:54:51 +02:00
Get MaxPacketSize from IP4 mode data and reduce the head size of UDP and MTFTP, and take it as BlockSize to download.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9894 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
9f7d5b46aa
commit
fa6d3ee491
@ -1270,7 +1270,9 @@ PxeBcDiscvBootService (
|
|||||||
//
|
//
|
||||||
// free the responselist
|
// free the responselist
|
||||||
//
|
//
|
||||||
FreePool (Token.ResponseList);
|
if (Token.ResponseList != NULL) {
|
||||||
|
FreePool (Token.ResponseList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Free the dhcp packet
|
// Free the dhcp packet
|
||||||
|
@ -152,6 +152,7 @@ PxeBcDriverBindingStart (
|
|||||||
PXEBC_PRIVATE_DATA *Private;
|
PXEBC_PRIVATE_DATA *Private;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
EFI_IP4_MODE_DATA Ip4ModeData;
|
||||||
|
|
||||||
Private = AllocateZeroPool (sizeof (PXEBC_PRIVATE_DATA));
|
Private = AllocateZeroPool (sizeof (PXEBC_PRIVATE_DATA));
|
||||||
if (Private == NULL) {
|
if (Private == NULL) {
|
||||||
@ -253,6 +254,16 @@ PxeBcDriverBindingStart (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto ON_ERROR;
|
goto ON_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get max packet size from Ip4 to calculate block size for Tftp later.
|
||||||
|
//
|
||||||
|
Status = Private->Ip4->GetModeData (Private->Ip4, &Ip4ModeData, NULL, NULL);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
Private->Ip4MaxPacketSize = Ip4ModeData.MaxPacketSize;
|
||||||
|
|
||||||
Status = NetLibCreateServiceChild (
|
Status = NetLibCreateServiceChild (
|
||||||
ControllerHandle,
|
ControllerHandle,
|
||||||
|
@ -347,6 +347,11 @@ EfiPxeBcStart (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure block size for TFTP as a default value to handle all link layers.
|
||||||
|
//
|
||||||
|
Private->BlockSize = (UINTN) (MIN (Private->Ip4MaxPacketSize, PXEBC_DEFAULT_PACKET_SIZE) -
|
||||||
|
PXEBC_DEFAULT_UDP_OVERHEAD_SIZE - PXEBC_DEFAULT_TFTP_OVERHEAD_SIZE);
|
||||||
Private->AddressIsOk = FALSE;
|
Private->AddressIsOk = FALSE;
|
||||||
|
|
||||||
ZeroMem (Mode, sizeof (EFI_PXE_BASE_CODE_MODE));
|
ZeroMem (Mode, sizeof (EFI_PXE_BASE_CODE_MODE));
|
||||||
@ -2421,7 +2426,6 @@ DiscoverBootFile (
|
|||||||
UINT16 Type;
|
UINT16 Type;
|
||||||
UINT16 Layer;
|
UINT16 Layer;
|
||||||
BOOLEAN UseBis;
|
BOOLEAN UseBis;
|
||||||
UINTN BlockSize;
|
|
||||||
PXEBC_CACHED_DHCP4_PACKET *Packet;
|
PXEBC_CACHED_DHCP4_PACKET *Packet;
|
||||||
UINT16 Value;
|
UINT16 Value;
|
||||||
|
|
||||||
@ -2466,7 +2470,6 @@ DiscoverBootFile (
|
|||||||
}
|
}
|
||||||
|
|
||||||
*BufferSize = 0;
|
*BufferSize = 0;
|
||||||
BlockSize = 0x8000;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get bootfile name and (m)tftp server ip addresss
|
// Get bootfile name and (m)tftp server ip addresss
|
||||||
@ -2526,7 +2529,7 @@ DiscoverBootFile (
|
|||||||
Buffer,
|
Buffer,
|
||||||
FALSE,
|
FALSE,
|
||||||
BufferSize,
|
BufferSize,
|
||||||
&BlockSize,
|
&Private->BlockSize,
|
||||||
&Private->ServerIp,
|
&Private->ServerIp,
|
||||||
(UINT8 *) Private->BootFileName,
|
(UINT8 *) Private->BootFileName,
|
||||||
NULL,
|
NULL,
|
||||||
@ -2580,14 +2583,12 @@ EfiPxeLoadFile (
|
|||||||
PXEBC_PRIVATE_DATA *Private;
|
PXEBC_PRIVATE_DATA *Private;
|
||||||
EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;
|
EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;
|
||||||
BOOLEAN NewMakeCallback;
|
BOOLEAN NewMakeCallback;
|
||||||
UINTN BlockSize;
|
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT64 TmpBufSize;
|
UINT64 TmpBufSize;
|
||||||
|
|
||||||
Private = PXEBC_PRIVATE_DATA_FROM_LOADFILE (This);
|
Private = PXEBC_PRIVATE_DATA_FROM_LOADFILE (This);
|
||||||
PxeBc = &Private->PxeBc;
|
PxeBc = &Private->PxeBc;
|
||||||
NewMakeCallback = FALSE;
|
NewMakeCallback = FALSE;
|
||||||
BlockSize = 0x8000;
|
|
||||||
Status = EFI_DEVICE_ERROR;
|
Status = EFI_DEVICE_ERROR;
|
||||||
|
|
||||||
if (This == NULL || BufferSize == NULL) {
|
if (This == NULL || BufferSize == NULL) {
|
||||||
@ -2646,7 +2647,7 @@ EfiPxeLoadFile (
|
|||||||
Buffer,
|
Buffer,
|
||||||
FALSE,
|
FALSE,
|
||||||
&TmpBufSize,
|
&TmpBufSize,
|
||||||
&BlockSize,
|
&Private->BlockSize,
|
||||||
&Private->ServerIp,
|
&Private->ServerIp,
|
||||||
(UINT8 *) Private->BootFileName,
|
(UINT8 *) Private->BootFileName,
|
||||||
NULL,
|
NULL,
|
||||||
@ -2670,7 +2671,7 @@ EfiPxeLoadFile (
|
|||||||
Buffer,
|
Buffer,
|
||||||
FALSE,
|
FALSE,
|
||||||
&TmpBufSize,
|
&TmpBufSize,
|
||||||
&BlockSize,
|
&Private->BlockSize,
|
||||||
&Private->ServerIp,
|
&Private->ServerIp,
|
||||||
(UINT8 *) Private->BootFileName,
|
(UINT8 *) Private->BootFileName,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -47,8 +47,11 @@ typedef struct _PXEBC_PRIVATE_DATA PXEBC_PRIVATE_DATA;
|
|||||||
#include "PxeBcSupport.h"
|
#include "PxeBcSupport.h"
|
||||||
|
|
||||||
#define PXEBC_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'X', 'E', 'P')
|
#define PXEBC_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'X', 'E', 'P')
|
||||||
#define PXEBC_MTFTP_TIMEOUT 4
|
#define PXEBC_MTFTP_TIMEOUT 4
|
||||||
#define PXEBC_MTFTP_RETRIES 6
|
#define PXEBC_MTFTP_RETRIES 6
|
||||||
|
#define PXEBC_DEFAULT_UDP_OVERHEAD_SIZE 8
|
||||||
|
#define PXEBC_DEFAULT_TFTP_OVERHEAD_SIZE 4
|
||||||
|
#define PXEBC_DEFAULT_PACKET_SIZE 1480
|
||||||
|
|
||||||
struct _PXEBC_PRIVATE_DATA {
|
struct _PXEBC_PRIVATE_DATA {
|
||||||
UINT32 Signature;
|
UINT32 Signature;
|
||||||
@ -88,7 +91,8 @@ struct _PXEBC_PRIVATE_DATA {
|
|||||||
EFI_IP_ADDRESS GatewayIp;
|
EFI_IP_ADDRESS GatewayIp;
|
||||||
EFI_IP_ADDRESS ServerIp;
|
EFI_IP_ADDRESS ServerIp;
|
||||||
BOOLEAN AddressIsOk;
|
BOOLEAN AddressIsOk;
|
||||||
|
UINT32 Ip4MaxPacketSize;
|
||||||
|
UINTN BlockSize;
|
||||||
UINTN FileSize;
|
UINTN FileSize;
|
||||||
|
|
||||||
UINT8 OptionBuffer[PXEBC_DHCP4_MAX_OPTION_SIZE];
|
UINT8 OptionBuffer[PXEBC_DHCP4_MAX_OPTION_SIZE];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user