aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/xhci-ring.c
diff options
context:
space:
mode:
authorAlex He <alex.he@amd.com>2011-06-08 18:34:06 +0800
committerSarah Sharp <sarah.a.sharp@linux.intel.com>2011-06-17 11:28:08 -0700
commitf6ba6fe2d913da6707a71a413d6ec8ae98d6ce18 (patch)
tree2da2e6bc2b35659e5372825ecfd575ffad70ca5e /drivers/usb/host/xhci-ring.c
parente1cf486d881d853d710e2d86a7adfc5fd260990f (diff)
downloadkernel_samsung_smdk4412-f6ba6fe2d913da6707a71a413d6ec8ae98d6ce18.zip
kernel_samsung_smdk4412-f6ba6fe2d913da6707a71a413d6ec8ae98d6ce18.tar.gz
kernel_samsung_smdk4412-f6ba6fe2d913da6707a71a413d6ec8ae98d6ce18.tar.bz2
xHCI 1.0: Incompatible Device Error
It is one new TRB Completion Code for the xHCI spec v1.0. Asserted if the xHC detects a problem with a device that does not allow it to be successfully accessed, e.g. due to a device compliance or compatibility problem. This error may be returned by any command or transfer, and is fatal as far as the Slot is concerned. Return -EPROTO by urb->status or frame->status of ISOC for transfer case. And return -ENODEV for configure endpoint command, evaluate context command and address device command if there is an incompatible Device Error. The error codes will be sent back to the USB core to decide how to do. It's unnecessary for other commands because after the three commands run successfully means that the device has been accepted. Signed-off-by: Alex He <alex.he@amd.com> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Diffstat (limited to 'drivers/usb/host/xhci-ring.c')
-rw-r--r--drivers/usb/host/xhci-ring.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 0c00849..436332a 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -1733,6 +1733,7 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td,
frame->status = -EOVERFLOW;
skip_td = true;
break;
+ case COMP_DEV_ERR:
case COMP_STALL:
frame->status = -EPROTO;
skip_td = true;
@@ -2016,6 +2017,10 @@ static int handle_tx_event(struct xhci_hcd *xhci,
TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
ep_index);
goto cleanup;
+ case COMP_DEV_ERR:
+ xhci_warn(xhci, "WARN: detect an incompatible device");
+ status = -EPROTO;
+ break;
case COMP_MISSED_INT:
/*
* When encounter missed service error, one or more isoc tds