Lines Matching refs:desc
60 struct hsu_dma_desc *desc = hsuc->desc; in hsu_dma_chan_start() local
80 count = desc->nents - desc->active; in hsu_dma_chan_start()
82 hsu_chan_writel(hsuc, HSU_CH_DxSAR(i), desc->sg[i].addr); in hsu_dma_chan_start()
83 hsu_chan_writel(hsuc, HSU_CH_DxTSR(i), desc->sg[i].len); in hsu_dma_chan_start()
89 desc->active++; in hsu_dma_chan_start()
118 hsuc->desc = NULL; in hsu_dma_start_transfer()
123 hsuc->desc = to_hsu_dma_desc(vdesc); in hsu_dma_start_transfer()
208 struct hsu_dma_desc *desc; in hsu_dma_do_irq() local
218 desc = hsuc->desc; in hsu_dma_do_irq()
219 if (desc) { in hsu_dma_do_irq()
221 desc->status = DMA_ERROR; in hsu_dma_do_irq()
222 } else if (desc->active < desc->nents) { in hsu_dma_do_irq()
225 vchan_cookie_complete(&desc->vdesc); in hsu_dma_do_irq()
226 desc->status = DMA_COMPLETE; in hsu_dma_do_irq()
238 struct hsu_dma_desc *desc; in hsu_dma_alloc_desc() local
240 desc = kzalloc(sizeof(*desc), GFP_NOWAIT); in hsu_dma_alloc_desc()
241 if (!desc) in hsu_dma_alloc_desc()
244 desc->sg = kcalloc(nents, sizeof(*desc->sg), GFP_NOWAIT); in hsu_dma_alloc_desc()
245 if (!desc->sg) { in hsu_dma_alloc_desc()
246 kfree(desc); in hsu_dma_alloc_desc()
250 return desc; in hsu_dma_alloc_desc()
255 struct hsu_dma_desc *desc = to_hsu_dma_desc(vdesc); in hsu_dma_desc_free() local
257 kfree(desc->sg); in hsu_dma_desc_free()
258 kfree(desc); in hsu_dma_desc_free()
267 struct hsu_dma_desc *desc; in hsu_dma_prep_slave_sg() local
271 desc = hsu_dma_alloc_desc(sg_len); in hsu_dma_prep_slave_sg()
272 if (!desc) in hsu_dma_prep_slave_sg()
276 desc->sg[i].addr = sg_dma_address(sg); in hsu_dma_prep_slave_sg()
277 desc->sg[i].len = sg_dma_len(sg); in hsu_dma_prep_slave_sg()
279 desc->length += sg_dma_len(sg); in hsu_dma_prep_slave_sg()
282 desc->nents = sg_len; in hsu_dma_prep_slave_sg()
283 desc->direction = direction; in hsu_dma_prep_slave_sg()
285 desc->status = DMA_IN_PROGRESS; in hsu_dma_prep_slave_sg()
287 return vchan_tx_prep(&hsuc->vchan, &desc->vdesc, flags); in hsu_dma_prep_slave_sg()
296 if (vchan_issue_pending(&hsuc->vchan) && !hsuc->desc) in hsu_dma_issue_pending()
303 struct hsu_dma_desc *desc = hsuc->desc; in hsu_dma_active_desc_size() local
307 for (i = desc->active; i < desc->nents; i++) in hsu_dma_active_desc_size()
308 bytes += desc->sg[i].len; in hsu_dma_active_desc_size()
333 if (hsuc->desc && cookie == hsuc->desc->vdesc.tx.cookie) { in hsu_dma_tx_status()
336 status = hsuc->desc->status; in hsu_dma_tx_status()
366 if (hsuc->desc && hsuc->desc->status == DMA_IN_PROGRESS) { in hsu_dma_pause()
368 hsuc->desc->status = DMA_PAUSED; in hsu_dma_pause()
381 if (hsuc->desc && hsuc->desc->status == DMA_PAUSED) { in hsu_dma_resume()
382 hsuc->desc->status = DMA_IN_PROGRESS; in hsu_dma_resume()
399 if (hsuc->desc) { in hsu_dma_terminate_all()
400 hsu_dma_desc_free(&hsuc->desc->vdesc); in hsu_dma_terminate_all()
401 hsuc->desc = NULL; in hsu_dma_terminate_all()