public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Jiaxin Wu <Jiaxin.wu@intel.com>
To: edk2-devel@lists.01.org
Cc: Ye Ting <ting.ye@intel.com>, Fu Siyuan <siyuan.fu@intel.com>,
	Shao Ming <ming.shao@intel.com>, Laszlo Ersek <lersek@redhat.com>,
	Wu Jiaxin <jiaxin.wu@intel.com>
Subject: [PATCH v2 5/5] NetworkPkg/UefiPxeBcDxe: Use the specified MTFTP windowsize.
Date: Tue, 25 Sep 2018 09:11:45 +0800	[thread overview]
Message-ID: <20180925011145.14316-3-Jiaxin.wu@intel.com> (raw)
In-Reply-To: <20180925011145.14316-1-Jiaxin.wu@intel.com>

*v2: Since the new PCD (PcdPxeTftpWindowSize) was renamed/defined in
NetworkPkg instead of MdeModulePkg, this new version is to update the
consuming PXE driver.

Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=886

This patch is to use the specified MTFTP windowsize to benefit the PXE
download performance.

Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Cc: Shao Ming <ming.shao@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Wu Jiaxin <jiaxin.wu@intel.com>
---
 NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c      |  10 +-
 NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.c     | 137 +++++++++++++++++------
 NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.h     |   6 +-
 NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf |   3 +
 4 files changed, 121 insertions(+), 35 deletions(-)

diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
index 13396903f5..468b38d887 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.c
@@ -847,11 +847,11 @@ EfiPxeBcMtftp (
   EFI_MTFTP4_CONFIG_DATA          Mtftp4Config;
   EFI_MTFTP6_CONFIG_DATA          Mtftp6Config;
   VOID                            *Config;
   EFI_STATUS                      Status;
   EFI_PXE_BASE_CODE_IP_FILTER     IpFilter;
-
+  UINTN                           WindowSize;
 
   if ((This == NULL) ||
       (Filename == NULL) ||
       (BufferSize == NULL) ||
       (ServerIp == NULL) ||
@@ -871,10 +871,15 @@ EfiPxeBcMtftp (
   Config    = NULL;
   Status    = EFI_DEVICE_ERROR;
   Private   = PXEBC_PRIVATE_DATA_FROM_PXEBC (This);
   Mode      = Private->PxeBc.Mode;
 
+  //
+  // Get PcdPxeTftpWindowSize.
+  //
+  WindowSize = (UINTN) PcdGet64 (PcdPxeTftpWindowSize);
+
   if (Mode->UsingIpv6) {
     if (!NetIp6IsValidUnicast (&ServerIp->v6)) {
       return EFI_INVALID_PARAMETER;
     }
   } else {
@@ -928,10 +933,11 @@ EfiPxeBcMtftp (
     Status = PxeBcTftpGetFileSize (
                Private,
                Config,
                Filename,
                BlockSize,
+               (WindowSize > 1) ? &WindowSize : NULL,
                BufferSize
                );
 
     break;
 
@@ -942,10 +948,11 @@ EfiPxeBcMtftp (
     Status = PxeBcTftpReadFile (
                Private,
                Config,
                Filename,
                BlockSize,
+               (WindowSize > 1) ? &WindowSize : NULL,
                BufferPtr,
                BufferSize,
                DontUseBuffer
                );
 
@@ -974,10 +981,11 @@ EfiPxeBcMtftp (
     Status = PxeBcTftpReadDirectory (
                Private,
                Config,
                Filename,
                BlockSize,
+               (WindowSize > 1) ? &WindowSize : NULL,
                BufferPtr,
                BufferSize,
                DontUseBuffer
                );
 
diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.c b/NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.c
index 270190d42e..9725fb40dd 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.c
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.c
@@ -17,11 +17,12 @@
 
 CHAR8 *mMtftpOptions[PXE_MTFTP_OPTION_MAXIMUM_INDEX] = {
   "blksize",
   "timeout",
   "tsize",
-  "multicast"
+  "multicast",
+  "windowsize"
 };
 
 
 /**
   This is a callback function when packets are received or transmitted in Mtftp driver.
@@ -120,28 +121,31 @@ EFI_STATUS
 PxeBcMtftp6GetFileSize (
   IN     PXEBC_PRIVATE_DATA           *Private,
   IN     EFI_MTFTP6_CONFIG_DATA       *Config,
   IN     UINT8                        *Filename,
   IN     UINTN                        *BlockSize,
+  IN     UINTN                        *WindowSize,
   IN OUT UINT64                       *BufferSize
   )
 {
   EFI_MTFTP6_PROTOCOL                 *Mtftp6;
-  EFI_MTFTP6_OPTION                   ReqOpt[2];
+  EFI_MTFTP6_OPTION                   ReqOpt[3];
   EFI_MTFTP6_PACKET                   *Packet;
   EFI_MTFTP6_OPTION                   *Option;
   UINT32                              PktLen;
-  UINT8                               OptBuf[128];
+  UINT8                               OptBuf[PXE_MTFTP_OPTBUF_MAXNUM_INDEX];
+  UINTN                               OptBufSize;
   UINT32                              OptCnt;
   EFI_STATUS                          Status;
 
   *BufferSize               = 0;
   Status                    = EFI_DEVICE_ERROR;
   Mtftp6                    = Private->Mtftp6;
   Packet                    = NULL;
   Option                    = NULL;
   PktLen                    = 0;
+  OptBufSize                = PXE_MTFTP_OPTBUF_MAXNUM_INDEX;
   OptCnt                    = 1;
   Config->InitialServerPort = PXEBC_BS_DOWNLOAD_PORT;
 
   Status = Mtftp6->Configure (Mtftp6, Config);
   if (EFI_ERROR (Status)) {
@@ -150,17 +154,26 @@ PxeBcMtftp6GetFileSize (
 
   //
   // Build the required options for get info.
   //
   ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_TSIZE_INDEX];
-  PxeBcUintnToAscDec (0, OptBuf, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);
+  PxeBcUintnToAscDec (0, OptBuf, OptBufSize);
   ReqOpt[0].ValueStr  = OptBuf;
 
   if (BlockSize != NULL) {
-    ReqOpt[1].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
-    ReqOpt[1].ValueStr  = (UINT8 *) (ReqOpt[0].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1);
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[1].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX - (AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1));
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = (UINT8 *) (ReqOpt[OptCnt-1].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);
+    OptBufSize -= (AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, OptBufSize);
+    OptCnt++;
+  }
+
+  if (WindowSize != NULL) {
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = (UINT8 *) (ReqOpt[OptCnt-1].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);
+    OptBufSize -= (AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);
+    PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, OptBufSize);
     OptCnt++;
   }
 
   Status = Mtftp6->GetInfo (
                      Mtftp6,
@@ -248,20 +261,22 @@ EFI_STATUS
 PxeBcMtftp6ReadFile (
   IN    PXEBC_PRIVATE_DATA            *Private,
   IN     EFI_MTFTP6_CONFIG_DATA       *Config,
   IN     UINT8                        *Filename,
   IN     UINTN                        *BlockSize,
+  IN     UINTN                        *WindowSize,
   IN     UINT8                        *BufferPtr,
   IN OUT UINT64                       *BufferSize,
   IN     BOOLEAN                      DontUseBuffer
   )
 {
   EFI_MTFTP6_PROTOCOL                 *Mtftp6;
   EFI_MTFTP6_TOKEN                    Token;
-  EFI_MTFTP6_OPTION                   ReqOpt[1];
+  EFI_MTFTP6_OPTION                   ReqOpt[2];
   UINT32                              OptCnt;
-  UINT8                               OptBuf[128];
+  UINT8                               BlksizeBuf[10];
+  UINT8                               WindowsizeBuf[10];
   EFI_STATUS                          Status;
 
   Status                    = EFI_DEVICE_ERROR;
   Mtftp6                    = Private->Mtftp6;
   OptCnt                    = 0;
@@ -271,16 +286,24 @@ PxeBcMtftp6ReadFile (
   if (EFI_ERROR (Status)) {
     return Status;
   }
 
   if (BlockSize != NULL) {
-    ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
-    ReqOpt[0].ValueStr  = OptBuf;
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = BlksizeBuf;
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, sizeof (BlksizeBuf));
     OptCnt++;
   }
 
+  if (WindowSize != NULL) {
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = WindowsizeBuf;
+    PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, sizeof (WindowsizeBuf));
+    OptCnt++;
+  }
+
+
   Token.Event         = NULL;
   Token.OverrideData  = NULL;
   Token.Filename      = Filename;
   Token.ModeStr       = NULL;
   Token.OptionCount   = OptCnt;
@@ -406,20 +429,22 @@ EFI_STATUS
 PxeBcMtftp6ReadDirectory (
   IN     PXEBC_PRIVATE_DATA            *Private,
   IN     EFI_MTFTP6_CONFIG_DATA        *Config,
   IN     UINT8                         *Filename,
   IN     UINTN                         *BlockSize,
+  IN     UINTN                         *WindowSize,
   IN     UINT8                         *BufferPtr,
   IN OUT UINT64                        *BufferSize,
   IN     BOOLEAN                       DontUseBuffer
   )
 {
   EFI_MTFTP6_PROTOCOL                  *Mtftp6;
   EFI_MTFTP6_TOKEN                     Token;
-  EFI_MTFTP6_OPTION                    ReqOpt[1];
+  EFI_MTFTP6_OPTION                    ReqOpt[2];
   UINT32                               OptCnt;
-  UINT8                                OptBuf[128];
+  UINT8                                BlksizeBuf[10];
+  UINT8                                WindowsizeBuf[10];
   EFI_STATUS                           Status;
 
   Status                    = EFI_DEVICE_ERROR;
   Mtftp6                    = Private->Mtftp6;
   OptCnt                    = 0;
@@ -429,13 +454,20 @@ PxeBcMtftp6ReadDirectory (
   if (EFI_ERROR (Status)) {
     return Status;
   }
 
   if (BlockSize != NULL) {
-    ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
-    ReqOpt[0].ValueStr  = OptBuf;
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = BlksizeBuf;
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, sizeof (BlksizeBuf));
+    OptCnt++;
+  }
+
+  if (WindowSize != NULL) {
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = WindowsizeBuf;
+    PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, sizeof (WindowsizeBuf));
     OptCnt++;
   }
 
   Token.Event         = NULL;
   Token.OverrideData  = NULL;
@@ -566,28 +598,31 @@ EFI_STATUS
 PxeBcMtftp4GetFileSize (
   IN     PXEBC_PRIVATE_DATA         *Private,
   IN     EFI_MTFTP4_CONFIG_DATA     *Config,
   IN     UINT8                      *Filename,
   IN     UINTN                      *BlockSize,
+  IN     UINTN                      *WindowSize,
   IN OUT UINT64                     *BufferSize
   )
 {
   EFI_MTFTP4_PROTOCOL *Mtftp4;
-  EFI_MTFTP4_OPTION   ReqOpt[2];
+  EFI_MTFTP4_OPTION   ReqOpt[3];
   EFI_MTFTP4_PACKET   *Packet;
   EFI_MTFTP4_OPTION   *Option;
   UINT32              PktLen;
-  UINT8               OptBuf[128];
+  UINT8               OptBuf[PXE_MTFTP_OPTBUF_MAXNUM_INDEX];
+  UINTN               OptBufSize;
   UINT32              OptCnt;
   EFI_STATUS          Status;
 
   *BufferSize               = 0;
   Status                    = EFI_DEVICE_ERROR;
   Mtftp4                    = Private->Mtftp4;
   Packet                    = NULL;
   Option                    = NULL;
   PktLen                    = 0;
+  OptBufSize                = PXE_MTFTP_OPTBUF_MAXNUM_INDEX;
   OptCnt                    = 1;
   Config->InitialServerPort = PXEBC_BS_DOWNLOAD_PORT;
 
   Status = Mtftp4->Configure (Mtftp4, Config);
   if (EFI_ERROR (Status)) {
@@ -596,17 +631,26 @@ PxeBcMtftp4GetFileSize (
 
   //
   // Build the required options for get info.
   //
   ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_TSIZE_INDEX];
-  PxeBcUintnToAscDec (0, OptBuf, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);
+  PxeBcUintnToAscDec (0, OptBuf, OptBufSize);
   ReqOpt[0].ValueStr  = OptBuf;
 
   if (BlockSize != NULL) {
-    ReqOpt[1].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
-    ReqOpt[1].ValueStr  = (UINT8 *) (ReqOpt[0].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1);
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[1].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX - (AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1));
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = (UINT8 *) (ReqOpt[OptCnt-1].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);
+    OptBufSize -= (AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, OptBufSize);
+    OptCnt++;
+  }
+
+  if (WindowSize != NULL) {
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = (UINT8 *) (ReqOpt[OptCnt-1].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);
+    OptBufSize -= (AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);
+    PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, OptBufSize);
     OptCnt++;
   }
 
   Status = Mtftp4->GetInfo (
                      Mtftp4,
@@ -694,20 +738,22 @@ EFI_STATUS
 PxeBcMtftp4ReadFile (
   IN     PXEBC_PRIVATE_DATA         *Private,
   IN     EFI_MTFTP4_CONFIG_DATA     *Config,
   IN     UINT8                      *Filename,
   IN     UINTN                      *BlockSize,
+  IN     UINTN                      *WindowSize,
   IN     UINT8                      *BufferPtr,
   IN OUT UINT64                     *BufferSize,
   IN     BOOLEAN                    DontUseBuffer
   )
 {
   EFI_MTFTP4_PROTOCOL *Mtftp4;
   EFI_MTFTP4_TOKEN    Token;
-  EFI_MTFTP4_OPTION   ReqOpt[1];
+  EFI_MTFTP4_OPTION   ReqOpt[2];
   UINT32              OptCnt;
-  UINT8               OptBuf[128];
+  UINT8               BlksizeBuf[10];
+  UINT8               WindowsizeBuf[10];
   EFI_STATUS          Status;
 
   Status                    = EFI_DEVICE_ERROR;
   Mtftp4                    = Private->Mtftp4;
   OptCnt                    = 0;
@@ -717,13 +763,20 @@ PxeBcMtftp4ReadFile (
   if (EFI_ERROR (Status)) {
     return Status;
   }
 
   if (BlockSize != NULL) {
-    ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
-    ReqOpt[0].ValueStr  = OptBuf;
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = BlksizeBuf;
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, sizeof (BlksizeBuf));
+    OptCnt++;
+  }
+
+  if (WindowSize != NULL) {
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = WindowsizeBuf;
+    PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, sizeof (WindowsizeBuf));
     OptCnt++;
   }
 
   Token.Event         = NULL;
   Token.OverrideData  = NULL;
@@ -852,20 +905,22 @@ EFI_STATUS
 PxeBcMtftp4ReadDirectory (
   IN     PXEBC_PRIVATE_DATA            *Private,
   IN     EFI_MTFTP4_CONFIG_DATA        *Config,
   IN     UINT8                         *Filename,
   IN     UINTN                         *BlockSize,
+  IN     UINTN                         *WindowSize,
   IN     UINT8                         *BufferPtr,
   IN OUT UINT64                        *BufferSize,
   IN     BOOLEAN                       DontUseBuffer
   )
 {
   EFI_MTFTP4_PROTOCOL *Mtftp4;
   EFI_MTFTP4_TOKEN    Token;
-  EFI_MTFTP4_OPTION   ReqOpt[1];
+  EFI_MTFTP4_OPTION   ReqOpt[2];
   UINT32              OptCnt;
-  UINT8               OptBuf[128];
+  UINT8               BlksizeBuf[10];
+  UINT8               WindowsizeBuf[10];
   EFI_STATUS          Status;
 
   Status                    = EFI_DEVICE_ERROR;
   Mtftp4                    = Private->Mtftp4;
   OptCnt                    = 0;
@@ -875,13 +930,20 @@ PxeBcMtftp4ReadDirectory (
   if (EFI_ERROR (Status)) {
     return Status;
   }
 
   if (BlockSize != NULL) {
-    ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
-    ReqOpt[0].ValueStr  = OptBuf;
-    PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = BlksizeBuf;
+    PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, sizeof (BlksizeBuf));
+    OptCnt++;
+  }
+
+  if (WindowSize != NULL) {
+    ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];
+    ReqOpt[OptCnt].ValueStr  = WindowsizeBuf;
+    PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, sizeof (WindowsizeBuf));
     OptCnt++;
   }
 
   Token.Event         = NULL;
   Token.OverrideData  = NULL;
@@ -934,27 +996,30 @@ EFI_STATUS
 PxeBcTftpGetFileSize (
   IN     PXEBC_PRIVATE_DATA         *Private,
   IN     VOID                       *Config,
   IN     UINT8                      *Filename,
   IN     UINTN                      *BlockSize,
+  IN     UINTN                      *WindowSize,
   IN OUT UINT64                     *BufferSize
   )
 {
   if (Private->PxeBc.Mode->UsingIpv6) {
     return PxeBcMtftp6GetFileSize (
              Private,
              (EFI_MTFTP6_CONFIG_DATA *) Config,
              Filename,
              BlockSize,
+             WindowSize,
              BufferSize
              );
   } else {
     return PxeBcMtftp4GetFileSize (
              Private,
              (EFI_MTFTP4_CONFIG_DATA *) Config,
              Filename,
              BlockSize,
+             WindowSize,
              BufferSize
              );
   }
 }
 
@@ -979,10 +1044,11 @@ EFI_STATUS
 PxeBcTftpReadFile (
   IN     PXEBC_PRIVATE_DATA         *Private,
   IN     VOID                       *Config,
   IN     UINT8                      *Filename,
   IN     UINTN                      *BlockSize,
+  IN     UINTN                      *WindowSize,
   IN     UINT8                      *BufferPtr,
   IN OUT UINT64                     *BufferSize,
   IN     BOOLEAN                    DontUseBuffer
   )
 {
@@ -990,20 +1056,22 @@ PxeBcTftpReadFile (
     return PxeBcMtftp6ReadFile (
              Private,
              (EFI_MTFTP6_CONFIG_DATA *) Config,
              Filename,
              BlockSize,
+             WindowSize,
              BufferPtr,
              BufferSize,
              DontUseBuffer
              );
   } else {
     return PxeBcMtftp4ReadFile (
              Private,
              (EFI_MTFTP4_CONFIG_DATA *) Config,
              Filename,
              BlockSize,
+             WindowSize,
              BufferPtr,
              BufferSize,
              DontUseBuffer
              );
   }
@@ -1081,10 +1149,11 @@ EFI_STATUS
 PxeBcTftpReadDirectory (
   IN     PXEBC_PRIVATE_DATA            *Private,
   IN     VOID                          *Config,
   IN     UINT8                         *Filename,
   IN     UINTN                         *BlockSize,
+  IN     UINTN                         *WindowSize,
   IN     UINT8                         *BufferPtr,
   IN OUT UINT64                        *BufferSize,
   IN     BOOLEAN                       DontUseBuffer
   )
 {
@@ -1092,20 +1161,22 @@ PxeBcTftpReadDirectory (
     return PxeBcMtftp6ReadDirectory (
              Private,
              (EFI_MTFTP6_CONFIG_DATA *) Config,
              Filename,
              BlockSize,
+             WindowSize,
              BufferPtr,
              BufferSize,
              DontUseBuffer
              );
   } else {
     return PxeBcMtftp4ReadDirectory (
              Private,
              (EFI_MTFTP4_CONFIG_DATA *) Config,
              Filename,
              BlockSize,
+             WindowSize,
              BufferPtr,
              BufferSize,
              DontUseBuffer
              );
   }
diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.h b/NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.h
index f1150762c6..edd8decbd8 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.h
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcMtftp.h
@@ -18,11 +18,12 @@
 
 #define PXE_MTFTP_OPTION_BLKSIZE_INDEX     0
 #define PXE_MTFTP_OPTION_TIMEOUT_INDEX     1
 #define PXE_MTFTP_OPTION_TSIZE_INDEX       2
 #define PXE_MTFTP_OPTION_MULTICAST_INDEX   3
-#define PXE_MTFTP_OPTION_MAXIMUM_INDEX     4
+#define PXE_MTFTP_OPTION_WINDOWSIZE_INDEX  4
+#define PXE_MTFTP_OPTION_MAXIMUM_INDEX     5
 #define PXE_MTFTP_OPTBUF_MAXNUM_INDEX      128
 
 #define PXE_MTFTP_ERROR_STRING_LENGTH      127   // refer to definition of struct EFI_PXE_BASE_CODE_TFTP_ERROR.
 #define PXE_MTFTP_DEFAULT_BLOCK_SIZE       512   // refer to rfc-1350.
 
@@ -46,10 +47,11 @@ EFI_STATUS
 PxeBcTftpGetFileSize (
   IN     PXEBC_PRIVATE_DATA         *Private,
   IN     VOID                       *Config,
   IN     UINT8                      *Filename,
   IN     UINTN                      *BlockSize,
+  IN     UINTN                      *WindowSize,
   IN OUT UINT64                     *BufferSize
   );
 
 
 /**
@@ -72,10 +74,11 @@ EFI_STATUS
 PxeBcTftpReadFile (
   IN     PXEBC_PRIVATE_DATA         *Private,
   IN     VOID                       *Config,
   IN     UINT8                      *Filename,
   IN     UINTN                      *BlockSize,
+  IN     UINTN                      *WindowSize,
   IN     UINT8                      *BufferPtr,
   IN OUT UINT64                     *BufferSize,
   IN     BOOLEAN                    DontUseBuffer
   );
 
@@ -128,10 +131,11 @@ EFI_STATUS
 PxeBcTftpReadDirectory (
   IN     PXEBC_PRIVATE_DATA            *Private,
   IN     VOID                          *Config,
   IN     UINT8                         *Filename,
   IN     UINTN                         *BlockSize,
+  IN     UINTN                         *WindowSize,
   IN     UINT8                         *BufferPtr,
   IN OUT UINT64                        *BufferSize,
   IN     BOOLEAN                       DontUseBuffer
   );
 #endif
diff --git a/NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf b/NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
index 55fa2b3c8c..e2a0eb44b1 100644
--- a/NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
+++ b/NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
@@ -53,10 +53,11 @@
 
 
 [Packages]
   MdePkg/MdePkg.dec
   MdeModulePkg/MdeModulePkg.dec
+  NetworkPkg/NetworkPkg.dec
 
 
 [LibraryClasses]
   BaseLib
   UefiLib
@@ -105,7 +106,9 @@
 [Guids]
   gEfiAdapterInfoUndiIpv6SupportGuid                   ## SOMETIMES_CONSUMES ## GUID
 
 [Pcd]
   gEfiMdeModulePkgTokenSpaceGuid.PcdTftpBlockSize      ## SOMETIMES_CONSUMES
+  gEfiNetworkPkgTokenSpaceGuid.PcdPxeTftpWindowSize    ## SOMETIMES_CONSUMES
+
 [UserExtensions.TianoCore."ExtraFiles"]
   UefiPxeBcDxeExtra.uni
-- 
2.17.1.windows.2



  parent reply	other threads:[~2018-09-25  1:12 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-25  1:11 [PATCH v2 0/5] Support windowsize to benefit tftp/pxe download performance Jiaxin Wu
2018-09-25  1:11 ` [PATCH v2 4/5] NetworkPkg: Define one PCD for PXE to specify MTFTP windowsize Jiaxin Wu
2018-09-25 20:12   ` Laszlo Ersek
2018-09-26  0:52     ` Wu, Jiaxin
2018-09-25  1:11 ` Jiaxin Wu [this message]
2018-09-25 20:23   ` [PATCH v2 5/5] NetworkPkg/UefiPxeBcDxe: Use the specified " Laszlo Ersek
2018-09-25  1:40 ` [PATCH v2 0/5] Support windowsize to benefit tftp/pxe download performance Fu, Siyuan
2018-09-25  8:40 ` Ye, Ting
2018-09-25 20:07 ` Laszlo Ersek
2018-09-26  0:48   ` Wu, Jiaxin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180925011145.14316-3-Jiaxin.wu@intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox