diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-06-27 16:35:23 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-06-27 16:36:47 -0400 |
commit | 95a2424ff9221624c3944f3732f6cfacbb522ae4 (patch) | |
tree | 4ad6cb7607d9dba7f76d3cbb8f8ac305d359c9ea /drivers/usb | |
parent | 0af212ba8f123c2eba151af7726c34a50b127962 (diff) | |
parent | a9e758634f464ffb09344821a9f0b5a5c6df2b3e (diff) |
Merge branch 'for-usb-linus' of git+ssh://master.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-linus
* 'for-usb-linus' of git+ssh://master.kernel.org/pub/scm/linux/kernel/git/sarah/xhci:
USB: Fix up URB error codes to reflect implementation.
xhci: Always set urb->status to zero for isoc endpoints.
xhci: Add reset on resume quirk for asrock p67 host
xHCI 1.0: Incompatible Device Error
xHCI 1.0: Force Stopped Event(FSE)
xhci: Don't warn about zeroed bMaxBurst descriptor field.
USB: Free bandwidth when usb_disable_device is called.
xhci: Reject double add of active endpoints.
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/core/hub.c | 3 | ||||
-rw-r--r-- | drivers/usb/core/message.c | 15 | ||||
-rw-r--r-- | drivers/usb/host/xhci-mem.c | 2 | ||||
-rw-r--r-- | drivers/usb/host/xhci-pci.c | 8 | ||||
-rw-r--r-- | drivers/usb/host/xhci-ring.c | 30 | ||||
-rw-r--r-- | drivers/usb/host/xhci.c | 39 | ||||
-rw-r--r-- | drivers/usb/host/xhci.h | 3 |
7 files changed, 88 insertions, 12 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index c2ac08755f27..a428aa080a36 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -1634,6 +1634,7 @@ void usb_disconnect(struct usb_device **pdev) | |||
1634 | { | 1634 | { |
1635 | struct usb_device *udev = *pdev; | 1635 | struct usb_device *udev = *pdev; |
1636 | int i; | 1636 | int i; |
1637 | struct usb_hcd *hcd = bus_to_hcd(udev->bus); | ||
1637 | 1638 | ||
1638 | if (!udev) { | 1639 | if (!udev) { |
1639 | pr_debug ("%s nodev\n", __func__); | 1640 | pr_debug ("%s nodev\n", __func__); |
@@ -1661,7 +1662,9 @@ void usb_disconnect(struct usb_device **pdev) | |||
1661 | * so that the hardware is now fully quiesced. | 1662 | * so that the hardware is now fully quiesced. |
1662 | */ | 1663 | */ |
1663 | dev_dbg (&udev->dev, "unregistering device\n"); | 1664 | dev_dbg (&udev->dev, "unregistering device\n"); |
1665 | mutex_lock(hcd->bandwidth_mutex); | ||
1664 | usb_disable_device(udev, 0); | 1666 | usb_disable_device(udev, 0); |
1667 | mutex_unlock(hcd->bandwidth_mutex); | ||
1665 | usb_hcd_synchronize_unlinks(udev); | 1668 | usb_hcd_synchronize_unlinks(udev); |
1666 | 1669 | ||
1667 | usb_remove_ep_devs(&udev->ep0); | 1670 | usb_remove_ep_devs(&udev->ep0); |
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 5701e857392b..64c7ab4702df 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c | |||
@@ -1135,10 +1135,13 @@ void usb_disable_interface(struct usb_device *dev, struct usb_interface *intf, | |||
1135 | * Deallocates hcd/hardware state for the endpoints (nuking all or most | 1135 | * Deallocates hcd/hardware state for the endpoints (nuking all or most |
1136 | * pending urbs) and usbcore state for the interfaces, so that usbcore | 1136 | * pending urbs) and usbcore state for the interfaces, so that usbcore |
1137 | * must usb_set_configuration() before any interfaces could be used. | 1137 | * must usb_set_configuration() before any interfaces could be used. |
1138 | * | ||
1139 | * Must be called with hcd->bandwidth_mutex held. | ||
1138 | */ | 1140 | */ |
1139 | void usb_disable_device(struct usb_device *dev, int skip_ep0) | 1141 | void usb_disable_device(struct usb_device *dev, int skip_ep0) |
1140 | { | 1142 | { |
1141 | int i; | 1143 | int i; |
1144 | struct usb_hcd *hcd = bus_to_hcd(dev->bus); | ||
1142 | 1145 | ||
1143 | /* getting rid of interfaces will disconnect | 1146 | /* getting rid of interfaces will disconnect |
1144 | * any drivers bound to them (a key side effect) | 1147 | * any drivers bound to them (a key side effect) |
@@ -1172,6 +1175,16 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0) | |||
1172 | 1175 | ||
1173 | dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__, | 1176 | dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__, |
1174 | skip_ep0 ? "non-ep0" : "all"); | 1177 | skip_ep0 ? "non-ep0" : "all"); |
1178 | if (hcd->driver->check_bandwidth) { | ||
1179 | /* First pass: Cancel URBs, leave endpoint pointers intact. */ | ||
1180 | for (i = skip_ep0; i < 16; ++i) { | ||
1181 | usb_disable_endpoint(dev, i, false); | ||
1182 | usb_disable_endpoint(dev, i + USB_DIR_IN, false); | ||
1183 | } | ||
1184 | /* Remove endpoints from the host controller internal state */ | ||
1185 | usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL); | ||
1186 | /* Second pass: remove endpoint pointers */ | ||
1187 | } | ||
1175 | for (i = skip_ep0; i < 16; ++i) { | 1188 | for (i = skip_ep0; i < 16; ++i) { |
1176 | usb_disable_endpoint(dev, i, true); | 1189 | usb_disable_endpoint(dev, i, true); |
1177 | usb_disable_endpoint(dev, i + USB_DIR_IN, true); | 1190 | usb_disable_endpoint(dev, i + USB_DIR_IN, true); |
@@ -1727,6 +1740,7 @@ free_interfaces: | |||
1727 | /* if it's already configured, clear out old state first. | 1740 | /* if it's already configured, clear out old state first. |
1728 | * getting rid of old interfaces means unbinding their drivers. | 1741 | * getting rid of old interfaces means unbinding their drivers. |
1729 | */ | 1742 | */ |
1743 | mutex_lock(hcd->bandwidth_mutex); | ||
1730 | if (dev->state != USB_STATE_ADDRESS) | 1744 | if (dev->state != USB_STATE_ADDRESS) |
1731 | usb_disable_device(dev, 1); /* Skip ep0 */ | 1745 | usb_disable_device(dev, 1); /* Skip ep0 */ |
1732 | 1746 | ||
@@ -1739,7 +1753,6 @@ free_interfaces: | |||
1739 | * host controller will not allow submissions to dropped endpoints. If | 1753 | * host controller will not allow submissions to dropped endpoints. If |
1740 | * this call fails, the device state is unchanged. | 1754 | * this call fails, the device state is unchanged. |
1741 | */ | 1755 | */ |
1742 | mutex_lock(hcd->bandwidth_mutex); | ||
1743 | ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL); | 1756 | ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL); |
1744 | if (ret < 0) { | 1757 | if (ret < 0) { |
1745 | mutex_unlock(hcd->bandwidth_mutex); | 1758 | mutex_unlock(hcd->bandwidth_mutex); |
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index 0f8e1d29a858..fcb7f7efc86d 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c | |||
@@ -1215,8 +1215,6 @@ int xhci_endpoint_init(struct xhci_hcd *xhci, | |||
1215 | ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet)); | 1215 | ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet)); |
1216 | /* dig out max burst from ep companion desc */ | 1216 | /* dig out max burst from ep companion desc */ |
1217 | max_packet = ep->ss_ep_comp.bMaxBurst; | 1217 | max_packet = ep->ss_ep_comp.bMaxBurst; |
1218 | if (!max_packet) | ||
1219 | xhci_warn(xhci, "WARN no SS endpoint bMaxBurst\n"); | ||
1220 | ep_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(max_packet)); | 1218 | ep_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(max_packet)); |
1221 | break; | 1219 | break; |
1222 | case USB_SPEED_HIGH: | 1220 | case USB_SPEED_HIGH: |
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index 17541d09eabb..cb16de213f64 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c | |||
@@ -29,6 +29,9 @@ | |||
29 | #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 | 29 | #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 |
30 | #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 | 30 | #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 |
31 | 31 | ||
32 | #define PCI_VENDOR_ID_ETRON 0x1b6f | ||
33 | #define PCI_DEVICE_ID_ASROCK_P67 0x7023 | ||
34 | |||
32 | static const char hcd_name[] = "xhci_hcd"; | 35 | static const char hcd_name[] = "xhci_hcd"; |
33 | 36 | ||
34 | /* called after powerup, by probe or system-pm "wakeup" */ | 37 | /* called after powerup, by probe or system-pm "wakeup" */ |
@@ -134,6 +137,11 @@ static int xhci_pci_setup(struct usb_hcd *hcd) | |||
134 | xhci->quirks |= XHCI_EP_LIMIT_QUIRK; | 137 | xhci->quirks |= XHCI_EP_LIMIT_QUIRK; |
135 | xhci->limit_active_eps = 64; | 138 | xhci->limit_active_eps = 64; |
136 | } | 139 | } |
140 | if (pdev->vendor == PCI_VENDOR_ID_ETRON && | ||
141 | pdev->device == PCI_DEVICE_ID_ASROCK_P67) { | ||
142 | xhci->quirks |= XHCI_RESET_ON_RESUME; | ||
143 | xhci_dbg(xhci, "QUIRK: Resetting on resume\n"); | ||
144 | } | ||
137 | 145 | ||
138 | /* Make sure the HC is halted. */ | 146 | /* Make sure the HC is halted. */ |
139 | retval = xhci_halt(xhci); | 147 | retval = xhci_halt(xhci); |
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 800f417c7309..70cacbbe7fb9 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, | |||
1733 | frame->status = -EOVERFLOW; | 1733 | frame->status = -EOVERFLOW; |
1734 | skip_td = true; | 1734 | skip_td = true; |
1735 | break; | 1735 | break; |
1736 | case COMP_DEV_ERR: | ||
1736 | case COMP_STALL: | 1737 | case COMP_STALL: |
1737 | frame->status = -EPROTO; | 1738 | frame->status = -EPROTO; |
1738 | skip_td = true; | 1739 | skip_td = true; |
@@ -1767,9 +1768,6 @@ static int process_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td, | |||
1767 | } | 1768 | } |
1768 | } | 1769 | } |
1769 | 1770 | ||
1770 | if ((idx == urb_priv->length - 1) && *status == -EINPROGRESS) | ||
1771 | *status = 0; | ||
1772 | |||
1773 | return finish_td(xhci, td, event_trb, event, ep, status, false); | 1771 | return finish_td(xhci, td, event_trb, event, ep, status, false); |
1774 | } | 1772 | } |
1775 | 1773 | ||
@@ -1787,8 +1785,7 @@ static int skip_isoc_td(struct xhci_hcd *xhci, struct xhci_td *td, | |||
1787 | idx = urb_priv->td_cnt; | 1785 | idx = urb_priv->td_cnt; |
1788 | frame = &td->urb->iso_frame_desc[idx]; | 1786 | frame = &td->urb->iso_frame_desc[idx]; |
1789 | 1787 | ||
1790 | /* The transfer is partly done */ | 1788 | /* The transfer is partly done. */ |
1791 | *status = -EXDEV; | ||
1792 | frame->status = -EXDEV; | 1789 | frame->status = -EXDEV; |
1793 | 1790 | ||
1794 | /* calc actual length */ | 1791 | /* calc actual length */ |
@@ -2016,6 +2013,10 @@ static int handle_tx_event(struct xhci_hcd *xhci, | |||
2016 | TRB_TO_SLOT_ID(le32_to_cpu(event->flags)), | 2013 | TRB_TO_SLOT_ID(le32_to_cpu(event->flags)), |
2017 | ep_index); | 2014 | ep_index); |
2018 | goto cleanup; | 2015 | goto cleanup; |
2016 | case COMP_DEV_ERR: | ||
2017 | xhci_warn(xhci, "WARN: detect an incompatible device"); | ||
2018 | status = -EPROTO; | ||
2019 | break; | ||
2019 | case COMP_MISSED_INT: | 2020 | case COMP_MISSED_INT: |
2020 | /* | 2021 | /* |
2021 | * When encounter missed service error, one or more isoc tds | 2022 | * When encounter missed service error, one or more isoc tds |
@@ -2063,6 +2064,20 @@ static int handle_tx_event(struct xhci_hcd *xhci, | |||
2063 | /* Is this a TRB in the currently executing TD? */ | 2064 | /* Is this a TRB in the currently executing TD? */ |
2064 | event_seg = trb_in_td(ep_ring->deq_seg, ep_ring->dequeue, | 2065 | event_seg = trb_in_td(ep_ring->deq_seg, ep_ring->dequeue, |
2065 | td->last_trb, event_dma); | 2066 | td->last_trb, event_dma); |
2067 | |||
2068 | /* | ||
2069 | * Skip the Force Stopped Event. The event_trb(event_dma) of FSE | ||
2070 | * is not in the current TD pointed by ep_ring->dequeue because | ||
2071 | * that the hardware dequeue pointer still at the previous TRB | ||
2072 | * of the current TD. The previous TRB maybe a Link TD or the | ||
2073 | * last TRB of the previous TD. The command completion handle | ||
2074 | * will take care the rest. | ||
2075 | */ | ||
2076 | if (!event_seg && trb_comp_code == COMP_STOP_INVAL) { | ||
2077 | ret = 0; | ||
2078 | goto cleanup; | ||
2079 | } | ||
2080 | |||
2066 | if (!event_seg) { | 2081 | if (!event_seg) { |
2067 | if (!ep->skip || | 2082 | if (!ep->skip || |
2068 | !usb_endpoint_xfer_isoc(&td->urb->ep->desc)) { | 2083 | !usb_endpoint_xfer_isoc(&td->urb->ep->desc)) { |
@@ -2158,6 +2173,11 @@ cleanup: | |||
2158 | urb->transfer_buffer_length, | 2173 | urb->transfer_buffer_length, |
2159 | status); | 2174 | status); |
2160 | spin_unlock(&xhci->lock); | 2175 | spin_unlock(&xhci->lock); |
2176 | /* EHCI, UHCI, and OHCI always unconditionally set the | ||
2177 | * urb->status of an isochronous endpoint to 0. | ||
2178 | */ | ||
2179 | if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) | ||
2180 | status = 0; | ||
2161 | usb_hcd_giveback_urb(bus_to_hcd(urb->dev->bus), urb, status); | 2181 | usb_hcd_giveback_urb(bus_to_hcd(urb->dev->bus), urb, status); |
2162 | spin_lock(&xhci->lock); | 2182 | spin_lock(&xhci->lock); |
2163 | } | 2183 | } |
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 06e7023258d0..f5fe1ac301ab 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
@@ -759,6 +759,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) | |||
759 | msleep(100); | 759 | msleep(100); |
760 | 760 | ||
761 | spin_lock_irq(&xhci->lock); | 761 | spin_lock_irq(&xhci->lock); |
762 | if (xhci->quirks & XHCI_RESET_ON_RESUME) | ||
763 | hibernated = true; | ||
762 | 764 | ||
763 | if (!hibernated) { | 765 | if (!hibernated) { |
764 | /* step 1: restore register */ | 766 | /* step 1: restore register */ |
@@ -1401,6 +1403,7 @@ int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev, | |||
1401 | u32 added_ctxs; | 1403 | u32 added_ctxs; |
1402 | unsigned int last_ctx; | 1404 | unsigned int last_ctx; |
1403 | u32 new_add_flags, new_drop_flags, new_slot_info; | 1405 | u32 new_add_flags, new_drop_flags, new_slot_info; |
1406 | struct xhci_virt_device *virt_dev; | ||
1404 | int ret = 0; | 1407 | int ret = 0; |
1405 | 1408 | ||
1406 | ret = xhci_check_args(hcd, udev, ep, 1, true, __func__); | 1409 | ret = xhci_check_args(hcd, udev, ep, 1, true, __func__); |
@@ -1425,11 +1428,25 @@ int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev, | |||
1425 | return 0; | 1428 | return 0; |
1426 | } | 1429 | } |
1427 | 1430 | ||
1428 | in_ctx = xhci->devs[udev->slot_id]->in_ctx; | 1431 | virt_dev = xhci->devs[udev->slot_id]; |
1429 | out_ctx = xhci->devs[udev->slot_id]->out_ctx; | 1432 | in_ctx = virt_dev->in_ctx; |
1433 | out_ctx = virt_dev->out_ctx; | ||
1430 | ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx); | 1434 | ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx); |
1431 | ep_index = xhci_get_endpoint_index(&ep->desc); | 1435 | ep_index = xhci_get_endpoint_index(&ep->desc); |
1432 | ep_ctx = xhci_get_ep_ctx(xhci, out_ctx, ep_index); | 1436 | ep_ctx = xhci_get_ep_ctx(xhci, out_ctx, ep_index); |
1437 | |||
1438 | /* If this endpoint is already in use, and the upper layers are trying | ||
1439 | * to add it again without dropping it, reject the addition. | ||
1440 | */ | ||
1441 | if (virt_dev->eps[ep_index].ring && | ||
1442 | !(le32_to_cpu(ctrl_ctx->drop_flags) & | ||
1443 | xhci_get_endpoint_flag(&ep->desc))) { | ||
1444 | xhci_warn(xhci, "Trying to add endpoint 0x%x " | ||
1445 | "without dropping it.\n", | ||
1446 | (unsigned int) ep->desc.bEndpointAddress); | ||
1447 | return -EINVAL; | ||
1448 | } | ||
1449 | |||
1433 | /* If the HCD has already noted the endpoint is enabled, | 1450 | /* If the HCD has already noted the endpoint is enabled, |
1434 | * ignore this request. | 1451 | * ignore this request. |
1435 | */ | 1452 | */ |
@@ -1445,8 +1462,7 @@ int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev, | |||
1445 | * process context, not interrupt context (or so documenation | 1462 | * process context, not interrupt context (or so documenation |
1446 | * for usb_set_interface() and usb_set_configuration() claim). | 1463 | * for usb_set_interface() and usb_set_configuration() claim). |
1447 | */ | 1464 | */ |
1448 | if (xhci_endpoint_init(xhci, xhci->devs[udev->slot_id], | 1465 | if (xhci_endpoint_init(xhci, virt_dev, udev, ep, GFP_NOIO) < 0) { |
1449 | udev, ep, GFP_NOIO) < 0) { | ||
1450 | dev_dbg(&udev->dev, "%s - could not initialize ep %#x\n", | 1466 | dev_dbg(&udev->dev, "%s - could not initialize ep %#x\n", |
1451 | __func__, ep->desc.bEndpointAddress); | 1467 | __func__, ep->desc.bEndpointAddress); |
1452 | return -ENOMEM; | 1468 | return -ENOMEM; |
@@ -1537,6 +1553,11 @@ static int xhci_configure_endpoint_result(struct xhci_hcd *xhci, | |||
1537 | "and endpoint is not disabled.\n"); | 1553 | "and endpoint is not disabled.\n"); |
1538 | ret = -EINVAL; | 1554 | ret = -EINVAL; |
1539 | break; | 1555 | break; |
1556 | case COMP_DEV_ERR: | ||
1557 | dev_warn(&udev->dev, "ERROR: Incompatible device for endpoint " | ||
1558 | "configure command.\n"); | ||
1559 | ret = -ENODEV; | ||
1560 | break; | ||
1540 | case COMP_SUCCESS: | 1561 | case COMP_SUCCESS: |
1541 | dev_dbg(&udev->dev, "Successful Endpoint Configure command\n"); | 1562 | dev_dbg(&udev->dev, "Successful Endpoint Configure command\n"); |
1542 | ret = 0; | 1563 | ret = 0; |
@@ -1571,6 +1592,11 @@ static int xhci_evaluate_context_result(struct xhci_hcd *xhci, | |||
1571 | xhci_dbg_ctx(xhci, virt_dev->out_ctx, 1); | 1592 | xhci_dbg_ctx(xhci, virt_dev->out_ctx, 1); |
1572 | ret = -EINVAL; | 1593 | ret = -EINVAL; |
1573 | break; | 1594 | break; |
1595 | case COMP_DEV_ERR: | ||
1596 | dev_warn(&udev->dev, "ERROR: Incompatible device for evaluate " | ||
1597 | "context command.\n"); | ||
1598 | ret = -ENODEV; | ||
1599 | break; | ||
1574 | case COMP_MEL_ERR: | 1600 | case COMP_MEL_ERR: |
1575 | /* Max Exit Latency too large error */ | 1601 | /* Max Exit Latency too large error */ |
1576 | dev_warn(&udev->dev, "WARN: Max Exit Latency too large\n"); | 1602 | dev_warn(&udev->dev, "WARN: Max Exit Latency too large\n"); |
@@ -2853,6 +2879,11 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev) | |||
2853 | dev_warn(&udev->dev, "Device not responding to set address.\n"); | 2879 | dev_warn(&udev->dev, "Device not responding to set address.\n"); |
2854 | ret = -EPROTO; | 2880 | ret = -EPROTO; |
2855 | break; | 2881 | break; |
2882 | case COMP_DEV_ERR: | ||
2883 | dev_warn(&udev->dev, "ERROR: Incompatible device for address " | ||
2884 | "device command.\n"); | ||
2885 | ret = -ENODEV; | ||
2886 | break; | ||
2856 | case COMP_SUCCESS: | 2887 | case COMP_SUCCESS: |
2857 | xhci_dbg(xhci, "Successful Address Device command\n"); | 2888 | xhci_dbg(xhci, "Successful Address Device command\n"); |
2858 | break; | 2889 | break; |
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 7d1ea3bf5e1f..d8bbf5ccb10d 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h | |||
@@ -874,6 +874,8 @@ struct xhci_transfer_event { | |||
874 | #define COMP_PING_ERR 20 | 874 | #define COMP_PING_ERR 20 |
875 | /* Event Ring is full */ | 875 | /* Event Ring is full */ |
876 | #define COMP_ER_FULL 21 | 876 | #define COMP_ER_FULL 21 |
877 | /* Incompatible Device Error */ | ||
878 | #define COMP_DEV_ERR 22 | ||
877 | /* Missed Service Error - HC couldn't service an isoc ep within interval */ | 879 | /* Missed Service Error - HC couldn't service an isoc ep within interval */ |
878 | #define COMP_MISSED_INT 23 | 880 | #define COMP_MISSED_INT 23 |
879 | /* Successfully stopped command ring */ | 881 | /* Successfully stopped command ring */ |
@@ -1308,6 +1310,7 @@ struct xhci_hcd { | |||
1308 | */ | 1310 | */ |
1309 | #define XHCI_EP_LIMIT_QUIRK (1 << 5) | 1311 | #define XHCI_EP_LIMIT_QUIRK (1 << 5) |
1310 | #define XHCI_BROKEN_MSI (1 << 6) | 1312 | #define XHCI_BROKEN_MSI (1 << 6) |
1313 | #define XHCI_RESET_ON_RESUME (1 << 7) | ||
1311 | unsigned int num_active_eps; | 1314 | unsigned int num_active_eps; |
1312 | unsigned int limit_active_eps; | 1315 | unsigned int limit_active_eps; |
1313 | /* There are two roothubs to keep track of bus suspend info for */ | 1316 | /* There are two roothubs to keep track of bus suspend info for */ |