Lines Matching refs:echan

75 	struct edma_chan		*echan;  member
150 static void edma_execute(struct edma_chan *echan) in edma_execute() argument
154 struct device *dev = echan->vchan.chan.device->dev; in edma_execute()
158 if (!echan->edesc || in edma_execute()
159 echan->edesc->pset_nr == echan->edesc->processed) { in edma_execute()
161 vdesc = vchan_next_desc(&echan->vchan); in edma_execute()
163 echan->edesc = NULL; in edma_execute()
167 echan->edesc = to_edma_desc(&vdesc->tx); in edma_execute()
170 edesc = echan->edesc; in edma_execute()
180 edma_write_slot(echan->slot[i], &edesc->pset[j].param); in edma_execute()
182 dev_vdbg(echan->vchan.chan.device->dev, in edma_execute()
194 j, echan->ch_num, echan->slot[i], in edma_execute()
205 edma_link(echan->slot[i], echan->slot[i+1]); in edma_execute()
217 edma_link(echan->slot[nslots-1], echan->slot[1]); in edma_execute()
219 edma_link(echan->slot[nslots-1], in edma_execute()
220 echan->ecc->dummy_slot); in edma_execute()
225 echan->ch_num); in edma_execute()
226 edma_start(echan->ch_num); in edma_execute()
229 echan->ch_num, edesc->processed); in edma_execute()
230 edma_resume(echan->ch_num); in edma_execute()
238 if (echan->missed) { in edma_execute()
239 dev_dbg(dev, "missed event on channel %d\n", echan->ch_num); in edma_execute()
240 edma_clean_channel(echan->ch_num); in edma_execute()
241 edma_stop(echan->ch_num); in edma_execute()
242 edma_start(echan->ch_num); in edma_execute()
243 edma_trigger_channel(echan->ch_num); in edma_execute()
244 echan->missed = 0; in edma_execute()
250 struct edma_chan *echan = to_edma_chan(chan); in edma_terminate_all() local
254 spin_lock_irqsave(&echan->vchan.lock, flags); in edma_terminate_all()
261 if (echan->edesc) { in edma_terminate_all()
262 int cyclic = echan->edesc->cyclic; in edma_terminate_all()
268 edma_desc_free(&echan->edesc->vdesc); in edma_terminate_all()
270 echan->edesc = NULL; in edma_terminate_all()
271 edma_stop(echan->ch_num); in edma_terminate_all()
274 edma_assign_channel_eventq(echan->ch_num, in edma_terminate_all()
278 vchan_get_all_descriptors(&echan->vchan, &head); in edma_terminate_all()
279 spin_unlock_irqrestore(&echan->vchan.lock, flags); in edma_terminate_all()
280 vchan_dma_desc_free_list(&echan->vchan, &head); in edma_terminate_all()
288 struct edma_chan *echan = to_edma_chan(chan); in edma_slave_config() local
294 memcpy(&echan->cfg, cfg, sizeof(echan->cfg)); in edma_slave_config()
301 struct edma_chan *echan = to_edma_chan(chan); in edma_dma_pause() local
304 if (!echan->edesc || !echan->edesc->cyclic) in edma_dma_pause()
307 edma_pause(echan->ch_num); in edma_dma_pause()
313 struct edma_chan *echan = to_edma_chan(chan); in edma_dma_resume() local
316 if (!echan->edesc->cyclic) in edma_dma_resume()
319 edma_resume(echan->ch_num); in edma_dma_resume()
339 struct edma_chan *echan = to_edma_chan(chan); in edma_config_pset() local
425 param->opt = EDMA_TCC(EDMA_CHAN_SLOT(echan->ch_num)); in edma_config_pset()
453 struct edma_chan *echan = to_edma_chan(chan); in edma_prep_slave_sg() local
462 if (unlikely(!echan || !sgl || !sg_len)) in edma_prep_slave_sg()
466 src_addr = echan->cfg.src_addr; in edma_prep_slave_sg()
467 dev_width = echan->cfg.src_addr_width; in edma_prep_slave_sg()
468 burst = echan->cfg.src_maxburst; in edma_prep_slave_sg()
470 dst_addr = echan->cfg.dst_addr; in edma_prep_slave_sg()
471 dev_width = echan->cfg.dst_addr_width; in edma_prep_slave_sg()
472 burst = echan->cfg.dst_maxburst; in edma_prep_slave_sg()
493 edesc->echan = echan; in edma_prep_slave_sg()
499 if (echan->slot[i] < 0) { in edma_prep_slave_sg()
500 echan->slot[i] = in edma_prep_slave_sg()
501 edma_alloc_slot(EDMA_CTLR(echan->ch_num), in edma_prep_slave_sg()
503 if (echan->slot[i] < 0) { in edma_prep_slave_sg()
542 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_slave_sg()
552 struct edma_chan *echan = to_edma_chan(chan); in edma_prep_dma_memcpy() local
554 if (unlikely(!echan || !len)) in edma_prep_dma_memcpy()
580 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_dma_memcpy()
588 struct edma_chan *echan = to_edma_chan(chan); in edma_prep_dma_cyclic() local
596 if (unlikely(!echan || !buf_len || !period_len)) in edma_prep_dma_cyclic()
600 src_addr = echan->cfg.src_addr; in edma_prep_dma_cyclic()
602 dev_width = echan->cfg.src_addr_width; in edma_prep_dma_cyclic()
603 burst = echan->cfg.src_maxburst; in edma_prep_dma_cyclic()
606 dst_addr = echan->cfg.dst_addr; in edma_prep_dma_cyclic()
607 dev_width = echan->cfg.dst_addr_width; in edma_prep_dma_cyclic()
608 burst = echan->cfg.dst_maxburst; in edma_prep_dma_cyclic()
648 edesc->echan = echan; in edma_prep_dma_cyclic()
651 __func__, echan->ch_num, nslots, period_len, buf_len); in edma_prep_dma_cyclic()
655 if (echan->slot[i] < 0) { in edma_prep_dma_cyclic()
656 echan->slot[i] = in edma_prep_dma_cyclic()
657 edma_alloc_slot(EDMA_CTLR(echan->ch_num), in edma_prep_dma_cyclic()
659 if (echan->slot[i] < 0) { in edma_prep_dma_cyclic()
699 i, echan->ch_num, echan->slot[i], in edma_prep_dma_cyclic()
719 edma_assign_channel_eventq(echan->ch_num, EVENTQ_0); in edma_prep_dma_cyclic()
721 return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); in edma_prep_dma_cyclic()
726 struct edma_chan *echan = data; in edma_callback() local
727 struct device *dev = echan->vchan.chan.device->dev; in edma_callback()
731 edesc = echan->edesc; in edma_callback()
735 edma_pause(echan->ch_num); in edma_callback()
739 spin_lock(&echan->vchan.lock); in edma_callback()
747 edma_stop(echan->ch_num); in edma_callback()
749 edma_execute(echan); in edma_callback()
758 edma_execute(echan); in edma_callback()
762 spin_unlock(&echan->vchan.lock); in edma_callback()
766 spin_lock(&echan->vchan.lock); in edma_callback()
768 edma_read_slot(EDMA_CHAN_SLOT(echan->slot[0]), &p); in edma_callback()
784 echan->missed = 1; in edma_callback()
791 edma_clean_channel(echan->ch_num); in edma_callback()
792 edma_stop(echan->ch_num); in edma_callback()
793 edma_start(echan->ch_num); in edma_callback()
794 edma_trigger_channel(echan->ch_num); in edma_callback()
797 spin_unlock(&echan->vchan.lock); in edma_callback()
808 struct edma_chan *echan = to_edma_chan(chan); in edma_alloc_chan_resources() local
814 a_ch_num = edma_alloc_channel(echan->ch_num, edma_callback, in edma_alloc_chan_resources()
815 echan, EVENTQ_DEFAULT); in edma_alloc_chan_resources()
822 if (a_ch_num != echan->ch_num) { in edma_alloc_chan_resources()
824 EDMA_CTLR(echan->ch_num), in edma_alloc_chan_resources()
825 EDMA_CHAN_SLOT(echan->ch_num)); in edma_alloc_chan_resources()
830 echan->alloced = true; in edma_alloc_chan_resources()
831 echan->slot[0] = echan->ch_num; in edma_alloc_chan_resources()
833 dev_dbg(dev, "allocated channel %d for %u:%u\n", echan->ch_num, in edma_alloc_chan_resources()
834 EDMA_CTLR(echan->ch_num), EDMA_CHAN_SLOT(echan->ch_num)); in edma_alloc_chan_resources()
847 struct edma_chan *echan = to_edma_chan(chan); in edma_free_chan_resources() local
852 edma_stop(echan->ch_num); in edma_free_chan_resources()
854 vchan_free_chan_resources(&echan->vchan); in edma_free_chan_resources()
858 if (echan->slot[i] >= 0) { in edma_free_chan_resources()
859 edma_free_slot(echan->slot[i]); in edma_free_chan_resources()
860 echan->slot[i] = -1; in edma_free_chan_resources()
865 if (echan->alloced) { in edma_free_chan_resources()
866 edma_free_channel(echan->ch_num); in edma_free_chan_resources()
867 echan->alloced = false; in edma_free_chan_resources()
870 dev_dbg(dev, "freeing channel for %u\n", echan->ch_num); in edma_free_chan_resources()
876 struct edma_chan *echan = to_edma_chan(chan); in edma_issue_pending() local
879 spin_lock_irqsave(&echan->vchan.lock, flags); in edma_issue_pending()
880 if (vchan_issue_pending(&echan->vchan) && !echan->edesc) in edma_issue_pending()
881 edma_execute(echan); in edma_issue_pending()
882 spin_unlock_irqrestore(&echan->vchan.lock, flags); in edma_issue_pending()
896 pos = edma_get_position(edesc->echan->slot[0], dst); in edma_residue()
938 struct edma_chan *echan = to_edma_chan(chan); in edma_tx_status() local
947 spin_lock_irqsave(&echan->vchan.lock, flags); in edma_tx_status()
948 if (echan->edesc && echan->edesc->vdesc.tx.cookie == cookie) in edma_tx_status()
949 txstate->residue = edma_residue(echan->edesc); in edma_tx_status()
950 else if ((vdesc = vchan_find_desc(&echan->vchan, cookie))) in edma_tx_status()
952 spin_unlock_irqrestore(&echan->vchan.lock, flags); in edma_tx_status()
964 struct edma_chan *echan = &echans[i]; in edma_chan_init() local
965 echan->ch_num = EDMA_CTLR_CHAN(ecc->ctlr, i); in edma_chan_init()
966 echan->ecc = ecc; in edma_chan_init()
967 echan->vchan.desc_free = edma_desc_free; in edma_chan_init()
969 vchan_init(&echan->vchan, dma); in edma_chan_init()
971 INIT_LIST_HEAD(&echan->node); in edma_chan_init()
973 echan->slot[j] = -1; in edma_chan_init()
1081 struct edma_chan *echan = to_edma_chan(chan); in edma_filter_fn() local
1083 return ch_req == echan->ch_num; in edma_filter_fn()