Lines Matching refs:desc

76 static struct dw_edma_chunk *dw_edma_alloc_chunk(struct dw_edma_desc *desc)  in dw_edma_alloc_chunk()  argument
78 struct dw_edma_chip *chip = desc->chan->dw->chip; in dw_edma_alloc_chunk()
79 struct dw_edma_chan *chan = desc->chan; in dw_edma_alloc_chunk()
94 chunk->cb = !(desc->chunks_alloc % 2); in dw_edma_alloc_chunk()
103 if (desc->chunk) { in dw_edma_alloc_chunk()
109 desc->chunks_alloc++; in dw_edma_alloc_chunk()
110 list_add_tail(&chunk->list, &desc->chunk->list); in dw_edma_alloc_chunk()
114 desc->chunks_alloc = 0; in dw_edma_alloc_chunk()
115 desc->chunk = chunk; in dw_edma_alloc_chunk()
123 struct dw_edma_desc *desc; in dw_edma_alloc_desc() local
125 desc = kzalloc(sizeof(*desc), GFP_NOWAIT); in dw_edma_alloc_desc()
126 if (unlikely(!desc)) in dw_edma_alloc_desc()
129 desc->chan = chan; in dw_edma_alloc_desc()
130 if (!dw_edma_alloc_chunk(desc)) { in dw_edma_alloc_desc()
131 kfree(desc); in dw_edma_alloc_desc()
135 return desc; in dw_edma_alloc_desc()
154 static void dw_edma_free_chunk(struct dw_edma_desc *desc) in dw_edma_free_chunk() argument
158 if (!desc->chunk) in dw_edma_free_chunk()
162 list_for_each_entry_safe(child, _next, &desc->chunk->list, list) { in dw_edma_free_chunk()
166 desc->chunks_alloc--; in dw_edma_free_chunk()
171 desc->chunk = NULL; in dw_edma_free_chunk()
174 static void dw_edma_free_desc(struct dw_edma_desc *desc) in dw_edma_free_desc() argument
176 dw_edma_free_chunk(desc); in dw_edma_free_desc()
177 kfree(desc); in dw_edma_free_desc()
189 struct dw_edma_desc *desc; in dw_edma_start_transfer() local
196 desc = vd2dw_edma_desc(vd); in dw_edma_start_transfer()
197 if (!desc) in dw_edma_start_transfer()
200 child = list_first_entry_or_null(&desc->chunk->list, in dw_edma_start_transfer()
205 dw_edma_core_start(dw, child, !desc->xfer_sz); in dw_edma_start_transfer()
206 desc->xfer_sz += child->ll_region.sz; in dw_edma_start_transfer()
210 desc->chunks_alloc--; in dw_edma_start_transfer()
330 struct dw_edma_desc *desc; in dw_edma_device_tx_status() local
349 desc = vd2dw_edma_desc(vd); in dw_edma_device_tx_status()
350 if (desc) in dw_edma_device_tx_status()
351 residue = desc->alloc_sz - desc->xfer_sz; in dw_edma_device_tx_status()
369 struct dw_edma_desc *desc; in dw_edma_device_transfer() local
429 desc = dw_edma_alloc_desc(chan); in dw_edma_device_transfer()
430 if (unlikely(!desc)) in dw_edma_device_transfer()
433 chunk = dw_edma_alloc_chunk(desc); in dw_edma_device_transfer()
465 chunk = dw_edma_alloc_chunk(desc); in dw_edma_device_transfer()
482 desc->alloc_sz += burst->sz; in dw_edma_device_transfer()
536 return vchan_tx_prep(&chan->vc, &desc->vd, xfer->flags); in dw_edma_device_transfer()
539 if (desc) in dw_edma_device_transfer()
540 dw_edma_free_desc(desc); in dw_edma_device_transfer()
600 struct dw_edma_desc *desc; in dw_edma_done_interrupt() local
609 desc = vd2dw_edma_desc(vd); in dw_edma_done_interrupt()
610 if (!desc->chunks_alloc) { in dw_edma_done_interrupt()