Lines Matching refs:desc
60 struct hsu_dma_desc *desc = hsuc->desc; in hsu_dma_chan_start() local
80 count = (desc->nents - desc->active) % HSU_DMA_CHAN_NR_DESC; 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()
144 struct hsu_dma_desc *desc; in hsu_dma_irq() local
171 desc = hsuc->desc; in hsu_dma_irq()
172 if (desc) { in hsu_dma_irq()
174 desc->status = DMA_ERROR; in hsu_dma_irq()
175 } else if (desc->active < desc->nents) { in hsu_dma_irq()
178 vchan_cookie_complete(&desc->vdesc); in hsu_dma_irq()
179 desc->status = DMA_COMPLETE; in hsu_dma_irq()
191 struct hsu_dma_desc *desc; in hsu_dma_alloc_desc() local
193 desc = kzalloc(sizeof(*desc), GFP_NOWAIT); in hsu_dma_alloc_desc()
194 if (!desc) in hsu_dma_alloc_desc()
197 desc->sg = kcalloc(nents, sizeof(*desc->sg), GFP_NOWAIT); in hsu_dma_alloc_desc()
198 if (!desc->sg) { in hsu_dma_alloc_desc()
199 kfree(desc); in hsu_dma_alloc_desc()
203 return desc; in hsu_dma_alloc_desc()
208 struct hsu_dma_desc *desc = to_hsu_dma_desc(vdesc); in hsu_dma_desc_free() local
210 kfree(desc->sg); in hsu_dma_desc_free()
211 kfree(desc); in hsu_dma_desc_free()
220 struct hsu_dma_desc *desc; in hsu_dma_prep_slave_sg() local
224 desc = hsu_dma_alloc_desc(sg_len); in hsu_dma_prep_slave_sg()
225 if (!desc) in hsu_dma_prep_slave_sg()
229 desc->sg[i].addr = sg_dma_address(sg); in hsu_dma_prep_slave_sg()
230 desc->sg[i].len = sg_dma_len(sg); in hsu_dma_prep_slave_sg()
233 desc->nents = sg_len; in hsu_dma_prep_slave_sg()
234 desc->direction = direction; in hsu_dma_prep_slave_sg()
236 desc->status = DMA_IN_PROGRESS; in hsu_dma_prep_slave_sg()
238 return vchan_tx_prep(&hsuc->vchan, &desc->vdesc, flags); in hsu_dma_prep_slave_sg()
247 if (vchan_issue_pending(&hsuc->vchan) && !hsuc->desc) in hsu_dma_issue_pending()
252 static size_t hsu_dma_desc_size(struct hsu_dma_desc *desc) in hsu_dma_desc_size() argument
257 for (i = desc->active; i < desc->nents; i++) in hsu_dma_desc_size()
258 bytes += desc->sg[i].len; in hsu_dma_desc_size()
265 struct hsu_dma_desc *desc = hsuc->desc; in hsu_dma_active_desc_size() local
266 size_t bytes = hsu_dma_desc_size(desc); in hsu_dma_active_desc_size()
269 i = desc->active % HSU_DMA_CHAN_NR_DESC; in hsu_dma_active_desc_size()
292 if (hsuc->desc && cookie == hsuc->desc->vdesc.tx.cookie) { in hsu_dma_tx_status()
295 status = hsuc->desc->status; in hsu_dma_tx_status()
325 if (hsuc->desc && hsuc->desc->status == DMA_IN_PROGRESS) { in hsu_dma_pause()
327 hsuc->desc->status = DMA_PAUSED; in hsu_dma_pause()
340 if (hsuc->desc && hsuc->desc->status == DMA_PAUSED) { in hsu_dma_resume()
341 hsuc->desc->status = DMA_IN_PROGRESS; in hsu_dma_resume()
358 if (hsuc->desc) { in hsu_dma_terminate_all()
359 hsu_dma_desc_free(&hsuc->desc->vdesc); in hsu_dma_terminate_all()
360 hsuc->desc = NULL; in hsu_dma_terminate_all()