]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/XhciDxe: Error handling enhancement for XhcExecTransfer
authorFeng Tian <feng.tian@intel.com>
Wed, 8 Jul 2015 05:54:21 +0000 (05:54 +0000)
committererictian <erictian@Edk2>
Wed, 8 Jul 2015 05:54:21 +0000 (05:54 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Baraneedharan Anbazhagan <anbazhagan@hp.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17879 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Pci/XhciDxe/XhciSched.c

index 8ff194ea9b2b7846f49070f4e366bbc5a472a613..1bdf1a4aa0f16b8d8da55f65a7189fa7b925dcf4 100644 (file)
@@ -1027,7 +1027,7 @@ IsTransferRingTrb (
   @return Whether the result of URB transfer is finialized.\r
 \r
 **/\r
-EFI_STATUS\r
+BOOLEAN\r
 XhcCheckUrbResult (\r
   IN  USB_XHCI_INSTANCE   *Xhc,\r
   IN  URB                 *Urb\r
@@ -1058,7 +1058,6 @@ XhcCheckUrbResult (
 \r
   if (XhcIsHalt (Xhc) || XhcIsSysError (Xhc)) {\r
     Urb->Result |= EFI_USB_ERR_SYSTEM;\r
-    Status       = EFI_DEVICE_ERROR;\r
     goto EXIT;\r
   }\r
 \r
@@ -1189,7 +1188,7 @@ EXIT:
     XhcWriteRuntimeReg (Xhc, XHC_ERDP_OFFSET + 4, XHC_HIGH_32BIT (PhyAddr));\r
   }\r
 \r
-  return Status;\r
+  return Urb->Finished;\r
 }\r
 \r
 \r
@@ -1219,6 +1218,7 @@ XhcExecTransfer (
   UINTN                   Loop;\r
   UINT8                   SlotId;\r
   UINT8                   Dci;\r
+  BOOLEAN                 Finished;\r
 \r
   if (CmdTransfer) {\r
     SlotId = 0;\r
@@ -1241,8 +1241,8 @@ XhcExecTransfer (
   XhcRingDoorBell (Xhc, SlotId, Dci);\r
 \r
   for (Index = 0; Index < Loop; Index++) {\r
-    Status = XhcCheckUrbResult (Xhc, Urb);\r
-    if (Urb->Finished) {\r
+    Finished = XhcCheckUrbResult (Xhc, Urb);\r
+    if (Finished) {\r
       break;\r
     }\r
     gBS->Stall (XHC_1_MICROSECOND);\r
@@ -1250,6 +1250,9 @@ XhcExecTransfer (
 \r
   if (Index == Loop) {\r
     Urb->Result = EFI_USB_ERR_TIMEOUT;\r
+    Status      = EFI_TIMEOUT;\r
+  } else if (Urb->Result != EFI_USB_NOERROR) {\r
+    Status      = EFI_DEVICE_ERROR;\r
   }\r
 \r
   return Status;\r