diff options
author | Andiry Xu <andiry.xu@amd.com> | 2012-03-05 17:49:33 +0800 |
---|---|---|
committer | Sarah Sharp <sarah.a.sharp@linux.intel.com> | 2012-03-13 09:29:46 -0700 |
commit | 3fe4fe083d3355537565b2b0a678807513dfa013 (patch) | |
tree | 69b30ecc405abdc1c5799db3147574edc6c1334d /drivers/usb | |
parent | 3b72fca09d7aed0c1a390370eb3f3f4f0480702a (diff) |
xHCI: store ring's last segment and segment numbers
Store the ring's last segment pointer and number of segments for ring
expansion usage.
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')
-rw-r--r-- | drivers/usb/host/xhci-mem.c | 2 | ||||
-rw-r--r-- | drivers/usb/host/xhci.h | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index 1699df9f256..bdea4de867b 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -154,6 +154,7 @@ static struct xhci_ring *xhci_ring_alloc(struct xhci_hcd *xhci, if (!ring) return NULL; + ring->num_segs = num_segs; INIT_LIST_HEAD(&ring->td_list); ring->type = type; if (num_segs == 0) @@ -177,6 +178,7 @@ static struct xhci_ring *xhci_ring_alloc(struct xhci_hcd *xhci, num_segs--; } xhci_link_segments(xhci, prev, ring->first_seg, type); + ring->last_seg = prev; /* Only event ring does not use link TRB */ if (type != TYPE_EVENT) { diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index eb369a1723b..2337a8e80b6 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1262,6 +1262,7 @@ enum xhci_ring_type { struct xhci_ring { struct xhci_segment *first_seg; + struct xhci_segment *last_seg; union xhci_trb *enqueue; struct xhci_segment *enq_seg; unsigned int enq_updates; @@ -1276,6 +1277,7 @@ struct xhci_ring { */ u32 cycle_state; unsigned int stream_id; + unsigned int num_segs; enum xhci_ring_type type; bool last_td_was_short; }; |