Commit 0d58a1a0 authored by Mathias Nyman's avatar Mathias Nyman Committed by Greg Kroah-Hartman

xhci: cleanup and refactor td_to_noop()

No functional changes but a few debugging outputs removed
Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 36da3a1d
...@@ -514,54 +514,32 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci, ...@@ -514,54 +514,32 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci,
* of this TD.) This is used to remove partially enqueued isoc TDs from a ring. * of this TD.) This is used to remove partially enqueued isoc TDs from a ring.
*/ */
static void td_to_noop(struct xhci_hcd *xhci, struct xhci_ring *ep_ring, static void td_to_noop(struct xhci_hcd *xhci, struct xhci_ring *ep_ring,
struct xhci_td *cur_td, bool flip_cycle) struct xhci_td *td, bool flip_cycle)
{ {
struct xhci_segment *cur_seg; struct xhci_segment *seg = td->start_seg;
union xhci_trb *cur_trb; union xhci_trb *trb = td->first_trb;
for (cur_seg = cur_td->start_seg, cur_trb = cur_td->first_trb; while (1) {
true; if (trb_is_link(trb)) {
next_trb(xhci, ep_ring, &cur_seg, &cur_trb)) { /* unchain chained link TRBs */
if (trb_is_link(cur_trb)) { trb->link.control &= cpu_to_le32(~TRB_CHAIN);
/* Unchain any chained Link TRBs, but
* leave the pointers intact.
*/
cur_trb->generic.field[3] &= cpu_to_le32(~TRB_CHAIN);
/* Flip the cycle bit (link TRBs can't be the first
* or last TRB).
*/
if (flip_cycle)
cur_trb->generic.field[3] ^=
cpu_to_le32(TRB_CYCLE);
xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
"Cancel (unchain) link TRB");
xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
"Address = %p (0x%llx dma); "
"in seg %p (0x%llx dma)",
cur_trb,
(unsigned long long)xhci_trb_virt_to_dma(cur_seg, cur_trb),
cur_seg,
(unsigned long long)cur_seg->dma);
} else { } else {
cur_trb->generic.field[0] = 0; trb->generic.field[0] = 0;
cur_trb->generic.field[1] = 0; trb->generic.field[1] = 0;
cur_trb->generic.field[2] = 0; trb->generic.field[2] = 0;
/* Preserve only the cycle bit of this TRB */ /* Preserve only the cycle bit of this TRB */
cur_trb->generic.field[3] &= cpu_to_le32(TRB_CYCLE); trb->generic.field[3] &= cpu_to_le32(TRB_CYCLE);
/* Flip the cycle bit except on the first or last TRB */ trb->generic.field[3] |= cpu_to_le32(
if (flip_cycle && cur_trb != cur_td->first_trb &&
cur_trb != cur_td->last_trb)
cur_trb->generic.field[3] ^=
cpu_to_le32(TRB_CYCLE);
cur_trb->generic.field[3] |= cpu_to_le32(
TRB_TYPE(TRB_TR_NOOP)); TRB_TYPE(TRB_TR_NOOP));
xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
"TRB to noop at offset 0x%llx",
(unsigned long long)
xhci_trb_virt_to_dma(cur_seg, cur_trb));
} }
if (cur_trb == cur_td->last_trb) /* flip cycle if asked to */
if (flip_cycle && trb != td->first_trb && trb != td->last_trb)
trb->generic.field[3] ^= cpu_to_le32(TRB_CYCLE);
if (trb == td->last_trb)
break; break;
next_trb(xhci, ep_ring, &seg, &trb);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment