]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommunicationLibUsb3Transfer.c
Revert "DebugUsb3: Fix GCC build failures"
[mirror_edk2.git] / SourceLevelDebugPkg / Library / DebugCommunicationLibUsb3 / DebugCommunicationLibUsb3Transfer.c
index deb802e4adf4d9cd35a3fe6445de77190e6d6d28..dbff493624077f88655be0a9a529ad7d50d38d45 100644 (file)
@@ -277,7 +277,7 @@ XhcCheckUrbResult (
       //\r
       // The length of data which were transferred.\r
       //\r
-      CheckedUrb->Completed += (CheckedUrb->DataLen - EvtTrb->Length);\r
+      CheckedUrb->Completed += (((TRANSFER_TRB_NORMAL*)TRBPtr)->Length - EvtTrb->Length);\r
     } else {\r
       CheckedUrb->Result  |= EFI_USB_ERR_TIMEOUT;\r
     }\r
@@ -356,58 +356,31 @@ XhcExecTransfer (
   )\r
 {\r
   TRANSFER_RING           *Ring;\r
-  UINT64                  Begin;\r
-  UINT64                  TimeoutTicker;\r
-  UINT64                  TimerRound;\r
   TRB_TEMPLATE            *Trb;\r
+  UINTN                   Loop;\r
+  UINTN                   Index;\r
 \r
-  Begin         = 0;\r
-  TimeoutTicker = 0;  \r
-  TimerRound    = 0;\r
-\r
-  XhcRingDoorBell (Handle, Urb);\r
-\r
-  if (Timeout != 0) {\r
-    Begin = GetPerformanceCounter ();\r
-    TimeoutTicker = DivU64x32 (\r
-                      MultU64x64 (\r
-                        Handle->TimerFrequency,\r
-                        Timeout\r
-                        ),\r
-                      1000000u\r
-                      );\r
-    TimerRound = DivU64x64Remainder (\r
-                   TimeoutTicker,\r
-                   DivU64x32 (Handle->TimerCycle, 2),\r
-                   &TimeoutTicker\r
-                   );\r
+  Loop = Timeout / XHC_DEBUG_PORT_1_MILLISECOND;\r
+  if (Timeout == 0) {\r
+    Loop = 0xFFFFFFFF;\r
   }\r
-\r
+  XhcRingDoorBell (Handle, Urb);\r
   //\r
   // Event Ring Not Empty bit can only be set to 1 by XHC after ringing door bell with some delay.\r
   //\r
-  while (TRUE) {\r
-    if (Timeout != 0) {\r
-      if (TimerRound == 0) {\r
-        if (IsTimerTimeout (Handle, Begin, TimeoutTicker)) {\r
-          //\r
-          // If time out occurs.\r
-          //\r
-          Urb->Result |= EFI_USB_ERR_TIMEOUT;\r
-          break;\r
-        }\r
-      } else {\r
-        if (IsTimerTimeout (Handle, Begin, DivU64x32 (Handle->TimerCycle, 2))) {\r
-          TimerRound --;\r
-        }\r
-      }\r
-    }\r
+  for (Index = 0; Index < Loop; Index++) {\r
     XhcCheckUrbResult (Handle, Urb);\r
     if (Urb->Finished) {\r
       break;\r
     }\r
+    MicroSecondDelay (XHC_DEBUG_PORT_1_MILLISECOND);\r
   }\r
-  \r
+  if (Index == Loop) {\r
+    //\r
+    // If time out occurs.\r
+    //\r
+    Urb->Result |= EFI_USB_ERR_TIMEOUT;\r
+  } \r
   //\r
   // If URB transfer is error, restore transfer ring to original value before URB transfer\r
   // This will make the current transfer TRB is always at the latest unused one in transfer ring.\r