mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 04:30:56 +07:00
USB: xhci: Refactor test for vendor-specific completion codes.
All commands that can be issued to the xHCI hardware can come back with vendor-specific "informational" completion codes. These are to be treated like a successful completion code. Refactor out the code to test for the range of these codes and print debugging messages. Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
a1d78c16bd
commit
b45b506911
@ -1080,6 +1080,20 @@ static int xhci_requires_manual_halt_cleanup(struct xhci_hcd *xhci,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int xhci_is_vendor_info_code(struct xhci_hcd *xhci, unsigned int trb_comp_code)
|
||||||
|
{
|
||||||
|
if (trb_comp_code >= 224 && trb_comp_code <= 255) {
|
||||||
|
/* Vendor defined "informational" completion code,
|
||||||
|
* treat as not-an-error.
|
||||||
|
*/
|
||||||
|
xhci_dbg(xhci, "Vendor defined info completion code %u\n",
|
||||||
|
trb_comp_code);
|
||||||
|
xhci_dbg(xhci, "Treating code as success.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this function returns an error condition, it means it got a Transfer
|
* If this function returns an error condition, it means it got a Transfer
|
||||||
* event with a corrupted Slot ID, Endpoint ID, or TRB DMA address.
|
* event with a corrupted Slot ID, Endpoint ID, or TRB DMA address.
|
||||||
@ -1196,13 +1210,7 @@ static int handle_tx_event(struct xhci_hcd *xhci,
|
|||||||
status = -ENOSR;
|
status = -ENOSR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (trb_comp_code >= 224 && trb_comp_code <= 255) {
|
if (xhci_is_vendor_info_code(xhci, trb_comp_code)) {
|
||||||
/* Vendor defined "informational" completion code,
|
|
||||||
* treat as not-an-error.
|
|
||||||
*/
|
|
||||||
xhci_dbg(xhci, "Vendor defined info completion code %u\n",
|
|
||||||
trb_comp_code);
|
|
||||||
xhci_dbg(xhci, "Treating code as success.\n");
|
|
||||||
status = 0;
|
status = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1276,6 +1276,7 @@ dma_addr_t xhci_trb_virt_to_dma(struct xhci_segment *seg, union xhci_trb *trb);
|
|||||||
struct xhci_segment *trb_in_td(struct xhci_segment *start_seg,
|
struct xhci_segment *trb_in_td(struct xhci_segment *start_seg,
|
||||||
union xhci_trb *start_trb, union xhci_trb *end_trb,
|
union xhci_trb *start_trb, union xhci_trb *end_trb,
|
||||||
dma_addr_t suspect_dma);
|
dma_addr_t suspect_dma);
|
||||||
|
int xhci_is_vendor_info_code(struct xhci_hcd *xhci, unsigned int trb_comp_code);
|
||||||
void xhci_ring_cmd_db(struct xhci_hcd *xhci);
|
void xhci_ring_cmd_db(struct xhci_hcd *xhci);
|
||||||
void *xhci_setup_one_noop(struct xhci_hcd *xhci);
|
void *xhci_setup_one_noop(struct xhci_hcd *xhci);
|
||||||
void xhci_handle_event(struct xhci_hcd *xhci);
|
void xhci_handle_event(struct xhci_hcd *xhci);
|
||||||
|
Loading…
Reference in New Issue
Block a user