Lines Matching refs:dma_desc
159 struct tegra_dma_desc *dma_desc; member
281 struct tegra_dma_desc *dma_desc; in tegra_dma_desc_get() local
287 list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { in tegra_dma_desc_get()
288 if (async_tx_test_ack(&dma_desc->txd)) { in tegra_dma_desc_get()
289 list_del(&dma_desc->node); in tegra_dma_desc_get()
291 dma_desc->txd.flags = 0; in tegra_dma_desc_get()
292 return dma_desc; in tegra_dma_desc_get()
299 dma_desc = kzalloc(sizeof(*dma_desc), GFP_ATOMIC); in tegra_dma_desc_get()
300 if (!dma_desc) { in tegra_dma_desc_get()
305 dma_async_tx_descriptor_init(&dma_desc->txd, &tdc->dma_chan); in tegra_dma_desc_get()
306 dma_desc->txd.tx_submit = tegra_dma_tx_submit; in tegra_dma_desc_get()
307 dma_desc->txd.flags = 0; in tegra_dma_desc_get()
308 return dma_desc; in tegra_dma_desc_get()
312 struct tegra_dma_desc *dma_desc) in tegra_dma_desc_put() argument
317 if (!list_empty(&dma_desc->tx_list)) in tegra_dma_desc_put()
318 list_splice_init(&dma_desc->tx_list, &tdc->free_sg_req); in tegra_dma_desc_put()
319 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in tegra_dma_desc_put()
546 struct tegra_dma_desc *dma_desc; in tegra_dma_abort_all() local
553 dma_desc = sgreq->dma_desc; in tegra_dma_abort_all()
554 dma_desc->dma_status = DMA_ERROR; in tegra_dma_abort_all()
555 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in tegra_dma_abort_all()
558 if (!dma_desc->cb_count) in tegra_dma_abort_all()
559 list_add_tail(&dma_desc->cb_node, in tegra_dma_abort_all()
561 dma_desc->cb_count++; in tegra_dma_abort_all()
601 struct tegra_dma_desc *dma_desc; in handle_once_dma_done() local
605 dma_desc = sgreq->dma_desc; in handle_once_dma_done()
606 dma_desc->bytes_transferred += sgreq->req_len; in handle_once_dma_done()
610 dma_desc->dma_status = DMA_COMPLETE; in handle_once_dma_done()
611 dma_cookie_complete(&dma_desc->txd); in handle_once_dma_done()
612 if (!dma_desc->cb_count) in handle_once_dma_done()
613 list_add_tail(&dma_desc->cb_node, &tdc->cb_desc); in handle_once_dma_done()
614 dma_desc->cb_count++; in handle_once_dma_done()
615 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in handle_once_dma_done()
630 struct tegra_dma_desc *dma_desc; in handle_cont_sngl_cycle_dma_done() local
634 dma_desc = sgreq->dma_desc; in handle_cont_sngl_cycle_dma_done()
635 dma_desc->bytes_transferred += sgreq->req_len; in handle_cont_sngl_cycle_dma_done()
638 if (!dma_desc->cb_count) in handle_cont_sngl_cycle_dma_done()
639 list_add_tail(&dma_desc->cb_node, &tdc->cb_desc); in handle_cont_sngl_cycle_dma_done()
640 dma_desc->cb_count++; in handle_cont_sngl_cycle_dma_done()
648 dma_desc->dma_status = DMA_ERROR; in handle_cont_sngl_cycle_dma_done()
657 struct tegra_dma_desc *dma_desc; in tegra_dma_tasklet() local
663 dma_desc = list_first_entry(&tdc->cb_desc, in tegra_dma_tasklet()
664 typeof(*dma_desc), cb_node); in tegra_dma_tasklet()
665 list_del(&dma_desc->cb_node); in tegra_dma_tasklet()
666 callback = dma_desc->txd.callback; in tegra_dma_tasklet()
667 callback_param = dma_desc->txd.callback_param; in tegra_dma_tasklet()
668 cb_count = dma_desc->cb_count; in tegra_dma_tasklet()
669 dma_desc->cb_count = 0; in tegra_dma_tasklet()
703 struct tegra_dma_desc *dma_desc = txd_to_tegra_dma_desc(txd); in tegra_dma_tx_submit() local
709 dma_desc->dma_status = DMA_IN_PROGRESS; in tegra_dma_tx_submit()
710 cookie = dma_cookie_assign(&dma_desc->txd); in tegra_dma_tx_submit()
711 list_splice_tail_init(&dma_desc->tx_list, &tdc->pending_sg_req); in tegra_dma_tx_submit()
747 struct tegra_dma_desc *dma_desc; in tegra_dma_terminate_all() local
782 sgreq->dma_desc->bytes_transferred += in tegra_dma_terminate_all()
791 dma_desc = list_first_entry(&tdc->cb_desc, in tegra_dma_terminate_all()
792 typeof(*dma_desc), cb_node); in tegra_dma_terminate_all()
793 list_del(&dma_desc->cb_node); in tegra_dma_terminate_all()
794 dma_desc->cb_count = 0; in tegra_dma_terminate_all()
804 struct tegra_dma_desc *dma_desc; in tegra_dma_tx_status() local
817 list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { in tegra_dma_tx_status()
818 if (dma_desc->txd.cookie == cookie) { in tegra_dma_tx_status()
819 residual = dma_desc->bytes_requested - in tegra_dma_tx_status()
820 (dma_desc->bytes_transferred % in tegra_dma_tx_status()
821 dma_desc->bytes_requested); in tegra_dma_tx_status()
823 ret = dma_desc->dma_status; in tegra_dma_tx_status()
831 dma_desc = sg_req->dma_desc; in tegra_dma_tx_status()
832 if (dma_desc->txd.cookie == cookie) { in tegra_dma_tx_status()
833 residual = dma_desc->bytes_requested - in tegra_dma_tx_status()
834 (dma_desc->bytes_transferred % in tegra_dma_tx_status()
835 dma_desc->bytes_requested); in tegra_dma_tx_status()
837 ret = dma_desc->dma_status; in tegra_dma_tx_status()
944 struct tegra_dma_desc *dma_desc; in tegra_dma_prep_slave_sg() local
980 dma_desc = tegra_dma_desc_get(tdc); in tegra_dma_prep_slave_sg()
981 if (!dma_desc) { in tegra_dma_prep_slave_sg()
985 INIT_LIST_HEAD(&dma_desc->tx_list); in tegra_dma_prep_slave_sg()
986 INIT_LIST_HEAD(&dma_desc->cb_node); in tegra_dma_prep_slave_sg()
987 dma_desc->cb_count = 0; in tegra_dma_prep_slave_sg()
988 dma_desc->bytes_requested = 0; in tegra_dma_prep_slave_sg()
989 dma_desc->bytes_transferred = 0; in tegra_dma_prep_slave_sg()
990 dma_desc->dma_status = DMA_IN_PROGRESS; in tegra_dma_prep_slave_sg()
1003 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
1010 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
1015 dma_desc->bytes_requested += len; in tegra_dma_prep_slave_sg()
1025 sg_req->dma_desc = dma_desc; in tegra_dma_prep_slave_sg()
1028 list_add_tail(&sg_req->node, &dma_desc->tx_list); in tegra_dma_prep_slave_sg()
1032 dma_desc->txd.flags = DMA_CTRL_ACK; in tegra_dma_prep_slave_sg()
1044 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
1049 return &dma_desc->txd; in tegra_dma_prep_slave_sg()
1058 struct tegra_dma_desc *dma_desc = NULL; in tegra_dma_prep_dma_cyclic() local
1120 dma_desc = tegra_dma_desc_get(tdc); in tegra_dma_prep_dma_cyclic()
1121 if (!dma_desc) { in tegra_dma_prep_dma_cyclic()
1126 INIT_LIST_HEAD(&dma_desc->tx_list); in tegra_dma_prep_dma_cyclic()
1127 INIT_LIST_HEAD(&dma_desc->cb_node); in tegra_dma_prep_dma_cyclic()
1128 dma_desc->cb_count = 0; in tegra_dma_prep_dma_cyclic()
1130 dma_desc->bytes_transferred = 0; in tegra_dma_prep_dma_cyclic()
1131 dma_desc->bytes_requested = buf_len; in tegra_dma_prep_dma_cyclic()
1139 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_dma_cyclic()
1152 sg_req->dma_desc = dma_desc; in tegra_dma_prep_dma_cyclic()
1155 list_add_tail(&sg_req->node, &dma_desc->tx_list); in tegra_dma_prep_dma_cyclic()
1161 dma_desc->txd.flags = DMA_CTRL_ACK; in tegra_dma_prep_dma_cyclic()
1173 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_dma_cyclic()
1178 return &dma_desc->txd; in tegra_dma_prep_dma_cyclic()
1200 struct tegra_dma_desc *dma_desc; in tegra_dma_free_chan_resources() local
1224 dma_desc = list_first_entry(&dma_desc_list, in tegra_dma_free_chan_resources()
1225 typeof(*dma_desc), node); in tegra_dma_free_chan_resources()
1226 list_del(&dma_desc->node); in tegra_dma_free_chan_resources()
1227 kfree(dma_desc); in tegra_dma_free_chan_resources()