Lines Matching refs:dma_desc

160 	struct tegra_dma_desc		*dma_desc;  member
277 struct tegra_dma_desc *dma_desc; in tegra_dma_desc_get() local
283 list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { in tegra_dma_desc_get()
284 if (async_tx_test_ack(&dma_desc->txd)) { in tegra_dma_desc_get()
285 list_del(&dma_desc->node); in tegra_dma_desc_get()
287 dma_desc->txd.flags = 0; in tegra_dma_desc_get()
288 return dma_desc; in tegra_dma_desc_get()
295 dma_desc = kzalloc(sizeof(*dma_desc), GFP_ATOMIC); in tegra_dma_desc_get()
296 if (!dma_desc) { in tegra_dma_desc_get()
301 dma_async_tx_descriptor_init(&dma_desc->txd, &tdc->dma_chan); in tegra_dma_desc_get()
302 dma_desc->txd.tx_submit = tegra_dma_tx_submit; in tegra_dma_desc_get()
303 dma_desc->txd.flags = 0; in tegra_dma_desc_get()
304 return dma_desc; in tegra_dma_desc_get()
308 struct tegra_dma_desc *dma_desc) in tegra_dma_desc_put() argument
313 if (!list_empty(&dma_desc->tx_list)) in tegra_dma_desc_put()
314 list_splice_init(&dma_desc->tx_list, &tdc->free_sg_req); in tegra_dma_desc_put()
315 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in tegra_dma_desc_put()
526 struct tegra_dma_desc *dma_desc; in tegra_dma_abort_all() local
533 dma_desc = sgreq->dma_desc; in tegra_dma_abort_all()
534 dma_desc->dma_status = DMA_ERROR; in tegra_dma_abort_all()
535 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in tegra_dma_abort_all()
538 if (!dma_desc->cb_count) in tegra_dma_abort_all()
539 list_add_tail(&dma_desc->cb_node, in tegra_dma_abort_all()
541 dma_desc->cb_count++; in tegra_dma_abort_all()
581 struct tegra_dma_desc *dma_desc; in handle_once_dma_done() local
585 dma_desc = sgreq->dma_desc; in handle_once_dma_done()
586 dma_desc->bytes_transferred += sgreq->req_len; in handle_once_dma_done()
590 dma_desc->dma_status = DMA_COMPLETE; in handle_once_dma_done()
591 dma_cookie_complete(&dma_desc->txd); in handle_once_dma_done()
592 if (!dma_desc->cb_count) in handle_once_dma_done()
593 list_add_tail(&dma_desc->cb_node, &tdc->cb_desc); in handle_once_dma_done()
594 dma_desc->cb_count++; in handle_once_dma_done()
595 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in handle_once_dma_done()
611 struct tegra_dma_desc *dma_desc; in handle_cont_sngl_cycle_dma_done() local
615 dma_desc = sgreq->dma_desc; in handle_cont_sngl_cycle_dma_done()
616 dma_desc->bytes_transferred += sgreq->req_len; in handle_cont_sngl_cycle_dma_done()
619 if (!dma_desc->cb_count) in handle_cont_sngl_cycle_dma_done()
620 list_add_tail(&dma_desc->cb_node, &tdc->cb_desc); in handle_cont_sngl_cycle_dma_done()
621 dma_desc->cb_count++; in handle_cont_sngl_cycle_dma_done()
629 dma_desc->dma_status = DMA_ERROR; in handle_cont_sngl_cycle_dma_done()
639 struct tegra_dma_desc *dma_desc; in tegra_dma_tasklet() local
645 dma_desc = list_first_entry(&tdc->cb_desc, in tegra_dma_tasklet()
646 typeof(*dma_desc), cb_node); in tegra_dma_tasklet()
647 list_del(&dma_desc->cb_node); in tegra_dma_tasklet()
648 callback = dma_desc->txd.callback; in tegra_dma_tasklet()
649 callback_param = dma_desc->txd.callback_param; in tegra_dma_tasklet()
650 cb_count = dma_desc->cb_count; in tegra_dma_tasklet()
651 dma_desc->cb_count = 0; in tegra_dma_tasklet()
685 struct tegra_dma_desc *dma_desc = txd_to_tegra_dma_desc(txd); in tegra_dma_tx_submit() local
691 dma_desc->dma_status = DMA_IN_PROGRESS; in tegra_dma_tx_submit()
692 cookie = dma_cookie_assign(&dma_desc->txd); in tegra_dma_tx_submit()
693 list_splice_tail_init(&dma_desc->tx_list, &tdc->pending_sg_req); in tegra_dma_tx_submit()
730 struct tegra_dma_desc *dma_desc; in tegra_dma_terminate_all() local
765 sgreq->dma_desc->bytes_transferred += in tegra_dma_terminate_all()
774 dma_desc = list_first_entry(&tdc->cb_desc, in tegra_dma_terminate_all()
775 typeof(*dma_desc), cb_node); in tegra_dma_terminate_all()
776 list_del(&dma_desc->cb_node); in tegra_dma_terminate_all()
777 dma_desc->cb_count = 0; in tegra_dma_terminate_all()
787 struct tegra_dma_desc *dma_desc; in tegra_dma_tx_status() local
800 list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { in tegra_dma_tx_status()
801 if (dma_desc->txd.cookie == cookie) { in tegra_dma_tx_status()
802 residual = dma_desc->bytes_requested - in tegra_dma_tx_status()
803 (dma_desc->bytes_transferred % in tegra_dma_tx_status()
804 dma_desc->bytes_requested); in tegra_dma_tx_status()
806 ret = dma_desc->dma_status; in tegra_dma_tx_status()
814 dma_desc = sg_req->dma_desc; in tegra_dma_tx_status()
815 if (dma_desc->txd.cookie == cookie) { in tegra_dma_tx_status()
816 residual = dma_desc->bytes_requested - in tegra_dma_tx_status()
817 (dma_desc->bytes_transferred % in tegra_dma_tx_status()
818 dma_desc->bytes_requested); in tegra_dma_tx_status()
820 ret = dma_desc->dma_status; in tegra_dma_tx_status()
927 struct tegra_dma_desc *dma_desc; in tegra_dma_prep_slave_sg() local
965 dma_desc = tegra_dma_desc_get(tdc); in tegra_dma_prep_slave_sg()
966 if (!dma_desc) { in tegra_dma_prep_slave_sg()
970 INIT_LIST_HEAD(&dma_desc->tx_list); in tegra_dma_prep_slave_sg()
971 INIT_LIST_HEAD(&dma_desc->cb_node); in tegra_dma_prep_slave_sg()
972 dma_desc->cb_count = 0; in tegra_dma_prep_slave_sg()
973 dma_desc->bytes_requested = 0; in tegra_dma_prep_slave_sg()
974 dma_desc->bytes_transferred = 0; in tegra_dma_prep_slave_sg()
975 dma_desc->dma_status = DMA_IN_PROGRESS; in tegra_dma_prep_slave_sg()
988 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
995 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
1000 dma_desc->bytes_requested += len; in tegra_dma_prep_slave_sg()
1010 sg_req->dma_desc = dma_desc; in tegra_dma_prep_slave_sg()
1013 list_add_tail(&sg_req->node, &dma_desc->tx_list); in tegra_dma_prep_slave_sg()
1017 dma_desc->txd.flags = DMA_CTRL_ACK; in tegra_dma_prep_slave_sg()
1029 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
1034 return &dma_desc->txd; in tegra_dma_prep_slave_sg()
1043 struct tegra_dma_desc *dma_desc = NULL; in tegra_dma_prep_dma_cyclic() local
1108 dma_desc = tegra_dma_desc_get(tdc); in tegra_dma_prep_dma_cyclic()
1109 if (!dma_desc) { in tegra_dma_prep_dma_cyclic()
1114 INIT_LIST_HEAD(&dma_desc->tx_list); in tegra_dma_prep_dma_cyclic()
1115 INIT_LIST_HEAD(&dma_desc->cb_node); in tegra_dma_prep_dma_cyclic()
1116 dma_desc->cb_count = 0; in tegra_dma_prep_dma_cyclic()
1118 dma_desc->bytes_transferred = 0; in tegra_dma_prep_dma_cyclic()
1119 dma_desc->bytes_requested = buf_len; in tegra_dma_prep_dma_cyclic()
1127 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_dma_cyclic()
1141 sg_req->dma_desc = dma_desc; in tegra_dma_prep_dma_cyclic()
1144 list_add_tail(&sg_req->node, &dma_desc->tx_list); in tegra_dma_prep_dma_cyclic()
1150 dma_desc->txd.flags = DMA_CTRL_ACK; in tegra_dma_prep_dma_cyclic()
1162 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_dma_cyclic()
1167 return &dma_desc->txd; in tegra_dma_prep_dma_cyclic()
1189 struct tegra_dma_desc *dma_desc; in tegra_dma_free_chan_resources() local
1213 dma_desc = list_first_entry(&dma_desc_list, in tegra_dma_free_chan_resources()
1214 typeof(*dma_desc), node); in tegra_dma_free_chan_resources()
1215 list_del(&dma_desc->node); in tegra_dma_free_chan_resources()
1216 kfree(dma_desc); in tegra_dma_free_chan_resources()