Lines Matching defs:qtd

42 		struct isp1760_qtd *qtd);
159 interrupt handler may touch this qtd! */
161 /* QTD_RETIRE: transfer error/abort qtd */
603 static void alloc_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd)
609 WARN_ON(qtd->payload_addr);
611 if (!qtd->length)
615 if (priv->memory_pool[i].size >= qtd->length &&
618 qtd->payload_addr = priv->memory_pool[i].start;
624 static void free_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd)
630 if (!qtd->payload_addr)
634 if (priv->memory_pool[i].start == qtd->payload_addr) {
637 qtd->payload_addr = 0;
643 __func__, qtd->payload_addr);
645 qtd->payload_addr = 0;
797 static int last_qtd_of_urb(struct isp1760_qtd *qtd, struct isp1760_qh *qh)
801 if (list_is_last(&qtd->qtd_list, &qh->qtd_list))
804 urb = qtd->urb;
805 qtd = list_entry(qtd->qtd_list.next, typeof(*qtd), qtd_list);
806 return (qtd->urb != urb);
810 #define EHCI_TUNE_CERR 3 /* 0-3 qtd retries; 0 == don't stop */
818 struct isp1760_qtd *qtd, struct ptd *ptd)
828 maxpacket = usb_maxpacket(qtd->urb->dev, qtd->urb->pipe);
834 ptd->dw0 |= TO_DW0_LENGTH(qtd->length);
836 ptd->dw0 |= TO_DW0_ENDPOINT(usb_pipeendpoint(qtd->urb->pipe));
839 ptd->dw1 = TO_DW((usb_pipeendpoint(qtd->urb->pipe) >> 1));
840 ptd->dw1 |= TO_DW1_DEVICE_ADDR(usb_pipedevice(qtd->urb->pipe));
841 ptd->dw1 |= TO_DW1_PID_TOKEN(qtd->packet_type);
843 if (usb_pipebulk(qtd->urb->pipe))
845 else if (usb_pipeint(qtd->urb->pipe))
848 if (qtd->urb->dev->speed != USB_SPEED_HIGH) {
852 if (qtd->urb->dev->speed == USB_SPEED_LOW)
855 ptd->dw1 |= TO_DW1_PORT_NUM(qtd->urb->dev->ttport);
856 ptd->dw1 |= TO_DW1_HUB_NUM(qtd->urb->dev->tt->hub->devnum);
859 if (usb_pipeint(qtd->urb->pipe) &&
860 (qtd->urb->dev->speed == USB_SPEED_LOW))
867 if (usb_pipecontrol(qtd->urb->pipe) ||
868 usb_pipebulk(qtd->urb->pipe))
873 ptd->dw2 |= TO_DW2_DATA_START_ADDR(base_to_chip(qtd->payload_addr));
879 if (usb_pipecontrol(qtd->urb->pipe)) {
880 if (qtd->data_buffer == qtd->urb->setup_packet)
882 else if (last_qtd_of_urb(qtd, qh))
892 struct isp1760_qtd *qtd, struct ptd *ptd)
906 if (qtd->urb->dev->speed == USB_SPEED_HIGH) {
908 period = qtd->urb->interval >> 3;
910 if (qtd->urb->interval > 4)
913 else if (qtd->urb->interval > 2)
915 else if (qtd->urb->interval > 1)
921 period = qtd->urb->interval;
944 struct isp1760_qtd *qtd, struct ptd *ptd)
946 create_ptd_atl(qh, qtd, ptd);
947 transform_add_int(qh, qtd, ptd);
979 struct isp1760_qtd *qtd;
981 qtd = kmem_cache_zalloc(qtd_cachep, flags);
982 if (!qtd)
985 INIT_LIST_HEAD(&qtd->qtd_list);
986 qtd->urb = urb;
987 qtd->packet_type = packet_type;
988 qtd->status = QTD_ENQUEUED;
989 qtd->actual_length = 0;
991 return qtd;
994 static void qtd_free(struct isp1760_qtd *qtd)
996 WARN_ON(qtd->payload_addr);
997 kmem_cache_free(qtd_cachep, qtd);
1002 struct isp1760_qtd *qtd, struct isp1760_qh *qh,
1010 WARN_ON(qtd->length && !qtd->payload_addr);
1011 WARN_ON(slots[slot].qtd);
1013 WARN_ON(qtd->status != QTD_PAYLOAD_ALLOC);
1035 qtd->status = QTD_XFER_STARTED;
1037 slots[slot].qtd = qtd;
1047 static int is_short_bulk(struct isp1760_qtd *qtd)
1049 return (usb_pipebulk(qtd->urb->pipe) &&
1050 (qtd->actual_length < qtd->length));
1056 struct isp1760_qtd *qtd, *qtd_next;
1060 list_for_each_entry_safe(qtd, qtd_next, &qh->qtd_list, qtd_list) {
1061 if (qtd->status < QTD_XFER_COMPLETE)
1064 last_qtd = last_qtd_of_urb(qtd, qh);
1066 if ((!last_qtd) && (qtd->status == QTD_RETIRE))
1069 if (qtd->status == QTD_XFER_COMPLETE) {
1070 if (qtd->actual_length) {
1071 switch (qtd->packet_type) {
1073 mem_read(hcd, qtd->payload_addr,
1074 qtd->data_buffer,
1075 qtd->actual_length);
1078 qtd->urb->actual_length +=
1079 qtd->actual_length;
1086 if (is_short_bulk(qtd)) {
1087 if (qtd->urb->transfer_flags & URB_SHORT_NOT_OK)
1088 qtd->urb->status = -EREMOTEIO;
1094 if (qtd->payload_addr)
1095 free_mem(hcd, qtd);
1098 if ((qtd->status == QTD_RETIRE) &&
1099 (qtd->urb->status == -EINPROGRESS))
1100 qtd->urb->status = -EPIPE;
1106 urb_listitem->urb = qtd->urb;
1110 list_del(&qtd->qtd_list);
1111 qtd_free(qtd);
1126 struct isp1760_qtd *qtd;
1148 if ((free_slot == -1) && (slots[curr_slot].qtd == NULL))
1155 list_for_each_entry(qtd, &qh->qtd_list, qtd_list) {
1156 if (qtd->status == QTD_ENQUEUED) {
1157 WARN_ON(qtd->payload_addr);
1158 alloc_mem(hcd, qtd);
1159 if ((qtd->length) && (!qtd->payload_addr))
1162 if (qtd->length && (qtd->packet_type == SETUP_PID ||
1163 qtd->packet_type == OUT_PID)) {
1164 mem_write(hcd, qtd->payload_addr,
1165 qtd->data_buffer, qtd->length);
1168 qtd->status = QTD_PAYLOAD_ALLOC;
1171 if (qtd->status == QTD_PAYLOAD_ALLOC) {
1179 if (usb_pipeint(qtd->urb->pipe))
1180 create_ptd_int(qh, qtd, &ptd);
1182 create_ptd_atl(qh, qtd, &ptd);
1185 slots, qtd, qh, &ptd);
1361 struct isp1760_qtd *qtd;
1387 slots[slot].qtd->urb);
1402 slots[slot].qtd->urb);
1405 qtd = slots[slot].qtd;
1406 slots[slot].qtd = NULL;
1411 WARN_ON(qtd->status != QTD_XFER_STARTED);
1415 if ((usb_pipeint(qtd->urb->pipe)) &&
1416 (qtd->urb->dev->speed != USB_SPEED_HIGH))
1417 qtd->actual_length =
1420 qtd->actual_length =
1423 qtd->status = QTD_XFER_COMPLETE;
1424 if (list_is_last(&qtd->qtd_list, &qh->qtd_list) ||
1425 is_short_bulk(qtd))
1426 qtd = NULL;
1428 qtd = list_entry(qtd->qtd_list.next,
1429 typeof(*qtd), qtd_list);
1436 qtd->status = QTD_PAYLOAD_ALLOC;
1448 qtd->status = QTD_RETIRE;
1449 if ((qtd->urb->dev->speed != USB_SPEED_HIGH) &&
1450 (qtd->urb->status != -EPIPE) &&
1451 (qtd->urb->status != -EREMOTEIO)) {
1453 if (usb_hub_clear_tt_buffer(qtd->urb))
1458 qtd = NULL;
1468 if (qtd && (qtd->status == QTD_PAYLOAD_ALLOC)) {
1475 create_ptd_int(qh, qtd, &ptd);
1478 create_ptd_atl(qh, qtd, &ptd);
1481 start_bus_transfer(hcd, ptd_offset, slot, slots, qtd,
1747 static int qtd_fill(struct isp1760_qtd *qtd, void *databuffer, size_t len)
1749 qtd->data_buffer = databuffer;
1751 qtd->length = len;
1753 return qtd->length;
1758 struct isp1760_qtd *qtd, *qtd_next;
1760 list_for_each_entry_safe(qtd, qtd_next, qtd_list, qtd_list) {
1761 list_del(&qtd->qtd_list);
1762 qtd_free(qtd);
1775 struct isp1760_qtd *qtd;
1799 qtd = qtd_alloc(flags, urb, SETUP_PID);
1800 if (!qtd)
1802 qtd_fill(qtd, urb->setup_packet, sizeof(struct usb_ctrlrequest));
1803 list_add_tail(&qtd->qtd_list, head);
1823 qtd = qtd_alloc(flags, urb, packet_type);
1824 if (!qtd)
1832 this_qtd_len = qtd_fill(qtd, buf, this_qtd_len);
1833 list_add_tail(&qtd->qtd_list, head);
1862 qtd = qtd_alloc(flags, urb, packet_type);
1863 if (!qtd)
1867 qtd_fill(qtd, NULL, 0);
1868 list_add_tail(&qtd->qtd_list, head);
1982 priv->atl_slots[qh->slot].qtd = NULL;
1990 priv->int_slots[qh->slot].qtd = NULL;
1997 * Retire the qtds beginning at 'qtd' and belonging all to the same urb, killing
2001 struct isp1760_qtd *qtd)
2006 urb = qtd->urb;
2008 list_for_each_entry_from(qtd, &qh->qtd_list, qtd_list) {
2009 if (qtd->urb != urb)
2012 if (qtd->status >= QTD_XFER_STARTED)
2014 if (last_qtd_of_urb(qtd, qh) &&
2015 (qtd->status >= QTD_XFER_COMPLETE))
2018 if (qtd->status == QTD_XFER_STARTED)
2020 qtd->status = QTD_RETIRE;
2037 struct isp1760_qtd *qtd;
2051 list_for_each_entry(qtd, &qh->qtd_list, qtd_list)
2052 if (qtd->urb == urb) {
2053 dequeue_urb_from_qtd(hcd, qh, qtd);
2054 list_move(&qtd->qtd_list, &qh->qtd_list);