• 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:whc

28 static void qset_get_next_prev(struct whc *whc, struct whc_qset *qset,
33 BUG_ON(list_empty(&whc->async_list));
36 if (n == &whc->async_list)
39 if (p == &whc->async_list)
47 static void asl_qset_insert_begin(struct whc *whc, struct whc_qset *qset)
49 list_move(&qset->list_node, &whc->async_list);
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);
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);
79 if (list_empty(&whc->async_list))
97 static uint32_t process_qset(struct whc *whc, struct whc_qset *qset)
118 process_halted_qtd(whc, qset, td);
127 process_inactive_qtd(whc, qset, td);
131 update |= qset_add_qtds(whc, qset);
139 asl_qset_remove(whc, qset);
145 void asl_start(struct whc *whc)
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);
153 whc_write_wusbcmd(whc, WUSBCMD_ASYNC_EN, WUSBCMD_ASYNC_EN);
154 whci_wait_for(&whc->umc->dev, whc->base + WUSBSTS,
159 void asl_stop(struct whc *whc)
161 whc_write_wusbcmd(whc, WUSBCMD_ASYNC_EN, 0);
162 whci_wait_for(&whc->umc->dev, whc->base + WUSBSTS,
169 * @whc: the WHCI HC
176 void asl_update(struct whc *whc, uint32_t wusbcmd)
178 struct wusbhc *wusbhc = &whc->wusbhc;
183 whc_write_wusbcmd(whc, wusbcmd, wusbcmd);
185 whc->async_list_wq,
186 (le_readl(whc->base + WUSBCMD) & WUSBCMD_ASYNC_UPDATED) == 0,
189 whc_hw_error(whc, "ASL update timeout");
204 struct whc *whc = container_of(work, struct whc, async_work);
208 spin_lock_irq(&whc->lock);
214 list_for_each_entry_safe_reverse(qset, t, &whc->async_list, list_node) {
216 asl_qset_insert(whc, qset);
220 update |= process_qset(whc, qset);
223 spin_unlock_irq(&whc->lock);
229 asl_update(whc, wusbcmd);
239 spin_lock_irq(&whc->lock);
241 list_for_each_entry_safe(qset, t, &whc->async_removed_list, list_node) {
242 qset_remove_complete(whc, qset);
244 qset_reset(whc, qset);
246 asl_qset_insert_begin(whc, qset);
247 queue_work(whc->workqueue, &whc->async_work);
252 spin_unlock_irq(&whc->lock);
257 * @whc: the WHCI host controller
265 int asl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags)
271 spin_lock_irqsave(&whc->lock, flags);
273 err = usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb);
275 spin_unlock_irqrestore(&whc->lock, flags);
279 qset = get_qset(whc, urb, GFP_ATOMIC);
283 err = qset_add_urb(whc, qset, urb, GFP_ATOMIC);
286 asl_qset_insert_begin(whc, qset);
288 usb_hcd_unlink_urb_from_ep(&whc->wusbhc.usb_hcd, urb);
290 spin_unlock_irqrestore(&whc->lock, flags);
293 queue_work(whc->workqueue, &whc->async_work);
300 * @whc: the WHCI host controller
308 int asl_urb_dequeue(struct whc *whc, struct urb *urb, int status)
317 spin_lock_irqsave(&whc->lock, flags);
319 ret = usb_hcd_check_unlink_urb(&whc->wusbhc.usb_hcd, urb, status);
327 qset_free_std(whc, std);
333 asl_qset_remove(whc, qset);
336 queue_work(whc->workqueue, &wurb->dequeue_work);
338 qset_remove_urb(whc, qset, urb, status);
340 spin_unlock_irqrestore(&whc->lock, flags);
348 void asl_qset_delete(struct whc *whc, struct whc_qset *qset)
351 queue_work(whc->workqueue, &whc->async_work);
352 qset_delete(whc, qset);
361 int asl_init(struct whc *whc)
365 qset = qset_alloc(whc, GFP_KERNEL);
369 asl_qset_insert_begin(whc, qset);
370 asl_qset_insert(whc, qset);
380 void asl_clean_up(struct whc *whc)
384 if (!list_empty(&whc->async_list)) {
385 qset = list_first_entry(&whc->async_list, struct whc_qset, list_node);
387 qset_free(whc, qset);