Browse Source

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>
Andiry Xu 13 years ago
parent
commit
3fe4fe083d
2 changed files with 4 additions and 0 deletions
  1. 2 0
      drivers/usb/host/xhci-mem.c
  2. 2 0
      drivers/usb/host/xhci.h

+ 2 - 0
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) {

+ 2 - 0
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;
 };