Lines Matching refs:qset
28 static void qset_get_next_prev(struct whc *whc, struct whc_qset *qset, in qset_get_next_prev() argument
35 n = qset->list_node.next; in qset_get_next_prev()
38 p = qset->list_node.prev; in qset_get_next_prev()
47 static void asl_qset_insert_begin(struct whc *whc, struct whc_qset *qset) in asl_qset_insert_begin() argument
49 list_move(&qset->list_node, &whc->async_list); in asl_qset_insert_begin()
50 qset->in_sw_list = true; in asl_qset_insert_begin()
53 static void asl_qset_insert(struct whc *whc, struct whc_qset *qset) in asl_qset_insert() argument
57 qset_clear(whc, qset); in asl_qset_insert()
60 qset_get_next_prev(whc, qset, &next, &prev); in asl_qset_insert()
61 whc_qset_set_link_ptr(&qset->qh.link, next->qset_dma); in asl_qset_insert()
62 whc_qset_set_link_ptr(&prev->qh.link, qset->qset_dma); in asl_qset_insert()
63 qset->in_hw_list = true; in asl_qset_insert()
66 static void asl_qset_remove(struct whc *whc, struct whc_qset *qset) in asl_qset_remove() argument
70 qset_get_next_prev(whc, qset, &next, &prev); in asl_qset_remove()
72 list_move(&qset->list_node, &whc->async_removed_list); in asl_qset_remove()
73 qset->in_sw_list = false; in asl_qset_remove()
84 qset->in_hw_list = false; in asl_qset_remove()
97 static uint32_t process_qset(struct whc *whc, struct whc_qset *qset) in process_qset() argument
102 while (qset->ntds) { in process_qset()
106 t = qset->td_start; in process_qset()
107 td = &qset->qtd[qset->td_start]; in process_qset()
118 process_halted_qtd(whc, qset, td); in process_qset()
127 process_inactive_qtd(whc, qset, td); in process_qset()
130 if (!qset->remove) in process_qset()
131 update |= qset_add_qtds(whc, qset); in process_qset()
138 if (qset->remove && qset->ntds == 0) { in process_qset()
139 asl_qset_remove(whc, qset); in process_qset()
147 struct whc_qset *qset; in asl_start() local
149 qset = list_first_entry(&whc->async_list, struct whc_qset, list_node); in asl_start()
151 le_writeq(qset->qset_dma | QH_LINK_NTDS(8), whc->base + WUSBASYNCLISTADDR); in asl_start()
205 struct whc_qset *qset, *t; in scan_async_work() local
214 list_for_each_entry_safe_reverse(qset, t, &whc->async_list, list_node) { in scan_async_work()
215 if (!qset->in_hw_list) { in scan_async_work()
216 asl_qset_insert(whc, qset); in scan_async_work()
220 update |= process_qset(whc, qset); in scan_async_work()
241 list_for_each_entry_safe(qset, t, &whc->async_removed_list, list_node) { in scan_async_work()
242 qset_remove_complete(whc, qset); in scan_async_work()
243 if (qset->reset) { in scan_async_work()
244 qset_reset(whc, qset); in scan_async_work()
245 if (!list_empty(&qset->stds)) { in scan_async_work()
246 asl_qset_insert_begin(whc, qset); in scan_async_work()
267 struct whc_qset *qset; in asl_urb_enqueue() local
279 qset = get_qset(whc, urb, GFP_ATOMIC); in asl_urb_enqueue()
280 if (qset == NULL) in asl_urb_enqueue()
283 err = qset_add_urb(whc, qset, urb, GFP_ATOMIC); in asl_urb_enqueue()
285 if (!qset->in_sw_list && !qset->remove) in asl_urb_enqueue()
286 asl_qset_insert_begin(whc, qset); in asl_urb_enqueue()
311 struct whc_qset *qset = wurb->qset; in asl_urb_dequeue() local
323 list_for_each_entry_safe(std, t, &qset->stds, list_node) { in asl_urb_dequeue()
333 asl_qset_remove(whc, qset); in asl_urb_dequeue()
338 qset_remove_urb(whc, qset, urb, status); in asl_urb_dequeue()
348 void asl_qset_delete(struct whc *whc, struct whc_qset *qset) in asl_qset_delete() argument
350 qset->remove = 1; in asl_qset_delete()
352 qset_delete(whc, qset); in asl_qset_delete()
363 struct whc_qset *qset; in asl_init() local
365 qset = qset_alloc(whc, GFP_KERNEL); in asl_init()
366 if (qset == NULL) in asl_init()
369 asl_qset_insert_begin(whc, qset); in asl_init()
370 asl_qset_insert(whc, qset); in asl_init()
382 struct whc_qset *qset; in asl_clean_up() local
385 qset = list_first_entry(&whc->async_list, struct whc_qset, list_node); in asl_clean_up()
386 list_del(&qset->list_node); in asl_clean_up()
387 qset_free(whc, qset); in asl_clean_up()