]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Only save HostSequenceNo for new command in Debug Timer handler.
authorJeff Fan <jeff.fan@intel.com>
Fri, 20 Dec 2013 05:49:15 +0000 (05:49 +0000)
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 20 Dec 2013 05:49:15 +0000 (05:49 +0000)
Signed-off-by: Jeff Fan <jeff.fan@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15013 6f19259b-4bc3-4df7-8a09-765794883524

SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/DebugAgent.c

index 239cf63f6b155ac864a3bc63f7ec26ac4eb1ac4d..91b29af82a001554f64279d90b7d9ef604803d6f 100644 (file)
@@ -374,6 +374,7 @@ UpdateMailboxContent (
     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
@@ -572,6 +573,7 @@ DebugAgentDataMsgPrint (
   @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
@@ -581,6 +583,8 @@ ReadRemainingBreakPacket (
   )\r
 {\r
   UINT16                     Crc;\r
+  DEBUG_AGENT_MAILBOX        *Mailbox;\r
+\r
   //\r
   // Has received start symbol, try to read the rest part\r
   //\r
@@ -599,9 +603,20 @@ ReadRemainingBreakPacket (
     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