18 #include <linux/kernel.h>
24 #include "../../wusbcore/wusbhc.h"
28 static void qset_get_next_prev(
struct whc *
whc,
struct whc_qset *qset,
47 static void asl_qset_insert_begin(
struct whc *whc,
struct whc_qset *qset)
53 static void asl_qset_insert(
struct whc *whc,
struct whc_qset *qset)
60 qset_get_next_prev(whc, qset, &next, &prev);
61 whc_qset_set_link_ptr(&qset->
qh.link, next->
qset_dma);
62 whc_qset_set_link_ptr(&prev->
qh.link, qset->
qset_dma);
66 static void asl_qset_remove(
struct whc *whc,
struct whc_qset *qset)
70 qset_get_next_prev(whc, qset, &next, &prev);
83 whc_qset_set_link_ptr(&prev->
qh.link, next->
qset_dma);
139 asl_qset_remove(whc, qset);
208 spin_lock_irq(&whc->
lock);
216 asl_qset_insert(whc, qset);
220 update |= process_qset(whc, qset);
223 spin_unlock_irq(&whc->
lock);
239 spin_lock_irq(&whc->
lock);
245 if (!list_empty(&qset->
stds)) {
246 asl_qset_insert_begin(whc, qset);
252 spin_unlock_irq(&whc->
lock);
275 spin_unlock_irqrestore(&whc->
lock, flags);
286 asl_qset_insert_begin(whc, qset);
290 spin_unlock_irqrestore(&whc->
lock, flags);
310 struct whc_urb *wurb = urb->hcpriv;
313 bool has_qtd =
false;
324 if (std->
urb == urb) {
333 asl_qset_remove(whc, qset);
340 spin_unlock_irqrestore(&whc->
lock, flags);
369 asl_qset_insert_begin(whc, qset);
370 asl_qset_insert(whc, qset);