\r
(C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>\r
Copyright (c) 2006 - 2018, 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<BR>\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
UINT16 Block;\r
UINT64 Start;\r
UINT32 DataLen;\r
+ UINT64 BlockCounter;\r
BOOLEAN Completed;\r
\r
Completed = FALSE;\r
// Remove this block number from the file hole. If Mtftp4RemoveBlockNum\r
// returns EFI_NOT_FOUND, the block has been saved, don't save it again.\r
// Note that : For bigger files, allowing the block counter to roll over\r
- // to accept transfers of unlimited size. So TotalBlock is memorised as\r
+ // to accept transfers of unlimited size. So BlockCounter is memorised as\r
// continuous block counter.\r
//\r
- Status = Mtftp4RemoveBlockNum (&Instance->Blocks, Block, Completed, &Instance->TotalBlock);\r
+ Status = Mtftp4RemoveBlockNum (&Instance->Blocks, Block, Completed, &BlockCounter);\r
\r
if (Status == EFI_NOT_FOUND) {\r
return EFI_SUCCESS;\r
}\r
\r
if (Token->Buffer != NULL) {\r
- Start = MultU64x32 (Instance->TotalBlock - 1, Instance->BlkSize);\r
+ Start = MultU64x32 (BlockCounter - 1, Instance->BlkSize);\r
\r
if (Start + DataLen <= Token->BufferSize) {\r
CopyMem ((UINT8 *) Token->Buffer + Start, Packet->Data.Data, DataLen);\r
ASSERT (Expected >= 0);\r
\r
//\r
- // If we are active and received an unexpected packet, transmit\r
+ // If we are active (Master) and received an unexpected packet, transmit\r
// the ACK for the block we received, then restart receiving the\r
- // expected one. If we are passive, save the block.\r
+ // expected one. If we are passive (Slave), save the block.\r
//\r
if (Instance->Master && (Expected != BlockNum)) {\r
//\r
return Status;\r
}\r
\r
+ //\r
+ // Record the total received and saved block number.\r
+ //\r
+ Instance->TotalBlock ++;\r
+\r
//\r
// Reset the passive client's timer whenever it received a\r
// valid data packet.\r