Lines Matching refs:desc
118 struct jz4780_dma_hwdesc *desc; member
134 struct jz4780_dma_desc *desc; member
187 struct jz4780_dma_desc *desc; in jz4780_dma_desc_alloc() local
192 desc = kzalloc(sizeof(*desc), GFP_NOWAIT); in jz4780_dma_desc_alloc()
193 if (!desc) in jz4780_dma_desc_alloc()
196 desc->desc = dma_pool_alloc(jzchan->desc_pool, GFP_NOWAIT, in jz4780_dma_desc_alloc()
197 &desc->desc_phys); in jz4780_dma_desc_alloc()
198 if (!desc->desc) { in jz4780_dma_desc_alloc()
199 kfree(desc); in jz4780_dma_desc_alloc()
203 desc->count = count; in jz4780_dma_desc_alloc()
204 desc->type = type; in jz4780_dma_desc_alloc()
205 return desc; in jz4780_dma_desc_alloc()
210 struct jz4780_dma_desc *desc = to_jz4780_dma_desc(vdesc); in jz4780_dma_desc_free() local
213 dma_pool_free(jzchan->desc_pool, desc->desc, desc->desc_phys); in jz4780_dma_desc_free()
214 kfree(desc); in jz4780_dma_desc_free()
242 struct jz4780_dma_hwdesc *desc, dma_addr_t addr, size_t len, in jz4780_dma_setup_hwdesc() argument
250 desc->dcm = JZ_DMA_DCM_SAI; in jz4780_dma_setup_hwdesc()
251 desc->dsa = addr; in jz4780_dma_setup_hwdesc()
252 desc->dta = config->dst_addr; in jz4780_dma_setup_hwdesc()
253 desc->drt = jzchan->transfer_type; in jz4780_dma_setup_hwdesc()
258 desc->dcm = JZ_DMA_DCM_DAI; in jz4780_dma_setup_hwdesc()
259 desc->dsa = config->src_addr; in jz4780_dma_setup_hwdesc()
260 desc->dta = addr; in jz4780_dma_setup_hwdesc()
261 desc->drt = jzchan->transfer_type; in jz4780_dma_setup_hwdesc()
288 desc->dcm |= tsz << JZ_DMA_DCM_TSZ_SHIFT; in jz4780_dma_setup_hwdesc()
289 desc->dcm |= width << JZ_DMA_DCM_SP_SHIFT; in jz4780_dma_setup_hwdesc()
290 desc->dcm |= width << JZ_DMA_DCM_DP_SHIFT; in jz4780_dma_setup_hwdesc()
292 desc->dtc = len >> ord; in jz4780_dma_setup_hwdesc()
300 struct jz4780_dma_desc *desc; in jz4780_dma_prep_slave_sg() local
304 desc = jz4780_dma_desc_alloc(jzchan, sg_len, DMA_SLAVE); in jz4780_dma_prep_slave_sg()
305 if (!desc) in jz4780_dma_prep_slave_sg()
309 err = jz4780_dma_setup_hwdesc(jzchan, &desc->desc[i], in jz4780_dma_prep_slave_sg()
317 desc->desc[i].dcm |= JZ_DMA_DCM_TIE; in jz4780_dma_prep_slave_sg()
321 desc->desc[i].dcm |= JZ_DMA_DCM_LINK; in jz4780_dma_prep_slave_sg()
328 desc->desc[i].dtc |= in jz4780_dma_prep_slave_sg()
329 (((i + 1) * sizeof(*desc->desc)) >> 4) << 24; in jz4780_dma_prep_slave_sg()
333 return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags); in jz4780_dma_prep_slave_sg()
342 struct jz4780_dma_desc *desc; in jz4780_dma_prep_dma_cyclic() local
351 desc = jz4780_dma_desc_alloc(jzchan, periods, DMA_CYCLIC); in jz4780_dma_prep_dma_cyclic()
352 if (!desc) in jz4780_dma_prep_dma_cyclic()
356 err = jz4780_dma_setup_hwdesc(jzchan, &desc->desc[i], buf_addr, in jz4780_dma_prep_dma_cyclic()
369 desc->desc[i].dcm |= JZ_DMA_DCM_TIE | JZ_DMA_DCM_LINK; in jz4780_dma_prep_dma_cyclic()
378 desc->desc[i].dtc |= in jz4780_dma_prep_dma_cyclic()
379 (((i + 1) * sizeof(*desc->desc)) >> 4) << 24; in jz4780_dma_prep_dma_cyclic()
383 return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags); in jz4780_dma_prep_dma_cyclic()
391 struct jz4780_dma_desc *desc; in jz4780_dma_prep_dma_memcpy() local
395 desc = jz4780_dma_desc_alloc(jzchan, 1, DMA_MEMCPY); in jz4780_dma_prep_dma_memcpy()
396 if (!desc) in jz4780_dma_prep_dma_memcpy()
403 desc->desc[0].dsa = src; in jz4780_dma_prep_dma_memcpy()
404 desc->desc[0].dta = dest; in jz4780_dma_prep_dma_memcpy()
405 desc->desc[0].drt = JZ_DMA_DRT_AUTO; in jz4780_dma_prep_dma_memcpy()
406 desc->desc[0].dcm = JZ_DMA_DCM_TIE | JZ_DMA_DCM_SAI | JZ_DMA_DCM_DAI | in jz4780_dma_prep_dma_memcpy()
410 desc->desc[0].dtc = len >> ord; in jz4780_dma_prep_dma_memcpy()
412 return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags); in jz4780_dma_prep_dma_memcpy()
422 if (!jzchan->desc) { in jz4780_dma_begin()
429 jzchan->desc = to_jz4780_dma_desc(vdesc); in jz4780_dma_begin()
432 if (jzchan->desc->type == DMA_CYCLIC && vdesc->tx.callback) { in jz4780_dma_begin()
447 for (i = 0; i < jzchan->desc->count; i++) in jz4780_dma_begin()
448 jzchan->desc->desc[i].dcm &= ~JZ_DMA_DCM_LINK; in jz4780_dma_begin()
457 (jzchan->curr_hwdesc + 1) % jzchan->desc->count; in jz4780_dma_begin()
464 desc_phys = jzchan->desc->desc_phys + in jz4780_dma_begin()
465 (jzchan->curr_hwdesc * sizeof(*jzchan->desc->desc)); in jz4780_dma_begin()
481 if (vchan_issue_pending(&jzchan->vchan) && !jzchan->desc) in jz4780_dma_issue_pending()
497 if (jzchan->desc) { in jz4780_dma_terminate_all()
498 jz4780_dma_desc_free(&jzchan->desc->vdesc); in jz4780_dma_terminate_all()
499 jzchan->desc = NULL; in jz4780_dma_terminate_all()
524 struct jz4780_dma_desc *desc, unsigned int next_sg) in jz4780_dma_desc_residue() argument
532 for (i = next_sg; i < desc->count; i++) in jz4780_dma_desc_residue()
533 residue += desc->desc[i].dtc << jzchan->transfer_shift; in jz4780_dma_desc_residue()
563 } else if (cookie == jzchan->desc->vdesc.tx.cookie) { in jz4780_dma_tx_status()
564 txstate->residue = jz4780_dma_desc_residue(jzchan, jzchan->desc, in jz4780_dma_tx_status()
565 (jzchan->curr_hwdesc + 1) % jzchan->desc->count); in jz4780_dma_tx_status()
569 if (vdesc && jzchan->desc && vdesc == &jzchan->desc->vdesc in jz4780_dma_tx_status()
570 && jzchan->desc->status & (JZ_DMA_DCS_AR | JZ_DMA_DCS_HLT)) in jz4780_dma_tx_status()
597 if (jzchan->desc) { in jz4780_dma_chan_irq()
598 jzchan->desc->status = dcs; in jz4780_dma_chan_irq()
601 if (jzchan->desc->type == DMA_CYCLIC) { in jz4780_dma_chan_irq()
602 vchan_cyclic_callback(&jzchan->desc->vdesc); in jz4780_dma_chan_irq()
604 vchan_cookie_complete(&jzchan->desc->vdesc); in jz4780_dma_chan_irq()
605 jzchan->desc = NULL; in jz4780_dma_chan_irq()