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>
if (!ring)
return NULL;
+ ring->num_segs = num_segs;
INIT_LIST_HEAD(&ring->td_list);
ring->type = type;
if (num_segs == 0)
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) {
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;
*/
u32 cycle_state;
unsigned int stream_id;
+ unsigned int num_segs;
enum xhci_ring_type type;
bool last_td_was_short;
};