mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-24 07:31:41 +00:00
usb: chipidea: udc: manage dynamic amount of tds with a linked list
Instead of having a limited number of usable tds in the udc we use a linked list to support dynamic amount of needed tds for all special gadget types. This improves throughput. Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Reviewed-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
20a677fd63
commit
cc9e6c495b
3 changed files with 128 additions and 61 deletions
|
@ -162,6 +162,7 @@ static int ci_requests_show(struct seq_file *s, void *data)
|
|||
unsigned long flags;
|
||||
struct list_head *ptr = NULL;
|
||||
struct ci13xxx_req *req = NULL;
|
||||
struct td_node *node, *tmpnode;
|
||||
unsigned i, j, qsize = sizeof(struct ci13xxx_td)/sizeof(u32);
|
||||
|
||||
if (ci->role != CI_ROLE_GADGET) {
|
||||
|
@ -174,13 +175,17 @@ static int ci_requests_show(struct seq_file *s, void *data)
|
|||
list_for_each(ptr, &ci->ci13xxx_ep[i].qh.queue) {
|
||||
req = list_entry(ptr, struct ci13xxx_req, queue);
|
||||
|
||||
seq_printf(s, "EP=%02i: TD=%08X %s\n",
|
||||
i % (ci->hw_ep_max / 2), (u32)req->dma,
|
||||
((i < ci->hw_ep_max/2) ? "RX" : "TX"));
|
||||
list_for_each_entry_safe(node, tmpnode, &req->tds, td) {
|
||||
seq_printf(s, "EP=%02i: TD=%08X %s\n",
|
||||
i % (ci->hw_ep_max / 2),
|
||||
(u32)node->dma,
|
||||
((i < ci->hw_ep_max/2) ?
|
||||
"RX" : "TX"));
|
||||
|
||||
for (j = 0; j < qsize; j++)
|
||||
seq_printf(s, " %04X: %08X\n", j,
|
||||
*((u32 *)req->ptr + j));
|
||||
for (j = 0; j < qsize; j++)
|
||||
seq_printf(s, " %04X: %08X\n", j,
|
||||
*((u32 *)node->ptr + j));
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&ci->lock, flags);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue