Lines Matching defs:sw_desc

153  * @sw_desc: Tx descriptor pointer
155 static void xdma_link_sg_desc_blocks(struct xdma_desc *sw_desc)
163 for (i = 1; i < sw_desc->dblk_num; i++) {
164 block = &sw_desc->desc_blocks[i - 1];
176 last_blk_desc = (sw_desc->desc_num - 1) & XDMA_DESC_ADJACENT_MASK;
177 if (((sw_desc->dblk_num - 1) & XDMA_DESC_BLOCK_MASK) > 0) {
178 block = &sw_desc->desc_blocks[sw_desc->dblk_num - 2];
184 block = &sw_desc->desc_blocks[sw_desc->dblk_num - 1];
191 * @sw_desc: Tx descriptor pointer
193 static void xdma_link_cyclic_desc_blocks(struct xdma_desc *sw_desc)
199 block = sw_desc->desc_blocks;
200 for (i = 0; i < sw_desc->desc_num - 1; i++) {
246 struct xdma_desc *sw_desc;
249 sw_desc = to_xdma_desc(vdesc);
250 for (i = 0; i < sw_desc->dblk_num; i++) {
251 if (!sw_desc->desc_blocks[i].virt_addr)
253 dma_pool_free(sw_desc->chan->desc_pool,
254 sw_desc->desc_blocks[i].virt_addr,
255 sw_desc->desc_blocks[i].dma_addr);
257 kfree(sw_desc->desc_blocks);
258 kfree(sw_desc);
270 struct xdma_desc *sw_desc;
278 sw_desc = kzalloc(sizeof(*sw_desc), GFP_NOWAIT);
279 if (!sw_desc)
282 sw_desc->chan = chan;
283 sw_desc->desc_num = desc_num;
284 sw_desc->cyclic = cyclic;
285 sw_desc->error = false;
287 sw_desc->desc_blocks = kcalloc(dblk_num, sizeof(*sw_desc->desc_blocks),
289 if (!sw_desc->desc_blocks)
297 sw_desc->dblk_num = dblk_num;
298 for (i = 0; i < sw_desc->dblk_num; i++) {
303 sw_desc->desc_blocks[i].virt_addr = addr;
304 sw_desc->desc_blocks[i].dma_addr = dma_addr;
310 xdma_link_cyclic_desc_blocks(sw_desc);
312 xdma_link_sg_desc_blocks(sw_desc);
314 return sw_desc;
317 xdma_free_desc(&sw_desc->vdesc);
560 * @sw_desc: Descriptor container
564 * @filled_descs_num: Index of the first descriptor to take care of in @sw_desc
566 static inline u32 xdma_fill_descs(struct xdma_desc *sw_desc, u64 src_addr,
573 dblk = sw_desc->desc_blocks + (desc_num / XDMA_DESC_ADJACENT);
611 struct xdma_desc *sw_desc;
619 sw_desc = xdma_alloc_desc(xdma_chan, desc_num, false);
620 if (!sw_desc)
622 sw_desc->dir = dir;
623 sw_desc->cyclic = false;
624 sw_desc->interleaved_dma = false;
639 desc_num += xdma_fill_descs(sw_desc, *src, *dst, sg_dma_len(sg), desc_num);
643 tx_desc = vchan_tx_prep(&xdma_chan->vchan, &sw_desc->vdesc, flags);
650 xdma_free_desc(&sw_desc->vdesc);
674 struct xdma_desc *sw_desc;
693 sw_desc = xdma_alloc_desc(xdma_chan, periods, true);
694 if (!sw_desc)
697 sw_desc->periods = periods;
698 sw_desc->period_size = period_size;
699 sw_desc->dir = dir;
700 sw_desc->interleaved_dma = false;
715 desc_num += xdma_fill_descs(sw_desc, *src, *dst, period_size, desc_num);
719 tx_desc = vchan_tx_prep(&xdma_chan->vchan, &sw_desc->vdesc, flags);
726 xdma_free_desc(&sw_desc->vdesc);
746 struct xdma_desc *sw_desc;
752 sw_desc = xdma_alloc_desc(xchan, desc_num, false);
753 if (!sw_desc)
755 sw_desc->dir = xt->dir;
756 sw_desc->interleaved_dma = true;
757 sw_desc->cyclic = flags & DMA_PREP_REPEAT;
758 sw_desc->frames_left = xt->numf;
759 sw_desc->periods = xt->numf;
765 desc_num += xdma_fill_descs(sw_desc, src_addr, dst_addr, xt->sgl[i].size, desc_num);
772 sw_desc->period_size = period_size;
774 tx_desc = vchan_tx_prep(&xchan->vchan, &sw_desc->vdesc, flags);
778 xdma_free_desc(&sw_desc->vdesc);