Lines Matching defs:qtd

40 		struct isp1760_qtd *qtd);
135 interrupt handler may touch this qtd! */
137 /* QTD_RETIRE: transfer error/abort qtd */
337 static void alloc_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd)
342 WARN_ON(qtd->payload_addr);
344 if (!qtd->length)
348 if (priv->memory_pool[i].size >= qtd->length &&
351 qtd->payload_addr = priv->memory_pool[i].start;
357 static void free_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd)
362 if (!qtd->payload_addr)
366 if (priv->memory_pool[i].start == qtd->payload_addr) {
369 qtd->payload_addr = 0;
375 __func__, qtd->payload_addr);
377 qtd->payload_addr = 0;
513 static int last_qtd_of_urb(struct isp1760_qtd *qtd, struct isp1760_qh *qh)
517 if (list_is_last(&qtd->qtd_list, &qh->qtd_list))
520 urb = qtd->urb;
521 qtd = list_entry(qtd->qtd_list.next, typeof(*qtd), qtd_list);
522 return (qtd->urb != urb);
526 #define EHCI_TUNE_CERR 3 /* 0-3 qtd retries; 0 == don't stop */
534 struct isp1760_qtd *qtd, struct ptd *ptd)
544 maxpacket = usb_maxpacket(qtd->urb->dev, qtd->urb->pipe,
545 usb_pipeout(qtd->urb->pipe));
551 ptd->dw0 |= TO_DW0_LENGTH(qtd->length);
553 ptd->dw0 |= TO_DW0_ENDPOINT(usb_pipeendpoint(qtd->urb->pipe));
556 ptd->dw1 = usb_pipeendpoint(qtd->urb->pipe) >> 1;
557 ptd->dw1 |= TO_DW1_DEVICE_ADDR(usb_pipedevice(qtd->urb->pipe));
558 ptd->dw1 |= TO_DW1_PID_TOKEN(qtd->packet_type);
560 if (usb_pipebulk(qtd->urb->pipe))
562 else if (usb_pipeint(qtd->urb->pipe))
565 if (qtd->urb->dev->speed != USB_SPEED_HIGH) {
569 if (qtd->urb->dev->speed == USB_SPEED_LOW)
572 ptd->dw1 |= TO_DW1_PORT_NUM(qtd->urb->dev->ttport);
573 ptd->dw1 |= TO_DW1_HUB_NUM(qtd->urb->dev->tt->hub->devnum);
576 if (usb_pipeint(qtd->urb->pipe) &&
577 (qtd->urb->dev->speed == USB_SPEED_LOW))
584 if (usb_pipecontrol(qtd->urb->pipe) ||
585 usb_pipebulk(qtd->urb->pipe))
590 ptd->dw2 |= TO_DW2_DATA_START_ADDR(base_to_chip(qtd->payload_addr));
596 if (usb_pipecontrol(qtd->urb->pipe)) {
597 if (qtd->data_buffer == qtd->urb->setup_packet)
599 else if (last_qtd_of_urb(qtd, qh))
609 struct isp1760_qtd *qtd, struct ptd *ptd)
623 if (qtd->urb->dev->speed == USB_SPEED_HIGH) {
625 period = qtd->urb->interval >> 3;
627 if (qtd->urb->interval > 4)
630 else if (qtd->urb->interval > 2)
632 else if (qtd->urb->interval > 1)
638 period = qtd->urb->interval;
661 struct isp1760_qtd *qtd, struct ptd *ptd)
663 create_ptd_atl(qh, qtd, ptd);
664 transform_add_int(qh, qtd, ptd);
696 struct isp1760_qtd *qtd;
698 qtd = kmem_cache_zalloc(qtd_cachep, flags);
699 if (!qtd)
702 INIT_LIST_HEAD(&qtd->qtd_list);
703 qtd->urb = urb;
704 qtd->packet_type = packet_type;
705 qtd->status = QTD_ENQUEUED;
706 qtd->actual_length = 0;
708 return qtd;
711 static void qtd_free(struct isp1760_qtd *qtd)
713 WARN_ON(qtd->payload_addr);
714 kmem_cache_free(qtd_cachep, qtd);
719 struct isp1760_qtd *qtd, struct isp1760_qh *qh,
726 WARN_ON(qtd->length && !qtd->payload_addr);
727 WARN_ON(slots[slot].qtd);
729 WARN_ON(qtd->status != QTD_PAYLOAD_ALLOC);
743 qtd->status = QTD_XFER_STARTED;
745 slots[slot].qtd = qtd;
760 static int is_short_bulk(struct isp1760_qtd *qtd)
762 return (usb_pipebulk(qtd->urb->pipe) &&
763 (qtd->actual_length < qtd->length));
770 struct isp1760_qtd *qtd, *qtd_next;
773 list_for_each_entry_safe(qtd, qtd_next, &qh->qtd_list, qtd_list) {
774 if (qtd->status < QTD_XFER_COMPLETE)
777 last_qtd = last_qtd_of_urb(qtd, qh);
779 if ((!last_qtd) && (qtd->status == QTD_RETIRE))
782 if (qtd->status == QTD_XFER_COMPLETE) {
783 if (qtd->actual_length) {
784 switch (qtd->packet_type) {
786 mem_reads8(hcd->regs, qtd->payload_addr,
787 qtd->data_buffer,
788 qtd->actual_length);
791 qtd->urb->actual_length +=
792 qtd->actual_length;
799 if (is_short_bulk(qtd)) {
800 if (qtd->urb->transfer_flags & URB_SHORT_NOT_OK)
801 qtd->urb->status = -EREMOTEIO;
807 if (qtd->payload_addr)
808 free_mem(hcd, qtd);
811 if ((qtd->status == QTD_RETIRE) &&
812 (qtd->urb->status == -EINPROGRESS))
813 qtd->urb->status = -EPIPE;
819 urb_listitem->urb = qtd->urb;
823 list_del(&qtd->qtd_list);
824 qtd_free(qtd);
837 struct isp1760_qtd *qtd;
859 if ((free_slot == -1) && (slots[curr_slot].qtd == NULL))
866 list_for_each_entry(qtd, &qh->qtd_list, qtd_list) {
867 if (qtd->status == QTD_ENQUEUED) {
868 WARN_ON(qtd->payload_addr);
869 alloc_mem(hcd, qtd);
870 if ((qtd->length) && (!qtd->payload_addr))
873 if ((qtd->length) &&
874 ((qtd->packet_type == SETUP_PID) ||
875 (qtd->packet_type == OUT_PID))) {
876 mem_writes8(hcd->regs, qtd->payload_addr,
877 qtd->data_buffer, qtd->length);
880 qtd->status = QTD_PAYLOAD_ALLOC;
883 if (qtd->status == QTD_PAYLOAD_ALLOC) {
891 if (usb_pipeint(qtd->urb->pipe))
892 create_ptd_int(qh, qtd, &ptd);
894 create_ptd_atl(qh, qtd, &ptd);
897 slots, qtd, qh, &ptd);
1073 struct isp1760_qtd *qtd;
1099 slots[slot].qtd->urb);
1114 slots[slot].qtd->urb);
1117 qtd = slots[slot].qtd;
1118 slots[slot].qtd = NULL;
1123 WARN_ON(qtd->status != QTD_XFER_STARTED);
1127 if ((usb_pipeint(qtd->urb->pipe)) &&
1128 (qtd->urb->dev->speed != USB_SPEED_HIGH))
1129 qtd->actual_length =
1132 qtd->actual_length =
1135 qtd->status = QTD_XFER_COMPLETE;
1136 if (list_is_last(&qtd->qtd_list, &qh->qtd_list) ||
1137 is_short_bulk(qtd))
1138 qtd = NULL;
1140 qtd = list_entry(qtd->qtd_list.next,
1141 typeof(*qtd), qtd_list);
1148 qtd->status = QTD_PAYLOAD_ALLOC;
1160 qtd->status = QTD_RETIRE;
1161 if ((qtd->urb->dev->speed != USB_SPEED_HIGH) &&
1162 (qtd->urb->status != -EPIPE) &&
1163 (qtd->urb->status != -EREMOTEIO)) {
1165 if (usb_hub_clear_tt_buffer(qtd->urb))
1170 qtd = NULL;
1180 if (qtd && (qtd->status == QTD_PAYLOAD_ALLOC)) {
1187 create_ptd_int(qh, qtd, &ptd);
1190 create_ptd_atl(qh, qtd, &ptd);
1193 start_bus_transfer(hcd, ptd_offset, slot, slots, qtd,
1362 static int qtd_fill(struct isp1760_qtd *qtd, void *databuffer, size_t len)
1364 qtd->data_buffer = databuffer;
1368 qtd->length = len;
1370 return qtd->length;
1375 struct isp1760_qtd *qtd, *qtd_next;
1377 list_for_each_entry_safe(qtd, qtd_next, qtd_list, qtd_list) {
1378 list_del(&qtd->qtd_list);
1379 qtd_free(qtd);
1391 struct isp1760_qtd *qtd;
1415 qtd = qtd_alloc(flags, urb, SETUP_PID);
1416 if (!qtd)
1418 qtd_fill(qtd, urb->setup_packet, sizeof(struct usb_ctrlrequest));
1419 list_add_tail(&qtd->qtd_list, head);
1440 qtd = qtd_alloc(flags, urb, packet_type);
1441 if (!qtd)
1443 this_qtd_len = qtd_fill(qtd, buf, len);
1444 list_add_tail(&qtd->qtd_list, head);
1473 qtd = qtd_alloc(flags, urb, packet_type);
1474 if (!qtd)
1478 qtd_fill(qtd, NULL, 0);
1479 list_add_tail(&qtd->qtd_list, head);
1591 priv->atl_slots[qh->slot].qtd = NULL;
1597 priv->int_slots[qh->slot].qtd = NULL;
1604 * Retire the qtds beginning at 'qtd' and belonging all to the same urb, killing
1608 struct isp1760_qtd *qtd)
1613 urb = qtd->urb;
1615 list_for_each_entry_from(qtd, &qh->qtd_list, qtd_list) {
1616 if (qtd->urb != urb)
1619 if (qtd->status >= QTD_XFER_STARTED)
1621 if (last_qtd_of_urb(qtd, qh) &&
1622 (qtd->status >= QTD_XFER_COMPLETE))
1625 if (qtd->status == QTD_XFER_STARTED)
1627 qtd->status = QTD_RETIRE;
1644 struct isp1760_qtd *qtd;
1658 list_for_each_entry(qtd, &qh->qtd_list, qtd_list)
1659 if (qtd->urb == urb) {
1660 dequeue_urb_from_qtd(hcd, qh, qtd);
1661 list_move(&qtd->qtd_list, &qh->qtd_list);