Lines Matching refs:dma_desc

155 	struct tegra_dma_desc		*dma_desc;  member
273 struct tegra_dma_desc *dma_desc; in tegra_dma_desc_get() local
279 list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { in tegra_dma_desc_get()
280 if (async_tx_test_ack(&dma_desc->txd) && !dma_desc->cb_count) { in tegra_dma_desc_get()
281 list_del(&dma_desc->node); in tegra_dma_desc_get()
283 dma_desc->txd.flags = 0; in tegra_dma_desc_get()
284 return dma_desc; in tegra_dma_desc_get()
291 dma_desc = kzalloc(sizeof(*dma_desc), GFP_NOWAIT); in tegra_dma_desc_get()
292 if (!dma_desc) in tegra_dma_desc_get()
295 dma_async_tx_descriptor_init(&dma_desc->txd, &tdc->dma_chan); in tegra_dma_desc_get()
296 dma_desc->txd.tx_submit = tegra_dma_tx_submit; in tegra_dma_desc_get()
297 dma_desc->txd.flags = 0; in tegra_dma_desc_get()
299 return dma_desc; in tegra_dma_desc_get()
303 struct tegra_dma_desc *dma_desc) in tegra_dma_desc_put() argument
308 if (!list_empty(&dma_desc->tx_list)) in tegra_dma_desc_put()
309 list_splice_init(&dma_desc->tx_list, &tdc->free_sg_req); in tegra_dma_desc_put()
310 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in tegra_dma_desc_put()
528 struct tegra_dma_desc *dma_desc; in tegra_dma_abort_all() local
536 dma_desc = sgreq->dma_desc; in tegra_dma_abort_all()
537 dma_desc->dma_status = DMA_ERROR; in tegra_dma_abort_all()
538 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in tegra_dma_abort_all()
541 if (!dma_desc->cb_count) in tegra_dma_abort_all()
542 list_add_tail(&dma_desc->cb_node, in tegra_dma_abort_all()
544 dma_desc->cb_count++; in tegra_dma_abort_all()
579 struct tegra_dma_desc *dma_desc; in handle_once_dma_done() local
584 dma_desc = sgreq->dma_desc; in handle_once_dma_done()
585 dma_desc->bytes_transferred += sgreq->req_len; in handle_once_dma_done()
589 dma_desc->dma_status = DMA_COMPLETE; in handle_once_dma_done()
590 dma_cookie_complete(&dma_desc->txd); in handle_once_dma_done()
591 if (!dma_desc->cb_count) in handle_once_dma_done()
592 list_add_tail(&dma_desc->cb_node, &tdc->cb_desc); in handle_once_dma_done()
593 dma_desc->cb_count++; in handle_once_dma_done()
594 list_add_tail(&dma_desc->node, &tdc->free_dma_desc); in handle_once_dma_done()
613 struct tegra_dma_desc *dma_desc; in handle_cont_sngl_cycle_dma_done() local
618 dma_desc = sgreq->dma_desc; in handle_cont_sngl_cycle_dma_done()
620 dma_desc->bytes_transferred = in handle_cont_sngl_cycle_dma_done()
621 (dma_desc->bytes_transferred + sgreq->req_len) % in handle_cont_sngl_cycle_dma_done()
622 dma_desc->bytes_requested; in handle_cont_sngl_cycle_dma_done()
625 if (!dma_desc->cb_count) in handle_cont_sngl_cycle_dma_done()
626 list_add_tail(&dma_desc->cb_node, &tdc->cb_desc); in handle_cont_sngl_cycle_dma_done()
627 dma_desc->cb_count++; in handle_cont_sngl_cycle_dma_done()
637 dma_desc->dma_status = DMA_ERROR; in handle_cont_sngl_cycle_dma_done()
645 struct tegra_dma_desc *dma_desc; in tegra_dma_tasklet() local
651 dma_desc = list_first_entry(&tdc->cb_desc, typeof(*dma_desc), in tegra_dma_tasklet()
653 list_del(&dma_desc->cb_node); in tegra_dma_tasklet()
654 dmaengine_desc_get_callback(&dma_desc->txd, &cb); in tegra_dma_tasklet()
655 cb_count = dma_desc->cb_count; in tegra_dma_tasklet()
656 dma_desc->cb_count = 0; in tegra_dma_tasklet()
694 struct tegra_dma_desc *dma_desc = txd_to_tegra_dma_desc(txd); in tegra_dma_tx_submit() local
700 dma_desc->dma_status = DMA_IN_PROGRESS; in tegra_dma_tx_submit()
701 cookie = dma_cookie_assign(&dma_desc->txd); in tegra_dma_tx_submit()
702 list_splice_tail_init(&dma_desc->tx_list, &tdc->pending_sg_req); in tegra_dma_tx_submit()
745 struct tegra_dma_desc *dma_desc; in tegra_dma_terminate_all() local
776 sgreq->dma_desc->bytes_transferred += in tegra_dma_terminate_all()
788 dma_desc = list_first_entry(&tdc->cb_desc, typeof(*dma_desc), in tegra_dma_terminate_all()
790 list_del(&dma_desc->cb_node); in tegra_dma_terminate_all()
791 dma_desc->cb_count = 0; in tegra_dma_terminate_all()
897 struct tegra_dma_desc *dma_desc; in tegra_dma_tx_status() local
911 list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { in tegra_dma_tx_status()
912 if (dma_desc->txd.cookie == cookie) { in tegra_dma_tx_status()
913 ret = dma_desc->dma_status; in tegra_dma_tx_status()
920 dma_desc = sg_req->dma_desc; in tegra_dma_tx_status()
921 if (dma_desc->txd.cookie == cookie) { in tegra_dma_tx_status()
923 ret = dma_desc->dma_status; in tegra_dma_tx_status()
929 dma_desc = NULL; in tegra_dma_tx_status()
932 if (dma_desc && txstate) { in tegra_dma_tx_status()
933 residual = dma_desc->bytes_requested - in tegra_dma_tx_status()
934 ((dma_desc->bytes_transferred + bytes) % in tegra_dma_tx_status()
935 dma_desc->bytes_requested); in tegra_dma_tx_status()
1052 struct tegra_dma_desc *dma_desc; in tegra_dma_prep_slave_sg() local
1094 dma_desc = tegra_dma_desc_get(tdc); in tegra_dma_prep_slave_sg()
1095 if (!dma_desc) { in tegra_dma_prep_slave_sg()
1099 INIT_LIST_HEAD(&dma_desc->tx_list); in tegra_dma_prep_slave_sg()
1100 INIT_LIST_HEAD(&dma_desc->cb_node); in tegra_dma_prep_slave_sg()
1101 dma_desc->cb_count = 0; in tegra_dma_prep_slave_sg()
1102 dma_desc->bytes_requested = 0; in tegra_dma_prep_slave_sg()
1103 dma_desc->bytes_transferred = 0; in tegra_dma_prep_slave_sg()
1104 dma_desc->dma_status = DMA_IN_PROGRESS; in tegra_dma_prep_slave_sg()
1117 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
1124 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
1129 dma_desc->bytes_requested += len; in tegra_dma_prep_slave_sg()
1139 sg_req->dma_desc = dma_desc; in tegra_dma_prep_slave_sg()
1142 list_add_tail(&sg_req->node, &dma_desc->tx_list); in tegra_dma_prep_slave_sg()
1146 dma_desc->txd.flags = DMA_CTRL_ACK; in tegra_dma_prep_slave_sg()
1158 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_slave_sg()
1163 return &dma_desc->txd; in tegra_dma_prep_slave_sg()
1177 struct tegra_dma_desc *dma_desc; in tegra_dma_prep_dma_cyclic() local
1242 dma_desc = tegra_dma_desc_get(tdc); in tegra_dma_prep_dma_cyclic()
1243 if (!dma_desc) { in tegra_dma_prep_dma_cyclic()
1248 INIT_LIST_HEAD(&dma_desc->tx_list); in tegra_dma_prep_dma_cyclic()
1249 INIT_LIST_HEAD(&dma_desc->cb_node); in tegra_dma_prep_dma_cyclic()
1250 dma_desc->cb_count = 0; in tegra_dma_prep_dma_cyclic()
1252 dma_desc->bytes_transferred = 0; in tegra_dma_prep_dma_cyclic()
1253 dma_desc->bytes_requested = buf_len; in tegra_dma_prep_dma_cyclic()
1261 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_dma_cyclic()
1274 sg_req->dma_desc = dma_desc; in tegra_dma_prep_dma_cyclic()
1277 list_add_tail(&sg_req->node, &dma_desc->tx_list); in tegra_dma_prep_dma_cyclic()
1283 dma_desc->txd.flags = DMA_CTRL_ACK; in tegra_dma_prep_dma_cyclic()
1295 tegra_dma_desc_put(tdc, dma_desc); in tegra_dma_prep_dma_cyclic()
1300 return &dma_desc->txd; in tegra_dma_prep_dma_cyclic()
1315 struct tegra_dma_desc *dma_desc; in tegra_dma_free_chan_resources() local
1336 dma_desc = list_first_entry(&dma_desc_list, typeof(*dma_desc), in tegra_dma_free_chan_resources()
1338 list_del(&dma_desc->node); in tegra_dma_free_chan_resources()
1339 kfree(dma_desc); in tegra_dma_free_chan_resources()