Lines Matching refs:desc
145 const struct txx9dmac_desc *desc) in desc_read_CHAR() argument
147 return is_dmac64(dc) ? desc->hwdesc.CHAR : desc->hwdesc32.CHAR; in desc_read_CHAR()
151 struct txx9dmac_desc *desc, dma_addr_t val) in desc_write_CHAR() argument
154 desc->hwdesc.CHAR = val; in desc_write_CHAR()
156 desc->hwdesc32.CHAR = val; in desc_write_CHAR()
180 static struct txx9dmac_desc *txx9dmac_last_child(struct txx9dmac_desc *desc) in txx9dmac_last_child() argument
182 if (!list_empty(&desc->tx_list)) in txx9dmac_last_child()
183 desc = list_entry(desc->tx_list.prev, typeof(*desc), desc_node); in txx9dmac_last_child()
184 return desc; in txx9dmac_last_child()
193 struct txx9dmac_desc *desc; in txx9dmac_desc_alloc() local
195 desc = kzalloc(sizeof(*desc), flags); in txx9dmac_desc_alloc()
196 if (!desc) in txx9dmac_desc_alloc()
198 INIT_LIST_HEAD(&desc->tx_list); in txx9dmac_desc_alloc()
199 dma_async_tx_descriptor_init(&desc->txd, &dc->chan); in txx9dmac_desc_alloc()
200 desc->txd.tx_submit = txx9dmac_tx_submit; in txx9dmac_desc_alloc()
202 desc->txd.flags = DMA_CTRL_ACK; in txx9dmac_desc_alloc()
203 desc->txd.phys = dma_map_single(chan2parent(&dc->chan), &desc->hwdesc, in txx9dmac_desc_alloc()
205 return desc; in txx9dmac_desc_alloc()
210 struct txx9dmac_desc *desc, *_desc; in txx9dmac_desc_get() local
215 list_for_each_entry_safe(desc, _desc, &dc->free_list, desc_node) { in txx9dmac_desc_get()
216 if (async_tx_test_ack(&desc->txd)) { in txx9dmac_desc_get()
217 list_del(&desc->desc_node); in txx9dmac_desc_get()
218 ret = desc; in txx9dmac_desc_get()
221 dev_dbg(chan2dev(&dc->chan), "desc %p not ACKed\n", desc); in txx9dmac_desc_get()
242 struct txx9dmac_desc *desc) in txx9dmac_sync_desc_for_cpu() argument
247 list_for_each_entry(child, &desc->tx_list, desc_node) in txx9dmac_sync_desc_for_cpu()
252 desc->txd.phys, ddev->descsize, in txx9dmac_sync_desc_for_cpu()
261 struct txx9dmac_desc *desc) in txx9dmac_desc_put() argument
263 if (desc) { in txx9dmac_desc_put()
266 txx9dmac_sync_desc_for_cpu(dc, desc); in txx9dmac_desc_put()
269 list_for_each_entry(child, &desc->tx_list, desc_node) in txx9dmac_desc_put()
273 list_splice_init(&desc->tx_list, &dc->free_list); in txx9dmac_desc_put()
275 desc); in txx9dmac_desc_put()
276 list_add(&desc->desc_node, &dc->free_list); in txx9dmac_desc_put()
400 struct txx9dmac_desc *desc) in txx9dmac_descriptor_complete() argument
403 struct dma_async_tx_descriptor *txd = &desc->txd; in txx9dmac_descriptor_complete()
406 txd->cookie, desc); in txx9dmac_descriptor_complete()
411 txx9dmac_sync_desc_for_cpu(dc, desc); in txx9dmac_descriptor_complete()
412 list_splice_init(&desc->tx_list, &dc->free_list); in txx9dmac_descriptor_complete()
413 list_move(&desc->desc_node, &dc->free_list); in txx9dmac_descriptor_complete()
427 struct txx9dmac_desc *desc; in txx9dmac_dequeue() local
432 desc = txx9dmac_first_queued(dc); in txx9dmac_dequeue()
434 desc_write_CHAR(dc, prev, desc->txd.phys); in txx9dmac_dequeue()
439 prev = txx9dmac_last_child(desc); in txx9dmac_dequeue()
440 list_move_tail(&desc->desc_node, list); in txx9dmac_dequeue()
442 if ((desc->txd.flags & DMA_PREP_INTERRUPT) && in txx9dmac_dequeue()
450 struct txx9dmac_desc *desc, *_desc; in txx9dmac_complete_all() local
463 list_for_each_entry_safe(desc, _desc, &list, desc_node) in txx9dmac_complete_all()
464 txx9dmac_descriptor_complete(dc, desc); in txx9dmac_complete_all()
468 struct txx9dmac_hwdesc *desc) in txx9dmac_dump_desc() argument
474 (u64)desc->CHAR, desc->SAR, desc->DAR, desc->CNTR); in txx9dmac_dump_desc()
479 (u64)desc->CHAR, desc->SAR, desc->DAR, desc->CNTR, in txx9dmac_dump_desc()
480 desc->SAIR, desc->DAIR, desc->CCR, desc->CSR); in txx9dmac_dump_desc()
483 struct txx9dmac_hwdesc32 *d = (struct txx9dmac_hwdesc32 *)desc; in txx9dmac_dump_desc()
539 struct txx9dmac_desc *desc, *_desc; in txx9dmac_scan_descriptors() local
564 list_for_each_entry_safe(desc, _desc, &dc->active_list, desc_node) { in txx9dmac_scan_descriptors()
565 if (desc_read_CHAR(dc, desc) == chain) { in txx9dmac_scan_descriptors()
572 list_for_each_entry(child, &desc->tx_list, desc_node) in txx9dmac_scan_descriptors()
584 txx9dmac_descriptor_complete(dc, desc); in txx9dmac_scan_descriptors()
692 struct txx9dmac_desc *desc = txd_to_txx9dmac_desc(tx); in txx9dmac_tx_submit() local
700 desc->txd.cookie, desc); in txx9dmac_tx_submit()
702 list_add_tail(&desc->desc_node, &dc->queue); in txx9dmac_tx_submit()
714 struct txx9dmac_desc *desc; in txx9dmac_prep_dma_memcpy() local
748 desc = txx9dmac_desc_get(dc); in txx9dmac_prep_dma_memcpy()
749 if (!desc) { in txx9dmac_prep_dma_memcpy()
755 desc->hwdesc.SAR = src + offset; in txx9dmac_prep_dma_memcpy()
756 desc->hwdesc.DAR = dest + offset; in txx9dmac_prep_dma_memcpy()
757 desc->hwdesc.CNTR = xfer_count; in txx9dmac_prep_dma_memcpy()
758 txx9dmac_desc_set_nosimple(ddev, desc, 8, 8, in txx9dmac_prep_dma_memcpy()
761 desc->hwdesc32.SAR = src + offset; in txx9dmac_prep_dma_memcpy()
762 desc->hwdesc32.DAR = dest + offset; in txx9dmac_prep_dma_memcpy()
763 desc->hwdesc32.CNTR = xfer_count; in txx9dmac_prep_dma_memcpy()
764 txx9dmac_desc_set_nosimple(ddev, desc, 4, 4, in txx9dmac_prep_dma_memcpy()
776 first = desc; in txx9dmac_prep_dma_memcpy()
778 desc_write_CHAR(dc, prev, desc->txd.phys); in txx9dmac_prep_dma_memcpy()
782 list_add_tail(&desc->desc_node, &first->tx_list); in txx9dmac_prep_dma_memcpy()
784 prev = desc; in txx9dmac_prep_dma_memcpy()
828 struct txx9dmac_desc *desc; in txx9dmac_prep_slave_sg() local
832 desc = txx9dmac_desc_get(dc); in txx9dmac_prep_slave_sg()
833 if (!desc) { in txx9dmac_prep_slave_sg()
842 desc->hwdesc.SAR = mem; in txx9dmac_prep_slave_sg()
843 desc->hwdesc.DAR = ds->tx_reg; in txx9dmac_prep_slave_sg()
845 desc->hwdesc.SAR = ds->rx_reg; in txx9dmac_prep_slave_sg()
846 desc->hwdesc.DAR = mem; in txx9dmac_prep_slave_sg()
848 desc->hwdesc.CNTR = sg_dma_len(sg); in txx9dmac_prep_slave_sg()
851 desc->hwdesc32.SAR = mem; in txx9dmac_prep_slave_sg()
852 desc->hwdesc32.DAR = ds->tx_reg; in txx9dmac_prep_slave_sg()
854 desc->hwdesc32.SAR = ds->rx_reg; in txx9dmac_prep_slave_sg()
855 desc->hwdesc32.DAR = mem; in txx9dmac_prep_slave_sg()
857 desc->hwdesc32.CNTR = sg_dma_len(sg); in txx9dmac_prep_slave_sg()
866 txx9dmac_desc_set_nosimple(ddev, desc, sai, dai, in txx9dmac_prep_slave_sg()
870 first = desc; in txx9dmac_prep_slave_sg()
872 desc_write_CHAR(dc, prev, desc->txd.phys); in txx9dmac_prep_slave_sg()
877 list_add_tail(&desc->desc_node, &first->tx_list); in txx9dmac_prep_slave_sg()
879 prev = desc; in txx9dmac_prep_slave_sg()
900 struct txx9dmac_desc *desc, *_desc; in txx9dmac_terminate_all() local
915 list_for_each_entry_safe(desc, _desc, &list, desc_node) in txx9dmac_terminate_all()
916 txx9dmac_descriptor_complete(dc, desc); in txx9dmac_terminate_all()
943 struct txx9dmac_desc *desc; in txx9dmac_chain_dynamic() local
948 desc = list_entry(list.next, struct txx9dmac_desc, desc_node); in txx9dmac_chain_dynamic()
949 desc_write_CHAR(dc, prev, desc->txd.phys); in txx9dmac_chain_dynamic()
956 channel_write_CHAR(dc, desc->txd.phys); in txx9dmac_chain_dynamic()
988 struct txx9dmac_desc *desc; in txx9dmac_alloc_chan_resources() local
1023 desc = txx9dmac_desc_alloc(dc, GFP_KERNEL); in txx9dmac_alloc_chan_resources()
1024 if (!desc) { in txx9dmac_alloc_chan_resources()
1030 txx9dmac_desc_put(dc, desc); in txx9dmac_alloc_chan_resources()
1047 struct txx9dmac_desc *desc, *_desc; in txx9dmac_free_chan_resources() local
1063 list_for_each_entry_safe(desc, _desc, &list, desc_node) { in txx9dmac_free_chan_resources()
1064 dev_vdbg(chan2dev(chan), " freeing descriptor %p\n", desc); in txx9dmac_free_chan_resources()
1065 dma_unmap_single(chan2parent(chan), desc->txd.phys, in txx9dmac_free_chan_resources()
1067 kfree(desc); in txx9dmac_free_chan_resources()