• 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

2  * Wireless Host Controller (WHC) qset management.
30 struct whc_qset *qset;
33 qset = dma_pool_alloc(whc->qset_pool, mem_flags, &dma);
34 if (qset == NULL)
36 memset(qset, 0, sizeof(struct whc_qset));
38 qset->qset_dma = dma;
39 qset->whc = whc;
41 INIT_LIST_HEAD(&qset->list_node);
42 INIT_LIST_HEAD(&qset->stds);
44 return qset;
48 * qset_fill_qh - fill the static endpoint state in a qset's QHead
49 * @qset: the qset whose QH needs initializing with static endpoint
53 static void qset_fill_qh(struct whc *whc, struct whc_qset *qset, struct urb *urb)
63 qset->max_packet = le16_to_cpu(urb->ep->desc.wMaxPacketSize);
65 epcd = (struct usb_wireless_ep_comp_descriptor *)qset->ep->extra;
67 qset->max_seq = epcd->bMaxSequence;
68 qset->max_burst = epcd->bMaxBurst;
70 qset->max_seq = 2;
71 qset->max_burst = 1;
90 qset->qh.info1 = cpu_to_le32(
95 | QH_INFO1_MAX_PKT_LEN(qset->max_packet)
97 qset->qh.info2 = cpu_to_le32(
98 QH_INFO2_BURST(qset->max_burst)
102 | QH_INFO2_MAX_SEQ(qset->max_seq - 1)
104 qset->qh.info3 = cpu_to_le32(
109 qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
113 * qset_clear - clear fields in a qset so it may be reinserted into a
119 void qset_clear(struct whc *whc, struct whc_qset *qset)
121 qset->td_start = qset->td_end = qset->ntds = 0;
123 qset->qh.link = cpu_to_le32(QH_LINK_NTDS(8) | QH_LINK_T);
124 qset->qh.status = qset->qh.status & QH_STATUS_SEQ_MASK;
125 qset->qh.err_count = 0;
126 qset->qh.scratch[0] = 0;
127 qset->qh.scratch[1] = 0;
128 qset->qh.scratch[2] = 0;
130 memset(&qset->qh.overlay, 0, sizeof(qset->qh.overlay));
132 init_completion(&qset->remove_complete);
136 * qset_reset - reset endpoint state in a qset.
138 * Clears the sequence number and current window. This qset must not
141 void qset_reset(struct whc *whc, struct whc_qset *qset)
143 qset->reset = 0;
145 qset->qh.status &= ~QH_STATUS_SEQ_MASK;
146 qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
150 * get_qset - get the qset for an async endpoint
152 * A new qset is created if one does not already exist.
157 struct whc_qset *qset;
159 qset = urb->ep->hcpriv;
160 if (qset == NULL) {
161 qset = qset_alloc(whc, mem_flags);
162 if (qset == NULL)
165 qset->ep = urb->ep;
166 urb->ep->hcpriv = qset;
167 qset_fill_qh(whc, qset, urb);
169 return qset;
172 void qset_remove_complete(struct whc *whc, struct whc_qset *qset)
174 qset->remove = 0;
175 list_del_init(&qset->list_node);
176 complete(&qset->remove_complete);
180 * qset_add_qtds - add qTDs for an URB to a qset
185 enum whc_update qset_add_qtds(struct whc *whc, struct whc_qset *qset)
190 list_for_each_entry(std, &qset->stds, list_node) {
194 if (qset->ntds >= WHCI_QSET_TD_MAX
195 || (qset->pause_after_urb && std->urb != qset->pause_after_urb))
201 qtd = std->qtd = &qset->qtd[qset->td_end];
221 ialt = (qset->td_end + std->ntds_remaining) % WHCI_QSET_TD_MAX;
224 qset->pause_after_urb = std->urb;
234 if (QH_STATUS_TO_ICUR(qset->qh.status) == qset->td_end)
237 if (++qset->td_end >= WHCI_QSET_TD_MAX)
238 qset->td_end = 0;
239 qset->ntds++;
246 * qset_remove_qtd - remove the first qTD from a qset.
251 static void qset_remove_qtd(struct whc *whc, struct whc_qset *qset)
253 qset->qtd[qset->td_start].status = 0;
255 if (++qset->td_start >= WHCI_QSET_TD_MAX)
256 qset->td_start = 0;
257 qset->ntds--;
327 static void qset_remove_qtds(struct whc *whc, struct whc_qset *qset,
332 list_for_each_entry_safe(std, t, &qset->stds, list_node) {
336 qset_remove_qtd(whc, qset);
344 static void qset_free_stds(struct whc_qset *qset, struct urb *urb)
348 list_for_each_entry_safe(std, t, &qset->stds, list_node) {
350 qset_free_std(qset->whc, std);
391 struct whc_qset *qset = wurb->qset;
392 struct whc *whc = qset->whc;
405 qset_remove_urb(whc, qset, wurb->urb, wurb->status);
409 static struct whc_std *qset_new_std(struct whc *whc, struct whc_qset *qset,
422 list_add_tail(&std->list_node, &qset->stds);
427 static int qset_add_urb_sg(struct whc *whc, struct whc_qset *qset, struct urb *urb,
474 if (std && std->len % qset->max_packet != 0)
476 std = qset_new_std(whc, qset, urb, mem_flags);
493 dma_len = (QTD_MAX_XFER_SIZE / qset->max_packet)
494 * qset->max_packet - std->len;
525 list_for_each_entry(std, &qset->stds, list_node) {
543 static int qset_add_urb_sg_linearize(struct whc *whc, struct whc_qset *qset,
556 max_std_len = qset->max_burst * qset->max_packet;
574 std = qset_new_std(whc, qset, urb, mem_flags);
605 list_for_each_entry(std, &qset->stds, list_node) {
622 * qset_add_urb - add an urb to the qset's queue.
628 int qset_add_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb,
641 wurb->qset = qset;
646 ret = qset_add_urb_sg(whc, qset, urb, mem_flags);
648 qset_free_stds(qset, urb);
649 ret = qset_add_urb_sg_linearize(whc, qset, urb, mem_flags);
668 std = qset_new_std(whc, qset, urb, mem_flags);
687 qset_free_stds(qset, urb);
696 void qset_remove_urb(struct whc *whc, struct whc_qset *qset,
742 void process_inactive_qtd(struct whc *whc, struct whc_qset *qset,
745 struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node);
759 qset_remove_qtd(whc, qset);
767 qset_remove_qtds(whc, qset, urb);
768 qset_remove_urb(whc, qset, urb, get_urb_status_from_qtd(urb, status));
776 qset->td_start = qset->td_end
777 = QH_STATUS_TO_ICUR(le16_to_cpu(qset->qh.status));
778 qset->pause_after_urb = NULL;
782 void process_halted_qtd(struct whc *whc, struct whc_qset *qset,
785 struct whc_std *std = list_first_entry(&qset->stds, struct whc_std, list_node);
791 qset_remove_qtds(whc, qset, urb);
792 qset_remove_urb(whc, qset, urb, urb_status);
794 list_for_each_entry(std, &qset->stds, list_node) {
795 if (qset->ntds == 0)
797 qset_remove_qtd(whc, qset);
801 qset->remove = 1;
804 void qset_free(struct whc *whc, struct whc_qset *qset)
806 dma_pool_free(whc->qset_pool, qset, qset->qset_dma);
810 * qset_delete - wait for a qset to be unused, then free it.
812 void qset_delete(struct whc *whc, struct whc_qset *qset)
814 wait_for_completion(&qset->remove_complete);
815 qset_free(whc, qset);