]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/XhciPei: Error handling enhancement for XhcPeiExecTransfer
authorFeng Tian <feng.tian@intel.com>
Wed, 8 Jul 2015 05:54:44 +0000 (05:54 +0000)
committererictian <erictian@Edk2>
Wed, 8 Jul 2015 05:54:44 +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@17880 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c

index 14a5c0ec832fd1941803b10af9d57e1a3bd78854..0f35517ec62d846c349d51867fb5f8e6ef20a928 100644 (file)
@@ -553,7 +553,7 @@ XhcPeiIsTransferRingTrb (
   @return Whether the result of URB transfer is finialized.\r
 \r
 **/\r
-EFI_STATUS\r
+BOOLEAN\r
 XhcPeiCheckUrbResult (\r
   IN PEI_XHC_DEV            *Xhc,\r
   IN URB                    *Urb\r
@@ -582,7 +582,6 @@ XhcPeiCheckUrbResult (
 \r
   if (XhcPeiIsHalt (Xhc) || XhcPeiIsSysError (Xhc)) {\r
     Urb->Result |= EFI_USB_ERR_SYSTEM;\r
-    Status       = EFI_DEVICE_ERROR;\r
     goto EXIT;\r
   }\r
 \r
@@ -711,7 +710,7 @@ EXIT:
     XhcPeiWriteRuntimeReg (Xhc, XHC_ERDP_OFFSET + 4, XHC_HIGH_32BIT (PhyAddr));\r
   }\r
 \r
-  return Status;\r
+  return Urb->Finished;\r
 }\r
 \r
 /**\r
@@ -740,6 +739,7 @@ XhcPeiExecTransfer (
   UINTN         Loop;\r
   UINT8         SlotId;\r
   UINT8         Dci;\r
+  BOOLEAN       Finished;\r
 \r
   if (CmdTransfer) {\r
     SlotId = 0;\r
@@ -761,8 +761,8 @@ XhcPeiExecTransfer (
   XhcPeiRingDoorBell (Xhc, SlotId, Dci);\r
 \r
   for (Index = 0; Index < Loop; Index++) {\r
-    Status = XhcPeiCheckUrbResult (Xhc, Urb);\r
-    if (Urb->Finished) {\r
+    Finished = XhcPeiCheckUrbResult (Xhc, Urb);\r
+    if (Finished) {\r
       break;\r
     }\r
     MicroSecondDelay (XHC_1_MICROSECOND);\r
@@ -770,6 +770,9 @@ XhcPeiExecTransfer (
 \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