/** @file\r
Functions implementation related with Mtftp for UefiPxeBc Driver.\r
\r
- Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
\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
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
"blksize",\r
"timeout",\r
"tsize",\r
- "multicast"\r
+ "multicast",\r
+ "windowsize"\r
};\r
\r
\r
@param[in] Config Pointer to EFI_MTFTP6_CONFIG_DATA.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in, out] BufferSize Pointer to buffer size.\r
\r
@retval EFI_SUCCESS Sucessfully obtained the size of file.\r
IN EFI_MTFTP6_CONFIG_DATA *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN OUT UINT64 *BufferSize\r
)\r
{\r
EFI_MTFTP6_PROTOCOL *Mtftp6;\r
- EFI_MTFTP6_OPTION ReqOpt[2];\r
+ EFI_MTFTP6_OPTION ReqOpt[3];\r
EFI_MTFTP6_PACKET *Packet;\r
EFI_MTFTP6_OPTION *Option;\r
UINT32 PktLen;\r
- UINT8 OptBuf[128];\r
+ UINT8 OptBuf[PXE_MTFTP_OPTBUF_MAXNUM_INDEX];\r
+ UINTN OptBufSize;\r
UINT32 OptCnt;\r
EFI_STATUS Status;\r
\r
Packet = NULL;\r
Option = NULL;\r
PktLen = 0;\r
+ OptBufSize = PXE_MTFTP_OPTBUF_MAXNUM_INDEX;\r
OptCnt = 1;\r
Config->InitialServerPort = PXEBC_BS_DOWNLOAD_PORT;\r
\r
// Build the required options for get info.\r
//\r
ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_TSIZE_INDEX];\r
- PxeBcUintnToAscDec (0, OptBuf, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
+ PxeBcUintnToAscDec (0, OptBuf, OptBufSize);\r
ReqOpt[0].ValueStr = OptBuf;\r
\r
if (BlockSize != NULL) {\r
- ReqOpt[1].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
- ReqOpt[1].ValueStr = (UINT8 *) (ReqOpt[0].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1);\r
- PxeBcUintnToAscDec (*BlockSize, ReqOpt[1].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX - (AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1));\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = (UINT8 *) (ReqOpt[OptCnt-1].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);\r
+ OptBufSize -= (AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);\r
+ PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, OptBufSize);\r
+ OptCnt++;\r
+ }\r
+\r
+ if (WindowSize != NULL) {\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = (UINT8 *) (ReqOpt[OptCnt-1].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);\r
+ OptBufSize -= (AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);\r
+ PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, OptBufSize);\r
OptCnt++;\r
}\r
\r
@param[in] Config Pointer to EFI_MTFTP6_CONFIG_DATA.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in] BufferPtr Pointer to buffer.\r
@param[in, out] BufferSize Pointer to buffer size.\r
@param[in] DontUseBuffer Indicates whether with a receive buffer.\r
IN EFI_MTFTP6_CONFIG_DATA *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN UINT8 *BufferPtr,\r
IN OUT UINT64 *BufferSize,\r
IN BOOLEAN DontUseBuffer\r
{\r
EFI_MTFTP6_PROTOCOL *Mtftp6;\r
EFI_MTFTP6_TOKEN Token;\r
- EFI_MTFTP6_OPTION ReqOpt[1];\r
+ EFI_MTFTP6_OPTION ReqOpt[2];\r
UINT32 OptCnt;\r
- UINT8 OptBuf[128];\r
+ UINT8 BlksizeBuf[10];\r
+ UINT8 WindowsizeBuf[10];\r
EFI_STATUS Status;\r
\r
Status = EFI_DEVICE_ERROR;\r
}\r
\r
if (BlockSize != NULL) {\r
- ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
- ReqOpt[0].ValueStr = OptBuf;\r
- PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = BlksizeBuf;\r
+ PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, sizeof (BlksizeBuf));\r
OptCnt++;\r
}\r
\r
+ if (WindowSize != NULL) {\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = WindowsizeBuf;\r
+ PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, sizeof (WindowsizeBuf));\r
+ OptCnt++;\r
+ }\r
+\r
+\r
Token.Event = NULL;\r
Token.OverrideData = NULL;\r
Token.Filename = Filename;\r
@param[in] Config Pointer to EFI_MTFTP6_CONFIG_DATA.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in] BufferPtr Pointer to buffer.\r
@param[in, out] BufferSize Pointer to buffer size.\r
@param[in] DontUseBuffer Indicates whether to use a receive buffer.\r
IN EFI_MTFTP6_CONFIG_DATA *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN UINT8 *BufferPtr,\r
IN OUT UINT64 *BufferSize,\r
IN BOOLEAN DontUseBuffer\r
{\r
EFI_MTFTP6_PROTOCOL *Mtftp6;\r
EFI_MTFTP6_TOKEN Token;\r
- EFI_MTFTP6_OPTION ReqOpt[1];\r
+ EFI_MTFTP6_OPTION ReqOpt[2];\r
UINT32 OptCnt;\r
- UINT8 OptBuf[128];\r
+ UINT8 BlksizeBuf[10];\r
+ UINT8 WindowsizeBuf[10];\r
EFI_STATUS Status;\r
\r
Status = EFI_DEVICE_ERROR;\r
}\r
\r
if (BlockSize != NULL) {\r
- ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
- ReqOpt[0].ValueStr = OptBuf;\r
- PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = BlksizeBuf;\r
+ PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, sizeof (BlksizeBuf));\r
+ OptCnt++;\r
+ }\r
+\r
+ if (WindowSize != NULL) {\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = WindowsizeBuf;\r
+ PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, sizeof (WindowsizeBuf));\r
OptCnt++;\r
}\r
\r
@param[in] Config Pointer to EFI_MTFTP4_CONFIG_DATA.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in, out] BufferSize Pointer to buffer size.\r
\r
@retval EFI_SUCCESS Successfully obtained the size of file.\r
IN EFI_MTFTP4_CONFIG_DATA *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN OUT UINT64 *BufferSize\r
)\r
{\r
EFI_MTFTP4_PROTOCOL *Mtftp4;\r
- EFI_MTFTP4_OPTION ReqOpt[2];\r
+ EFI_MTFTP4_OPTION ReqOpt[3];\r
EFI_MTFTP4_PACKET *Packet;\r
EFI_MTFTP4_OPTION *Option;\r
UINT32 PktLen;\r
- UINT8 OptBuf[128];\r
+ UINT8 OptBuf[PXE_MTFTP_OPTBUF_MAXNUM_INDEX];\r
+ UINTN OptBufSize;\r
UINT32 OptCnt;\r
EFI_STATUS Status;\r
\r
Packet = NULL;\r
Option = NULL;\r
PktLen = 0;\r
+ OptBufSize = PXE_MTFTP_OPTBUF_MAXNUM_INDEX;\r
OptCnt = 1;\r
Config->InitialServerPort = PXEBC_BS_DOWNLOAD_PORT;\r
\r
// Build the required options for get info.\r
//\r
ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_TSIZE_INDEX];\r
- PxeBcUintnToAscDec (0, OptBuf, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
+ PxeBcUintnToAscDec (0, OptBuf, OptBufSize);\r
ReqOpt[0].ValueStr = OptBuf;\r
\r
if (BlockSize != NULL) {\r
- ReqOpt[1].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
- ReqOpt[1].ValueStr = (UINT8 *) (ReqOpt[0].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1);\r
- PxeBcUintnToAscDec (*BlockSize, ReqOpt[1].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX - (AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1));\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = (UINT8 *) (ReqOpt[OptCnt-1].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);\r
+ OptBufSize -= (AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);\r
+ PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, OptBufSize);\r
+ OptCnt++;\r
+ }\r
+\r
+ if (WindowSize != NULL) {\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = (UINT8 *) (ReqOpt[OptCnt-1].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);\r
+ OptBufSize -= (AsciiStrLen ((CHAR8 *) ReqOpt[OptCnt-1].ValueStr) + 1);\r
+ PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, OptBufSize);\r
OptCnt++;\r
}\r
\r
@param[in] Config Pointer to EFI_MTFTP4_CONFIG_DATA.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in] BufferPtr Pointer to buffer.\r
@param[in, out] BufferSize Pointer to buffer size.\r
@param[in] DontUseBuffer Indicates whether to use a receive buffer.\r
IN EFI_MTFTP4_CONFIG_DATA *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN UINT8 *BufferPtr,\r
IN OUT UINT64 *BufferSize,\r
IN BOOLEAN DontUseBuffer\r
{\r
EFI_MTFTP4_PROTOCOL *Mtftp4;\r
EFI_MTFTP4_TOKEN Token;\r
- EFI_MTFTP4_OPTION ReqOpt[1];\r
+ EFI_MTFTP4_OPTION ReqOpt[2];\r
UINT32 OptCnt;\r
- UINT8 OptBuf[128];\r
+ UINT8 BlksizeBuf[10];\r
+ UINT8 WindowsizeBuf[10];\r
EFI_STATUS Status;\r
\r
Status = EFI_DEVICE_ERROR;\r
}\r
\r
if (BlockSize != NULL) {\r
- ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
- ReqOpt[0].ValueStr = OptBuf;\r
- PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = BlksizeBuf;\r
+ PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, sizeof (BlksizeBuf));\r
+ OptCnt++;\r
+ }\r
+\r
+ if (WindowSize != NULL) {\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = WindowsizeBuf;\r
+ PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, sizeof (WindowsizeBuf));\r
OptCnt++;\r
}\r
\r
@param[in] Config Pointer to EFI_MTFTP4_CONFIG_DATA.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in] BufferPtr Pointer to buffer.\r
@param[in, out] BufferSize Pointer to buffer size.\r
@param[in] DontUseBuffer Indicates whether to use a receive buffer.\r
IN EFI_MTFTP4_CONFIG_DATA *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN UINT8 *BufferPtr,\r
IN OUT UINT64 *BufferSize,\r
IN BOOLEAN DontUseBuffer\r
{\r
EFI_MTFTP4_PROTOCOL *Mtftp4;\r
EFI_MTFTP4_TOKEN Token;\r
- EFI_MTFTP4_OPTION ReqOpt[1];\r
+ EFI_MTFTP4_OPTION ReqOpt[2];\r
UINT32 OptCnt;\r
- UINT8 OptBuf[128];\r
+ UINT8 BlksizeBuf[10];\r
+ UINT8 WindowsizeBuf[10];\r
EFI_STATUS Status;\r
\r
Status = EFI_DEVICE_ERROR;\r
}\r
\r
if (BlockSize != NULL) {\r
- ReqOpt[0].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
- ReqOpt[0].ValueStr = OptBuf;\r
- PxeBcUintnToAscDec (*BlockSize, ReqOpt[0].ValueStr, PXE_MTFTP_OPTBUF_MAXNUM_INDEX);\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = BlksizeBuf;\r
+ PxeBcUintnToAscDec (*BlockSize, ReqOpt[OptCnt].ValueStr, sizeof (BlksizeBuf));\r
+ OptCnt++;\r
+ }\r
+\r
+ if (WindowSize != NULL) {\r
+ ReqOpt[OptCnt].OptionStr = (UINT8 *) mMtftpOptions[PXE_MTFTP_OPTION_WINDOWSIZE_INDEX];\r
+ ReqOpt[OptCnt].ValueStr = WindowsizeBuf;\r
+ PxeBcUintnToAscDec (*WindowSize, ReqOpt[OptCnt].ValueStr, sizeof (WindowsizeBuf));\r
OptCnt++;\r
}\r
\r
@param[in] Config Pointer to configure data.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in, out] BufferSize Pointer to buffer size.\r
\r
@retval EFI_SUCCESS Successfully obtained the size of file.\r
IN VOID *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN OUT UINT64 *BufferSize\r
)\r
{\r
(EFI_MTFTP6_CONFIG_DATA *) Config,\r
Filename,\r
BlockSize,\r
+ WindowSize,\r
BufferSize\r
);\r
} else {\r
(EFI_MTFTP4_CONFIG_DATA *) Config,\r
Filename,\r
BlockSize,\r
+ WindowSize,\r
BufferSize\r
);\r
}\r
@param[in] Config Pointer to config data.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in] BufferPtr Pointer to buffer.\r
@param[in, out] BufferSize Pointer to buffer size.\r
@param[in] DontUseBuffer Indicates whether to use a receive buffer.\r
IN VOID *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN UINT8 *BufferPtr,\r
IN OUT UINT64 *BufferSize,\r
IN BOOLEAN DontUseBuffer\r
(EFI_MTFTP6_CONFIG_DATA *) Config,\r
Filename,\r
BlockSize,\r
+ WindowSize,\r
BufferPtr,\r
BufferSize,\r
DontUseBuffer\r
(EFI_MTFTP4_CONFIG_DATA *) Config,\r
Filename,\r
BlockSize,\r
+ WindowSize,\r
BufferPtr,\r
BufferSize,\r
DontUseBuffer\r
@param[in] Config Pointer to config data.\r
@param[in] Filename Pointer to boot file name.\r
@param[in] BlockSize Pointer to required block size.\r
+ @param[in] WindowSize Pointer to required window size.\r
@param[in] BufferPtr Pointer to buffer.\r
@param[in, out] BufferSize Pointer to buffer size.\r
@param[in] DontUseBuffer Indicatse whether to use a receive buffer.\r
IN VOID *Config,\r
IN UINT8 *Filename,\r
IN UINTN *BlockSize,\r
+ IN UINTN *WindowSize,\r
IN UINT8 *BufferPtr,\r
IN OUT UINT64 *BufferSize,\r
IN BOOLEAN DontUseBuffer\r
(EFI_MTFTP6_CONFIG_DATA *) Config,\r
Filename,\r
BlockSize,\r
+ WindowSize,\r
BufferPtr,\r
BufferSize,\r
DontUseBuffer\r
(EFI_MTFTP4_CONFIG_DATA *) Config,\r
Filename,\r
BlockSize,\r
+ WindowSize,\r
BufferPtr,\r
BufferSize,\r
DontUseBuffer\r