UINT16 WindowSize;\r
\r
//\r
- // Record the total received block number and the already acked block number.\r
+ // Record the total received and saved block number.\r
//\r
UINT64 TotalBlock;\r
+ \r
+ //\r
+ // Record the acked block number.\r
+ //\r
UINT64 AckedBlock;\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
\r
@param Head The block range list to remove from\r
@param Num The block number to remove\r
- @param Completed Whether Num is the last block number\r
- @param TotalBlock The continuous block number in all\r
+ @param Completed Whether Num is the last block number.\r
+ @param BlockCounter The continuous block counter instead of the value after roll-over.\r
\r
@retval EFI_NOT_FOUND The block number isn't in the block range list\r
@retval EFI_SUCCESS The block number has been removed from the list\r
IN LIST_ENTRY *Head,\r
IN UINT16 Num,\r
IN BOOLEAN Completed,\r
- OUT UINT64 *TotalBlock\r
+ OUT UINT64 *BlockCounter\r
)\r
{\r
MTFTP4_BLOCK_RANGE *Range;\r
// wrap to zero, because this is the simplest to implement. Here we choose\r
// this solution.\r
//\r
- *TotalBlock = Num;\r
+ *BlockCounter = Num;\r
\r
if (Range->Round > 0) {\r
- *TotalBlock += Range->Bound + MultU64x32 ((UINTN) (Range->Round -1), (UINT32) (Range->Bound + 1)) + 1;\r
+ *BlockCounter += Range->Bound + MultU64x32 ((UINTN) (Range->Round -1), (UINT32) (Range->Bound + 1)) + 1;\r
}\r
\r
if (Range->Start > Range->Bound) {\r
\r
@param Head The block range list to remove from\r
@param Num The block number to remove\r
- @param Completed Wether Num is the last block number\r
- @param TotalBlock The continuous block number in all\r
+ @param Completed Whether Num is the last block number.\r
+ @param BlockCounter The continuous block counter instead of the value after roll-over.\r
\r
@retval EFI_NOT_FOUND The block number isn't in the block range list\r
@retval EFI_SUCCESS The block number has been removed from the list\r
IN LIST_ENTRY *Head,\r
IN UINT16 Num,\r
IN BOOLEAN Completed,\r
- OUT UINT64 *TotalBlock\r
+ OUT UINT64 *BlockCounter\r
);\r
\r
/**\r
{\r
UINT16 AckNum;\r
INTN Expected;\r
- UINT64 TotalBlock;\r
+ UINT64 BlockCounter;\r
\r
*Completed = FALSE;\r
AckNum = NTOHS (Packet->Ack.Block[0]);\r
//\r
// Remove the acked block number, if this is the last block number,\r
// tell the Mtftp4WrqInput to finish the transfer. This is the last\r
- // block number if the block range are empty..\r
+ // block number if the block range are empty.\r
//\r
- Mtftp4RemoveBlockNum (&Instance->Blocks, AckNum, *Completed,&TotalBlock);\r
+ Mtftp4RemoveBlockNum (&Instance->Blocks, AckNum, *Completed, &BlockCounter);\r
\r
Expected = Mtftp4GetNextBlockNum (&Instance->Blocks);\r
\r