Mailbox->SequenceNo = (UINT8) Value;\r
break;\r
case DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX:\r
+ DebugAgentMsgPrint (DEBUG_AGENT_INFO, "Update HostSequenceNo to %x\n", Value);\r
Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->HostSequenceNo, sizeof(UINT8))\r
- CalculateSum8 ((UINT8 *)&Value, sizeof(UINT8));\r
Mailbox->HostSequenceNo = (UINT8) Value;\r
@retval EFI_SUCCESS Read the symbol in BreakSymbol.\r
@retval EFI_CRC_ERROR CRC check fail.\r
@retval EFI_TIMEOUT Timeout occurs when reading debug packet.\r
+ @retval EFI_DEVICE_ERROR Receive the old or responsed packet.\r
\r
**/\r
EFI_STATUS\r
)\r
{\r
UINT16 Crc;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+\r
//\r
// Has received start symbol, try to read the rest part\r
//\r
DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, FALSE, (UINT8 *)DebugHeader, DebugHeader->Length);\r
return EFI_CRC_ERROR;\r
}\r
-\r
- UpdateMailboxContent (GetMailboxPointer(), DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, DebugHeader->SequenceNo);\r
- return EFI_SUCCESS;\r
+ Mailbox = GetMailboxPointer();\r
+ if (((DebugHeader->Command & DEBUG_COMMAND_RESPONSE) != 0) &&\r
+ (DebugHeader->SequenceNo == (UINT8) (Mailbox->HostSequenceNo + 1))) {\r
+ //\r
+ // Only updagte HostSequenceNo for new command packet \r
+ //\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, DebugHeader->SequenceNo);\r
+ return EFI_SUCCESS;\r
+ } else {\r
+ //\r
+ // If one old command or response packet received, skip it\r
+ //\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
}\r
\r
/**\r