Lines Matching refs:desc
121 struct jz4780_dma_hwdesc *desc; member
138 struct jz4780_dma_desc *desc; member
235 struct jz4780_dma_desc *desc; in jz4780_dma_desc_alloc() local
240 desc = kzalloc(sizeof(*desc), GFP_NOWAIT); in jz4780_dma_desc_alloc()
241 if (!desc) in jz4780_dma_desc_alloc()
244 desc->desc = dma_pool_alloc(jzchan->desc_pool, GFP_NOWAIT, in jz4780_dma_desc_alloc()
245 &desc->desc_phys); in jz4780_dma_desc_alloc()
246 if (!desc->desc) { in jz4780_dma_desc_alloc()
247 kfree(desc); in jz4780_dma_desc_alloc()
251 desc->count = count; in jz4780_dma_desc_alloc()
252 desc->type = type; in jz4780_dma_desc_alloc()
255 desc->transfer_type = jzchan->transfer_type_rx; in jz4780_dma_desc_alloc()
257 desc->transfer_type = jzchan->transfer_type_tx; in jz4780_dma_desc_alloc()
259 return desc; in jz4780_dma_desc_alloc()
264 struct jz4780_dma_desc *desc = to_jz4780_dma_desc(vdesc); in jz4780_dma_desc_free() local
267 dma_pool_free(jzchan->desc_pool, desc->desc, desc->desc_phys); in jz4780_dma_desc_free()
268 kfree(desc); in jz4780_dma_desc_free()
310 struct jz4780_dma_hwdesc *desc, dma_addr_t addr, size_t len, in jz4780_dma_setup_hwdesc() argument
317 desc->dcm = JZ_DMA_DCM_SAI; in jz4780_dma_setup_hwdesc()
318 desc->dsa = addr; in jz4780_dma_setup_hwdesc()
319 desc->dta = config->dst_addr; in jz4780_dma_setup_hwdesc()
324 desc->dcm = JZ_DMA_DCM_DAI; in jz4780_dma_setup_hwdesc()
325 desc->dsa = config->src_addr; in jz4780_dma_setup_hwdesc()
326 desc->dta = addr; in jz4780_dma_setup_hwdesc()
353 desc->dcm |= tsz << JZ_DMA_DCM_TSZ_SHIFT; in jz4780_dma_setup_hwdesc()
354 desc->dcm |= width << JZ_DMA_DCM_SP_SHIFT; in jz4780_dma_setup_hwdesc()
355 desc->dcm |= width << JZ_DMA_DCM_DP_SHIFT; in jz4780_dma_setup_hwdesc()
357 desc->dtc = len >> jzchan->transfer_shift; in jz4780_dma_setup_hwdesc()
368 struct jz4780_dma_desc *desc; in jz4780_dma_prep_slave_sg() local
372 desc = jz4780_dma_desc_alloc(jzchan, sg_len, DMA_SLAVE, direction); in jz4780_dma_prep_slave_sg()
373 if (!desc) in jz4780_dma_prep_slave_sg()
377 err = jz4780_dma_setup_hwdesc(jzchan, &desc->desc[i], in jz4780_dma_prep_slave_sg()
382 jz4780_dma_desc_free(&jzchan->desc->vdesc); in jz4780_dma_prep_slave_sg()
386 desc->desc[i].dcm |= JZ_DMA_DCM_TIE; in jz4780_dma_prep_slave_sg()
391 desc->desc[i].dcm |= JZ_DMA_DCM_LINK; in jz4780_dma_prep_slave_sg()
398 desc->desc[i].dtc |= in jz4780_dma_prep_slave_sg()
399 (((i + 1) * sizeof(*desc->desc)) >> 4) << 24; in jz4780_dma_prep_slave_sg()
403 return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags); in jz4780_dma_prep_slave_sg()
412 struct jz4780_dma_desc *desc; in jz4780_dma_prep_dma_cyclic() local
421 desc = jz4780_dma_desc_alloc(jzchan, periods, DMA_CYCLIC, direction); in jz4780_dma_prep_dma_cyclic()
422 if (!desc) in jz4780_dma_prep_dma_cyclic()
426 err = jz4780_dma_setup_hwdesc(jzchan, &desc->desc[i], buf_addr, in jz4780_dma_prep_dma_cyclic()
429 jz4780_dma_desc_free(&jzchan->desc->vdesc); in jz4780_dma_prep_dma_cyclic()
441 desc->desc[i].dcm |= JZ_DMA_DCM_TIE | JZ_DMA_DCM_LINK; in jz4780_dma_prep_dma_cyclic()
450 desc->desc[i].dtc |= in jz4780_dma_prep_dma_cyclic()
451 (((i + 1) * sizeof(*desc->desc)) >> 4) << 24; in jz4780_dma_prep_dma_cyclic()
455 return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags); in jz4780_dma_prep_dma_cyclic()
463 struct jz4780_dma_desc *desc; in jz4780_dma_prep_dma_memcpy() local
466 desc = jz4780_dma_desc_alloc(jzchan, 1, DMA_MEMCPY, 0); in jz4780_dma_prep_dma_memcpy()
467 if (!desc) in jz4780_dma_prep_dma_memcpy()
473 desc->transfer_type = JZ_DMA_DRT_AUTO; in jz4780_dma_prep_dma_memcpy()
475 desc->desc[0].dsa = src; in jz4780_dma_prep_dma_memcpy()
476 desc->desc[0].dta = dest; in jz4780_dma_prep_dma_memcpy()
477 desc->desc[0].dcm = JZ_DMA_DCM_TIE | JZ_DMA_DCM_SAI | JZ_DMA_DCM_DAI | in jz4780_dma_prep_dma_memcpy()
481 desc->desc[0].dtc = len >> jzchan->transfer_shift; in jz4780_dma_prep_dma_memcpy()
483 return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags); in jz4780_dma_prep_dma_memcpy()
493 if (!jzchan->desc) { in jz4780_dma_begin()
500 jzchan->desc = to_jz4780_dma_desc(vdesc); in jz4780_dma_begin()
503 if (jzchan->desc->type == DMA_CYCLIC && vdesc->tx.callback) { in jz4780_dma_begin()
518 for (i = 0; i < jzchan->desc->count; i++) in jz4780_dma_begin()
519 jzchan->desc->desc[i].dcm &= ~JZ_DMA_DCM_LINK; in jz4780_dma_begin()
528 (jzchan->curr_hwdesc + 1) % jzchan->desc->count; in jz4780_dma_begin()
539 jzchan->desc->transfer_type); in jz4780_dma_begin()
548 jzchan->desc->desc[jzchan->curr_hwdesc].dtc); in jz4780_dma_begin()
551 desc_phys = jzchan->desc->desc_phys + in jz4780_dma_begin()
552 (jzchan->curr_hwdesc * sizeof(*jzchan->desc->desc)); in jz4780_dma_begin()
568 if (vchan_issue_pending(&jzchan->vchan) && !jzchan->desc) in jz4780_dma_issue_pending()
585 if (jzchan->desc) { in jz4780_dma_terminate_all()
586 vchan_terminate_vdesc(&jzchan->desc->vdesc); in jz4780_dma_terminate_all()
587 jzchan->desc = NULL; in jz4780_dma_terminate_all()
625 struct jz4780_dma_desc *desc, unsigned int next_sg) in jz4780_dma_desc_residue() argument
631 for (i = next_sg; i < desc->count; i++) in jz4780_dma_desc_residue()
632 count += desc->desc[i].dtc & GENMASK(23, 0); in jz4780_dma_desc_residue()
661 } else if (cookie == jzchan->desc->vdesc.tx.cookie) { in jz4780_dma_tx_status()
662 residue = jz4780_dma_desc_residue(jzchan, jzchan->desc, in jz4780_dma_tx_status()
667 if (vdesc && jzchan->desc && vdesc == &jzchan->desc->vdesc in jz4780_dma_tx_status()
668 && jzchan->desc->status & (JZ_DMA_DCS_AR | JZ_DMA_DCS_HLT)) in jz4780_dma_tx_status()
680 struct jz4780_dma_desc *desc = jzchan->desc; in jz4780_dma_chan_irq() local
699 if (jzchan->desc) { in jz4780_dma_chan_irq()
700 jzchan->desc->status = dcs; in jz4780_dma_chan_irq()
703 if (jzchan->desc->type == DMA_CYCLIC) { in jz4780_dma_chan_irq()
704 vchan_cyclic_callback(&jzchan->desc->vdesc); in jz4780_dma_chan_irq()
709 (jzchan->curr_hwdesc + 1 == desc->count)) { in jz4780_dma_chan_irq()
710 vchan_cookie_complete(&desc->vdesc); in jz4780_dma_chan_irq()
711 jzchan->desc = NULL; in jz4780_dma_chan_irq()