• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/usb/host/whci/

Lines Matching defs:qset

28 static void qset_get_next_prev(struct whc *whc, struct whc_qset *qset,
35 n = qset->list_node.next;
38 p = qset->list_node.prev;
47 static void asl_qset_insert_begin(struct whc *whc, struct whc_qset *qset)
49 list_move(&qset->list_node, &whc->async_list);
50 qset->in_sw_list = true;
53 static void asl_qset_insert(struct whc *whc, struct whc_qset *qset)
57 qset_clear(whc, 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);
63 qset->in_hw_list = true;
66 static void asl_qset_remove(struct whc *whc, struct whc_qset *qset)
70 qset_get_next_prev(whc, qset, &next, &prev);
72 list_move(&qset->list_node, &whc->async_removed_list);
73 qset->in_sw_list = false;
84 qset->in_hw_list = false;
89 * qset.
95 * WUSBCMD_ASYNC_QSET_RM if a halted qset was removed).
97 static uint32_t process_qset(struct whc *whc, struct whc_qset *qset)
102 while (qset->ntds) {
106 t = qset->td_start;
107 td = &qset->qtd[qset->td_start];
118 process_halted_qtd(whc, qset, td);
120 because the qset was either removed or
127 process_inactive_qtd(whc, qset, td);
130 if (!qset->remove)
131 update |= qset_add_qtds(whc, qset);
135 * Remove this qset from the ASL if requested, but only if has
138 if (qset->remove && qset->ntds == 0) {
139 asl_qset_remove(whc, qset);
147 struct whc_qset *qset;
149 qset = list_first_entry(&whc->async_list, struct whc_qset, list_node);
151 le_writeq(qset->qset_dma | QH_LINK_NTDS(8), whc->base + WUSBASYNCLISTADDR);
197 * Process each qset in the ASL in turn and then signal the WHC that
205 struct whc_qset *qset, *t;
214 list_for_each_entry_safe_reverse(qset, t, &whc->async_list, list_node) {
215 if (!qset->in_hw_list) {
216 asl_qset_insert(whc, qset);
220 update |= process_qset(whc, qset);
236 * If the qset was to be reset, do so and reinsert it into the
241 list_for_each_entry_safe(qset, t, &whc->async_removed_list, list_node) {
242 qset_remove_complete(whc, qset);
243 if (qset->reset) {
244 qset_reset(whc, qset);
245 if (!list_empty(&qset->stds)) {
246 asl_qset_insert_begin(whc, qset);
261 * The qset for the endpoint is obtained and the urb queued on to it.
267 struct whc_qset *qset;
279 qset = get_qset(whc, urb, GFP_ATOMIC);
280 if (qset == NULL)
283 err = qset_add_urb(whc, qset, urb, GFP_ATOMIC);
285 if (!qset->in_sw_list && !qset->remove)
286 asl_qset_insert_begin(whc, qset);
299 * asl_urb_dequeue - remove an URB (qset) from the async list.
305 * queue, otherwise the qset must be removed from the ASL so the qTDs
311 struct whc_qset *qset = wurb->qset;
323 list_for_each_entry_safe(std, t, &qset->stds, list_node) {
329 std->qtd = NULL; /* so this std is re-added when the qset is */
333 asl_qset_remove(whc, qset);
338 qset_remove_urb(whc, qset, urb, status);
346 * asl_qset_delete - delete a qset from the ASL
348 void asl_qset_delete(struct whc *whc, struct whc_qset *qset)
350 qset->remove = 1;
352 qset_delete(whc, qset);
358 * A dummy qset with no qTDs is added to the ASL to simplify removing
359 * qsets (no need to stop the ASL when the last qset is removed).
363 struct whc_qset *qset;
365 qset = qset_alloc(whc, GFP_KERNEL);
366 if (qset == NULL)
369 asl_qset_insert_begin(whc, qset);
370 asl_qset_insert(whc, qset);
378 * The ASL is stopped and empty except for the dummy qset.
382 struct whc_qset *qset;
385 qset = list_first_entry(&whc->async_list, struct whc_qset, list_node);
386 list_del(&qset->list_node);
387 qset_free(whc, qset);