Lines Matching refs:edesc
212 struct edma_desc *edesc; member
747 struct edma_desc *edesc; in edma_execute() local
751 if (!echan->edesc) { in edma_execute()
757 echan->edesc = to_edma_desc(&vdesc->tx); in edma_execute()
760 edesc = echan->edesc; in edma_execute()
763 left = edesc->pset_nr - edesc->processed; in edma_execute()
765 edesc->sg_len = 0; in edma_execute()
769 j = i + edesc->processed; in edma_execute()
770 edma_write_slot(ecc, echan->slot[i], &edesc->pset[j].param); in edma_execute()
771 edesc->sg_len += edesc->pset[j].len; in edma_execute()
785 edesc->pset[j].param.opt, in edma_execute()
786 edesc->pset[j].param.src, in edma_execute()
787 edesc->pset[j].param.dst, in edma_execute()
788 edesc->pset[j].param.a_b_cnt, in edma_execute()
789 edesc->pset[j].param.ccnt, in edma_execute()
790 edesc->pset[j].param.src_dst_bidx, in edma_execute()
791 edesc->pset[j].param.src_dst_cidx, in edma_execute()
792 edesc->pset[j].param.link_bcntrld); in edma_execute()
798 edesc->processed += nslots; in edma_execute()
805 if (edesc->processed == edesc->pset_nr) { in edma_execute()
806 if (edesc->cyclic) in edma_execute()
825 } else if (edesc->processed <= MAX_NR_SG) { in edma_execute()
831 echan->ch_num, edesc->processed); in edma_execute()
849 if (echan->edesc) { in edma_terminate_all()
852 if (!echan->tc && echan->edesc->cyclic) in edma_terminate_all()
858 edma_desc_free(&echan->edesc->vdesc); in edma_terminate_all()
859 echan->edesc = NULL; in edma_terminate_all()
887 if (!echan->edesc) in edma_dma_pause()
1032 struct edma_desc *edesc; in edma_prep_slave_sg() local
1060 edesc = kzalloc(sizeof(*edesc) + sg_len * sizeof(edesc->pset[0]), in edma_prep_slave_sg()
1062 if (!edesc) { in edma_prep_slave_sg()
1067 edesc->pset_nr = sg_len; in edma_prep_slave_sg()
1068 edesc->residue = 0; in edma_prep_slave_sg()
1069 edesc->direction = direction; in edma_prep_slave_sg()
1070 edesc->echan = echan; in edma_prep_slave_sg()
1080 kfree(edesc); in edma_prep_slave_sg()
1096 ret = edma_config_pset(chan, &edesc->pset[i], src_addr, in edma_prep_slave_sg()
1100 kfree(edesc); in edma_prep_slave_sg()
1104 edesc->absync = ret; in edma_prep_slave_sg()
1105 edesc->residue += sg_dma_len(sg); in edma_prep_slave_sg()
1110 edesc->pset[i].param.opt |= TCINTEN; in edma_prep_slave_sg()
1114 edesc->pset[i].param.opt |= TCINTEN; in edma_prep_slave_sg()
1116 edesc->residue_stat = edesc->residue; in edma_prep_slave_sg()
1118 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_slave_sg()
1126 struct edma_desc *edesc; in edma_prep_dma_memcpy() local
1164 edesc = kzalloc(sizeof(*edesc) + nslots * sizeof(edesc->pset[0]), in edma_prep_dma_memcpy()
1166 if (!edesc) { in edma_prep_dma_memcpy()
1171 edesc->pset_nr = nslots; in edma_prep_dma_memcpy()
1172 edesc->residue = edesc->residue_stat = len; in edma_prep_dma_memcpy()
1173 edesc->direction = DMA_MEM_TO_MEM; in edma_prep_dma_memcpy()
1174 edesc->echan = echan; in edma_prep_dma_memcpy()
1176 ret = edma_config_pset(chan, &edesc->pset[0], src, dest, 1, in edma_prep_dma_memcpy()
1179 kfree(edesc); in edma_prep_dma_memcpy()
1183 edesc->absync = ret; in edma_prep_dma_memcpy()
1185 edesc->pset[0].param.opt |= ITCCHEN; in edma_prep_dma_memcpy()
1188 edesc->pset[0].param.opt |= TCINTEN; in edma_prep_dma_memcpy()
1191 edesc->pset[0].param.opt |= TCCHEN; in edma_prep_dma_memcpy()
1197 kfree(edesc); in edma_prep_dma_memcpy()
1207 ret = edma_config_pset(chan, &edesc->pset[1], src, dest, 1, in edma_prep_dma_memcpy()
1210 kfree(edesc); in edma_prep_dma_memcpy()
1214 edesc->pset[1].param.opt |= ITCCHEN; in edma_prep_dma_memcpy()
1215 edesc->pset[1].param.opt |= TCINTEN; in edma_prep_dma_memcpy()
1218 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_dma_memcpy()
1228 struct edma_desc *edesc; in edma_prep_dma_cyclic() local
1275 edesc = kzalloc(sizeof(*edesc) + nslots * sizeof(edesc->pset[0]), in edma_prep_dma_cyclic()
1277 if (!edesc) { in edma_prep_dma_cyclic()
1282 edesc->cyclic = 1; in edma_prep_dma_cyclic()
1283 edesc->pset_nr = nslots; in edma_prep_dma_cyclic()
1284 edesc->residue = edesc->residue_stat = buf_len; in edma_prep_dma_cyclic()
1285 edesc->direction = direction; in edma_prep_dma_cyclic()
1286 edesc->echan = echan; in edma_prep_dma_cyclic()
1297 kfree(edesc); in edma_prep_dma_cyclic()
1305 memcpy(&edesc->pset[i], &edesc->pset[0], in edma_prep_dma_cyclic()
1306 sizeof(edesc->pset[0])); in edma_prep_dma_cyclic()
1310 ret = edma_config_pset(chan, &edesc->pset[i], src_addr, in edma_prep_dma_cyclic()
1314 kfree(edesc); in edma_prep_dma_cyclic()
1337 edesc->pset[i].param.opt, in edma_prep_dma_cyclic()
1338 edesc->pset[i].param.src, in edma_prep_dma_cyclic()
1339 edesc->pset[i].param.dst, in edma_prep_dma_cyclic()
1340 edesc->pset[i].param.a_b_cnt, in edma_prep_dma_cyclic()
1341 edesc->pset[i].param.ccnt, in edma_prep_dma_cyclic()
1342 edesc->pset[i].param.src_dst_bidx, in edma_prep_dma_cyclic()
1343 edesc->pset[i].param.src_dst_cidx, in edma_prep_dma_cyclic()
1344 edesc->pset[i].param.link_bcntrld); in edma_prep_dma_cyclic()
1346 edesc->absync = ret; in edma_prep_dma_cyclic()
1352 edesc->pset[i].param.opt |= TCINTEN; in edma_prep_dma_cyclic()
1359 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_dma_cyclic()
1365 struct edma_desc *edesc = echan->edesc; in edma_completion_handler() local
1367 if (!edesc) in edma_completion_handler()
1371 if (edesc->cyclic) { in edma_completion_handler()
1372 vchan_cyclic_callback(&edesc->vdesc); in edma_completion_handler()
1375 } else if (edesc->processed == edesc->pset_nr) { in edma_completion_handler()
1376 edesc->residue = 0; in edma_completion_handler()
1378 vchan_cookie_complete(&edesc->vdesc); in edma_completion_handler()
1379 echan->edesc = NULL; in edma_completion_handler()
1390 edesc->residue -= edesc->sg_len; in edma_completion_handler()
1391 edesc->residue_stat = edesc->residue; in edma_completion_handler()
1392 edesc->processed_stat = edesc->processed; in edma_completion_handler()
1451 if (!echan->edesc) in edma_error_handler()
1678 if (vchan_issue_pending(&echan->vchan) && !echan->edesc) in edma_issue_pending()
1683 static u32 edma_residue(struct edma_desc *edesc) in edma_residue() argument
1685 bool dst = edesc->direction == DMA_DEV_TO_MEM; in edma_residue()
1686 struct edma_pset *pset = edesc->pset; in edma_residue()
1694 pos = edma_get_position(edesc->echan->ecc, edesc->echan->slot[0], dst); in edma_residue()
1703 if (edesc->cyclic) { in edma_residue()
1705 edesc->residue_stat = edesc->residue - done; in edma_residue()
1706 return edesc->residue_stat; in edma_residue()
1713 pset += edesc->processed_stat; in edma_residue()
1715 for (i = edesc->processed_stat; i < edesc->processed; i++, pset++) { in edma_residue()
1722 return edesc->residue_stat - (pos - pset->addr); in edma_residue()
1725 edesc->processed_stat++; in edma_residue()
1726 edesc->residue_stat -= pset->len; in edma_residue()
1728 return edesc->residue_stat; in edma_residue()
1746 if (echan->edesc && echan->edesc->vdesc.tx.cookie == cookie) in edma_tx_status()
1747 txstate->residue = edma_residue(echan->edesc); in edma_tx_status()