Lines Matching refs:qtd

907 static int oxu_buf_alloc(struct oxu_hcd *oxu, struct ehci_qtd *qtd, int len)  in oxu_buf_alloc()  argument
941 qtd->buffer = (void *) &oxu->mem->db_pool[i]; in oxu_buf_alloc()
942 qtd->buffer_dma = virt_to_phys(qtd->buffer); in oxu_buf_alloc()
944 qtd->qtd_buffer_len = BUFFER_SIZE * a_blocks; in oxu_buf_alloc()
959 static void oxu_buf_free(struct oxu_hcd *oxu, struct ehci_qtd *qtd) in oxu_buf_free() argument
965 index = (qtd->buffer - (void *) &oxu->mem->db_pool[0]) in oxu_buf_free()
968 qtd->qtd_buffer_len = 0; in oxu_buf_free()
969 qtd->buffer_dma = 0; in oxu_buf_free()
970 qtd->buffer = NULL; in oxu_buf_free()
975 static inline void ehci_qtd_init(struct ehci_qtd *qtd, dma_addr_t dma) in ehci_qtd_init() argument
977 memset(qtd, 0, sizeof *qtd); in ehci_qtd_init()
978 qtd->qtd_dma = dma; in ehci_qtd_init()
979 qtd->hw_token = cpu_to_le32(QTD_STS_HALT); in ehci_qtd_init()
980 qtd->hw_next = EHCI_LIST_END; in ehci_qtd_init()
981 qtd->hw_alt_next = EHCI_LIST_END; in ehci_qtd_init()
982 INIT_LIST_HEAD(&qtd->qtd_list); in ehci_qtd_init()
985 static inline void oxu_qtd_free(struct oxu_hcd *oxu, struct ehci_qtd *qtd) in oxu_qtd_free() argument
989 if (qtd->buffer) in oxu_qtd_free()
990 oxu_buf_free(oxu, qtd); in oxu_qtd_free()
994 index = qtd - &oxu->mem->qtd_pool[0]; in oxu_qtd_free()
1003 struct ehci_qtd *qtd = NULL; in ehci_qtd_alloc() local
1012 qtd = (struct ehci_qtd *) &oxu->mem->qtd_pool[i]; in ehci_qtd_alloc()
1013 memset(qtd, 0, sizeof *qtd); in ehci_qtd_alloc()
1015 qtd->hw_token = cpu_to_le32(QTD_STS_HALT); in ehci_qtd_alloc()
1016 qtd->hw_next = EHCI_LIST_END; in ehci_qtd_alloc()
1017 qtd->hw_alt_next = EHCI_LIST_END; in ehci_qtd_alloc()
1018 INIT_LIST_HEAD(&qtd->qtd_list); in ehci_qtd_alloc()
1020 qtd->qtd_dma = virt_to_phys(qtd); in ehci_qtd_alloc()
1027 return qtd; in ehci_qtd_alloc()
1206 static int qtd_fill(struct ehci_qtd *qtd, dma_addr_t buf, size_t len, in qtd_fill() argument
1213 qtd->hw_buf[0] = cpu_to_le32((u32)addr); in qtd_fill()
1214 qtd->hw_buf_hi[0] = cpu_to_le32((u32)(addr >> 32)); in qtd_fill()
1225 qtd->hw_buf[i] = cpu_to_le32((u32)addr); in qtd_fill()
1226 qtd->hw_buf_hi[i] = cpu_to_le32((u32)(addr >> 32)); in qtd_fill()
1238 qtd->hw_token = cpu_to_le32((count << 16) | token); in qtd_fill()
1239 qtd->length = count; in qtd_fill()
1245 struct ehci_qh *qh, struct ehci_qtd *qtd) in qh_update() argument
1250 qh->hw_qtd_next = QTD_NEXT(qtd->qtd_dma); in qh_update()
1261 is_out = !(qtd->hw_token & cpu_to_le32(1 << 8)); in qh_update()
1280 struct ehci_qtd *qtd; in qh_refresh() local
1283 qtd = qh->dummy; in qh_refresh()
1285 qtd = list_entry(qh->qtd_list.next, in qh_refresh()
1288 if (cpu_to_le32(qtd->qtd_dma) == qh->hw_current) in qh_refresh()
1289 qtd = NULL; in qh_refresh()
1292 if (qtd) in qh_refresh()
1293 qh_update(oxu, qh, qtd); in qh_refresh()
1410 struct ehci_qtd *qtd, *tmp; in qh_completions() local
1435 list_for_each_entry_safe(qtd, tmp, &qh->qtd_list, qtd_list) { in qh_completions()
1439 urb = qtd->urb; in qh_completions()
1462 if (qtd == end) in qh_completions()
1467 token = le32_to_cpu(qtd->hw_token); in qh_completions()
1479 !(qtd->hw_alt_next & EHCI_LIST_END)) { in qh_completions()
1511 && cpu_to_le32(qtd->qtd_dma) in qh_completions()
1529 qtd->length, token); in qh_completions()
1530 if ((usb_pipein(qtd->urb->pipe)) && in qh_completions()
1531 (NULL != qtd->transfer_buffer)) in qh_completions()
1532 memcpy(qtd->transfer_buffer, qtd->buffer, qtd->length); in qh_completions()
1536 if (stopped && qtd->qtd_list.prev != &qh->qtd_list) { in qh_completions()
1537 last = list_entry(qtd->qtd_list.prev, in qh_completions()
1539 last->hw_next = qtd->hw_next; in qh_completions()
1541 list_del(&qtd->qtd_list); in qh_completions()
1542 last = qtd; in qh_completions()
1603 struct ehci_qtd *qtd, *temp; in qtd_list_free() local
1605 list_for_each_entry_safe(qtd, temp, head, qtd_list) { in qtd_list_free()
1606 list_del(&qtd->qtd_list); in qtd_list_free()
1607 oxu_qtd_free(oxu, qtd); in qtd_list_free()
1618 struct ehci_qtd *qtd, *qtd_prev; in qh_urb_transaction() local
1629 qtd = ehci_qtd_alloc(oxu); in qh_urb_transaction()
1630 if (unlikely(!qtd)) in qh_urb_transaction()
1632 list_add_tail(&qtd->qtd_list, head); in qh_urb_transaction()
1633 qtd->urb = urb; in qh_urb_transaction()
1646 ret = oxu_buf_alloc(oxu, qtd, sizeof(struct usb_ctrlrequest)); in qh_urb_transaction()
1650 qtd_fill(qtd, qtd->buffer_dma, sizeof(struct usb_ctrlrequest), in qh_urb_transaction()
1652 memcpy(qtd->buffer, qtd->urb->setup_packet, in qh_urb_transaction()
1657 qtd_prev = qtd; in qh_urb_transaction()
1658 qtd = ehci_qtd_alloc(oxu); in qh_urb_transaction()
1659 if (unlikely(!qtd)) in qh_urb_transaction()
1661 qtd->urb = urb; in qh_urb_transaction()
1662 qtd_prev->hw_next = QTD_NEXT(qtd->qtd_dma); in qh_urb_transaction()
1663 list_add_tail(&qtd->qtd_list, head); in qh_urb_transaction()
1674 ret = oxu_buf_alloc(oxu, qtd, len); in qh_urb_transaction()
1678 buf = qtd->buffer_dma; in qh_urb_transaction()
1682 memcpy(qtd->buffer, qtd->urb->transfer_buffer, len); in qh_urb_transaction()
1698 this_qtd_len = qtd_fill(qtd, buf, len, token, maxpacket); in qh_urb_transaction()
1699 qtd->transfer_buffer = transfer_buf; in qh_urb_transaction()
1704 qtd->hw_alt_next = oxu->async->hw_alt_next; in qh_urb_transaction()
1713 qtd_prev = qtd; in qh_urb_transaction()
1714 qtd = ehci_qtd_alloc(oxu); in qh_urb_transaction()
1715 if (unlikely(!qtd)) in qh_urb_transaction()
1718 ret = oxu_buf_alloc(oxu, qtd, len); in qh_urb_transaction()
1722 qtd->urb = urb; in qh_urb_transaction()
1723 qtd_prev->hw_next = QTD_NEXT(qtd->qtd_dma); in qh_urb_transaction()
1724 list_add_tail(&qtd->qtd_list, head); in qh_urb_transaction()
1732 qtd->hw_alt_next = EHCI_LIST_END; in qh_urb_transaction()
1751 qtd_prev = qtd; in qh_urb_transaction()
1752 qtd = ehci_qtd_alloc(oxu); in qh_urb_transaction()
1753 if (unlikely(!qtd)) in qh_urb_transaction()
1755 qtd->urb = urb; in qh_urb_transaction()
1756 qtd_prev->hw_next = QTD_NEXT(qtd->qtd_dma); in qh_urb_transaction()
1757 list_add_tail(&qtd->qtd_list, head); in qh_urb_transaction()
1760 qtd_fill(qtd, 0, 0, token, 0); in qh_urb_transaction()
1765 qtd->hw_token |= cpu_to_le32(QTD_IOC); in qh_urb_transaction()
1975 struct ehci_qtd *qtd; in qh_append_tds() local
1978 qtd = NULL; in qh_append_tds()
1980 qtd = list_entry(qtd_list->next, struct ehci_qtd, in qh_append_tds()
1994 if (likely(qtd != NULL)) { in qh_append_tds()
2004 token = qtd->hw_token; in qh_append_tds()
2005 qtd->hw_token = HALT_BIT; in qh_append_tds()
2010 *dummy = *qtd; in qh_append_tds()
2013 list_del(&qtd->qtd_list); in qh_append_tds()
2017 ehci_qtd_init(qtd, qtd->qtd_dma); in qh_append_tds()
2018 qh->dummy = qtd; in qh_append_tds()
2021 dma = qtd->qtd_dma; in qh_append_tds()
2022 qtd = list_entry(qh->qtd_list.prev, in qh_append_tds()
2024 qtd->hw_next = QTD_NEXT(dma); in qh_append_tds()
2045 struct ehci_qtd *qtd; in submit_async() local
2047 qtd = list_entry(qtd_list->next, struct ehci_qtd, qtd_list); in submit_async()
2053 qtd, urb->ep->hcpriv); in submit_async()