Lines Matching refs:edesc

111 	struct edma_desc		*edesc;  member
153 struct edma_desc *edesc; in edma_execute() local
158 if (!echan->edesc || in edma_execute()
159 echan->edesc->pset_nr == echan->edesc->processed) { in edma_execute()
163 echan->edesc = NULL; in edma_execute()
167 echan->edesc = to_edma_desc(&vdesc->tx); in edma_execute()
170 edesc = echan->edesc; in edma_execute()
173 left = edesc->pset_nr - edesc->processed; in edma_execute()
175 edesc->sg_len = 0; in edma_execute()
179 j = i + edesc->processed; in edma_execute()
180 edma_write_slot(echan->slot[i], &edesc->pset[j].param); in edma_execute()
181 edesc->sg_len += edesc->pset[j].len; in edma_execute()
195 edesc->pset[j].param.opt, in edma_execute()
196 edesc->pset[j].param.src, in edma_execute()
197 edesc->pset[j].param.dst, in edma_execute()
198 edesc->pset[j].param.a_b_cnt, in edma_execute()
199 edesc->pset[j].param.ccnt, in edma_execute()
200 edesc->pset[j].param.src_dst_bidx, in edma_execute()
201 edesc->pset[j].param.src_dst_cidx, in edma_execute()
202 edesc->pset[j].param.link_bcntrld); in edma_execute()
208 edesc->processed += nslots; in edma_execute()
215 if (edesc->processed == edesc->pset_nr) { in edma_execute()
216 if (edesc->cyclic) in edma_execute()
223 if (edesc->processed <= MAX_NR_SG) { in edma_execute()
229 echan->ch_num, edesc->processed); in edma_execute()
261 if (echan->edesc) { in edma_terminate_all()
262 int cyclic = echan->edesc->cyclic; in edma_terminate_all()
268 edma_desc_free(&echan->edesc->vdesc); in edma_terminate_all()
270 echan->edesc = NULL; in edma_terminate_all()
304 if (!echan->edesc || !echan->edesc->cyclic) in edma_dma_pause()
316 if (!echan->edesc->cyclic) in edma_dma_resume()
455 struct edma_desc *edesc; in edma_prep_slave_sg() local
483 edesc = kzalloc(sizeof(*edesc) + sg_len * in edma_prep_slave_sg()
484 sizeof(edesc->pset[0]), GFP_ATOMIC); in edma_prep_slave_sg()
485 if (!edesc) { in edma_prep_slave_sg()
490 edesc->pset_nr = sg_len; in edma_prep_slave_sg()
491 edesc->residue = 0; in edma_prep_slave_sg()
492 edesc->direction = direction; in edma_prep_slave_sg()
493 edesc->echan = echan; in edma_prep_slave_sg()
504 kfree(edesc); in edma_prep_slave_sg()
520 ret = edma_config_pset(chan, &edesc->pset[i], src_addr, in edma_prep_slave_sg()
524 kfree(edesc); in edma_prep_slave_sg()
528 edesc->absync = ret; in edma_prep_slave_sg()
529 edesc->residue += sg_dma_len(sg); in edma_prep_slave_sg()
534 edesc->pset[i].param.opt |= TCINTEN; in edma_prep_slave_sg()
538 edesc->pset[i].param.opt |= TCINTEN; in edma_prep_slave_sg()
540 edesc->residue_stat = edesc->residue; in edma_prep_slave_sg()
542 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_slave_sg()
550 struct edma_desc *edesc; in edma_prep_dma_memcpy() local
557 edesc = kzalloc(sizeof(*edesc) + sizeof(edesc->pset[0]), GFP_ATOMIC); in edma_prep_dma_memcpy()
558 if (!edesc) { in edma_prep_dma_memcpy()
563 edesc->pset_nr = 1; in edma_prep_dma_memcpy()
565 ret = edma_config_pset(chan, &edesc->pset[0], src, dest, 1, in edma_prep_dma_memcpy()
570 edesc->absync = ret; in edma_prep_dma_memcpy()
577 edesc->pset[0].param.opt |= ITCCHEN; in edma_prep_dma_memcpy()
578 edesc->pset[0].param.opt |= TCINTEN; in edma_prep_dma_memcpy()
580 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_dma_memcpy()
590 struct edma_desc *edesc; in edma_prep_dma_cyclic() local
637 edesc = kzalloc(sizeof(*edesc) + nslots * in edma_prep_dma_cyclic()
638 sizeof(edesc->pset[0]), GFP_ATOMIC); in edma_prep_dma_cyclic()
639 if (!edesc) { in edma_prep_dma_cyclic()
644 edesc->cyclic = 1; in edma_prep_dma_cyclic()
645 edesc->pset_nr = nslots; in edma_prep_dma_cyclic()
646 edesc->residue = edesc->residue_stat = buf_len; in edma_prep_dma_cyclic()
647 edesc->direction = direction; in edma_prep_dma_cyclic()
648 edesc->echan = echan; in edma_prep_dma_cyclic()
660 kfree(edesc); in edma_prep_dma_cyclic()
668 memcpy(&edesc->pset[i], &edesc->pset[0], in edma_prep_dma_cyclic()
669 sizeof(edesc->pset[0])); in edma_prep_dma_cyclic()
673 ret = edma_config_pset(chan, &edesc->pset[i], src_addr, in edma_prep_dma_cyclic()
677 kfree(edesc); in edma_prep_dma_cyclic()
700 edesc->pset[i].param.opt, in edma_prep_dma_cyclic()
701 edesc->pset[i].param.src, in edma_prep_dma_cyclic()
702 edesc->pset[i].param.dst, in edma_prep_dma_cyclic()
703 edesc->pset[i].param.a_b_cnt, in edma_prep_dma_cyclic()
704 edesc->pset[i].param.ccnt, in edma_prep_dma_cyclic()
705 edesc->pset[i].param.src_dst_bidx, in edma_prep_dma_cyclic()
706 edesc->pset[i].param.src_dst_cidx, in edma_prep_dma_cyclic()
707 edesc->pset[i].param.link_bcntrld); in edma_prep_dma_cyclic()
709 edesc->absync = ret; in edma_prep_dma_cyclic()
715 edesc->pset[i].param.opt |= TCINTEN; in edma_prep_dma_cyclic()
721 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_dma_cyclic()
728 struct edma_desc *edesc; in edma_callback() local
731 edesc = echan->edesc; in edma_callback()
734 if (!edesc || (edesc && !edesc->cyclic)) in edma_callback()
741 if (edesc) { in edma_callback()
742 if (edesc->cyclic) { in edma_callback()
743 vchan_cyclic_callback(&edesc->vdesc); in edma_callback()
744 } else if (edesc->processed == edesc->pset_nr) { in edma_callback()
746 edesc->residue = 0; in edma_callback()
748 vchan_cookie_complete(&edesc->vdesc); in edma_callback()
754 edesc->residue -= edesc->sg_len; in edma_callback()
755 edesc->residue_stat = edesc->residue; in edma_callback()
756 edesc->processed_stat = edesc->processed; in edma_callback()
880 if (vchan_issue_pending(&echan->vchan) && !echan->edesc) in edma_issue_pending()
885 static u32 edma_residue(struct edma_desc *edesc) in edma_residue() argument
887 bool dst = edesc->direction == DMA_DEV_TO_MEM; in edma_residue()
888 struct edma_pset *pset = edesc->pset; in edma_residue()
896 pos = edma_get_position(edesc->echan->slot[0], dst); in edma_residue()
905 if (edesc->cyclic) { in edma_residue()
907 edesc->residue_stat = edesc->residue - done; in edma_residue()
908 return edesc->residue_stat; in edma_residue()
915 pset += edesc->processed_stat; in edma_residue()
917 for (i = edesc->processed_stat; i < edesc->processed; i++, pset++) { in edma_residue()
924 return edesc->residue_stat - (pos - pset->addr); in edma_residue()
927 edesc->processed_stat++; in edma_residue()
928 edesc->residue_stat -= pset->len; in edma_residue()
930 return edesc->residue_stat; in edma_residue()
948 if (echan->edesc && echan->edesc->vdesc.tx.cookie == cookie) in edma_tx_status()
949 txstate->residue = edma_residue(echan->edesc); in edma_tx_status()