aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/xhci-mem.c
diff options
context:
space:
mode:
authorAndiry Xu <andiry.xu@amd.com>2012-03-05 04:49:34 -0500
committerSarah Sharp <sarah.a.sharp@linux.intel.com>2012-03-13 12:29:55 -0400
commitb008df60c6369ba0290fa7daa177375407a12e07 (patch)
tree05a59c4a4d8d624b18ad0844949841f36b241c17 /drivers/usb/host/xhci-mem.c
parent3fe4fe083d3355537565b2b0a678807513dfa013 (diff)
xHCI: count free TRBs on transfer ring
In the past, the room_on_ring() check was implemented by walking all over the ring, which is wasteful and complicated. Count the number of free TRBs instead. The free TRBs number should be updated when enqueue/dequeue pointer is updated, or upon the completion of a set dequeue pointer command. Signed-off-by: Andiry Xu <andiry.xu@amd.com> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> Tested-by: Paul Zimmerman <Paul.Zimmerman@synopsys.com>
Diffstat (limited to 'drivers/usb/host/xhci-mem.c')
-rw-r--r--drivers/usb/host/xhci-mem.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index bdea4de867b4..212012c97df3 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -135,6 +135,12 @@ static void xhci_initialize_ring_info(struct xhci_ring *ring)
135 /* Not necessary for new rings, but needed for re-initialized rings */ 135 /* Not necessary for new rings, but needed for re-initialized rings */
136 ring->enq_updates = 0; 136 ring->enq_updates = 0;
137 ring->deq_updates = 0; 137 ring->deq_updates = 0;
138
139 /*
140 * Each segment has a link TRB, and leave an extra TRB for SW
141 * accounting purpose
142 */
143 ring->num_trbs_free = ring->num_segs * (TRBS_PER_SEGMENT - 1) - 1;
138} 144}
139 145
140/** 146/**