From 56b1927aa107e65070879a53562b7bcdc1e918d8 Mon Sep 17 00:00:00 2001 From: Feng Tian Date: Wed, 8 Jul 2015 05:54:44 +0000 Subject: [PATCH] MdeModulePkg/XhciPei: Error handling enhancement for XhcPeiExecTransfer Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Feng Tian Reviewed-by: Baraneedharan Anbazhagan 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 | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c b/MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c index 14a5c0ec83..0f35517ec6 100644 --- a/MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c +++ b/MdeModulePkg/Bus/Pci/XhciPei/XhciSched.c @@ -553,7 +553,7 @@ XhcPeiIsTransferRingTrb ( @return Whether the result of URB transfer is finialized. **/ -EFI_STATUS +BOOLEAN XhcPeiCheckUrbResult ( IN PEI_XHC_DEV *Xhc, IN URB *Urb @@ -582,7 +582,6 @@ XhcPeiCheckUrbResult ( if (XhcPeiIsHalt (Xhc) || XhcPeiIsSysError (Xhc)) { Urb->Result |= EFI_USB_ERR_SYSTEM; - Status = EFI_DEVICE_ERROR; goto EXIT; } @@ -711,7 +710,7 @@ EXIT: XhcPeiWriteRuntimeReg (Xhc, XHC_ERDP_OFFSET + 4, XHC_HIGH_32BIT (PhyAddr)); } - return Status; + return Urb->Finished; } /** @@ -740,6 +739,7 @@ XhcPeiExecTransfer ( UINTN Loop; UINT8 SlotId; UINT8 Dci; + BOOLEAN Finished; if (CmdTransfer) { SlotId = 0; @@ -761,8 +761,8 @@ XhcPeiExecTransfer ( XhcPeiRingDoorBell (Xhc, SlotId, Dci); for (Index = 0; Index < Loop; Index++) { - Status = XhcPeiCheckUrbResult (Xhc, Urb); - if (Urb->Finished) { + Finished = XhcPeiCheckUrbResult (Xhc, Urb); + if (Finished) { break; } MicroSecondDelay (XHC_1_MICROSECOND); @@ -770,6 +770,9 @@ XhcPeiExecTransfer ( if (Index == Loop) { Urb->Result = EFI_USB_ERR_TIMEOUT; + Status = EFI_TIMEOUT; + } else if (Urb->Result != EFI_USB_NOERROR) { + Status = EFI_DEVICE_ERROR; } return Status; -- 2.39.2