Lines Matching refs:vchan

138 	struct sun6i_vchan	*vchan;  member
318 static inline void sun6i_dma_dump_lli(struct sun6i_vchan *vchan, in sun6i_dma_dump_lli() argument
323 dev_dbg(chan2dev(&vchan->vc.chan), in sun6i_dma_dump_lli()
358 static int sun6i_dma_start_desc(struct sun6i_vchan *vchan) in sun6i_dma_start_desc() argument
360 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(vchan->vc.chan.device); in sun6i_dma_start_desc()
361 struct virt_dma_desc *desc = vchan_next_desc(&vchan->vc); in sun6i_dma_start_desc()
362 struct sun6i_pchan *pchan = vchan->phy; in sun6i_dma_start_desc()
379 sun6i_dma_dump_lli(vchan, pchan->desc->v_lli); in sun6i_dma_start_desc()
401 struct sun6i_vchan *vchan; in sun6i_dma_tasklet() local
406 list_for_each_entry(vchan, &sdev->slave.channels, vc.chan.device_node) { in sun6i_dma_tasklet()
407 spin_lock_irq(&vchan->vc.lock); in sun6i_dma_tasklet()
409 pchan = vchan->phy; in sun6i_dma_tasklet()
412 if (sun6i_dma_start_desc(vchan)) { in sun6i_dma_tasklet()
420 vchan->phy = NULL; in sun6i_dma_tasklet()
421 pchan->vchan = NULL; in sun6i_dma_tasklet()
424 spin_unlock_irq(&vchan->vc.lock); in sun6i_dma_tasklet()
431 if (pchan->vchan || list_empty(&sdev->pending)) in sun6i_dma_tasklet()
434 vchan = list_first_entry(&sdev->pending, in sun6i_dma_tasklet()
438 list_del_init(&vchan->node); in sun6i_dma_tasklet()
442 pchan->vchan = vchan; in sun6i_dma_tasklet()
443 vchan->phy = pchan; in sun6i_dma_tasklet()
445 pchan->idx, &vchan->vc); in sun6i_dma_tasklet()
454 vchan = pchan->vchan; in sun6i_dma_tasklet()
455 if (vchan) { in sun6i_dma_tasklet()
456 spin_lock_irq(&vchan->vc.lock); in sun6i_dma_tasklet()
457 sun6i_dma_start_desc(vchan); in sun6i_dma_tasklet()
458 spin_unlock_irq(&vchan->vc.lock); in sun6i_dma_tasklet()
466 struct sun6i_vchan *vchan; in sun6i_dma_interrupt() local
484 vchan = pchan->vchan; in sun6i_dma_interrupt()
486 if (vchan) { in sun6i_dma_interrupt()
487 spin_lock(&vchan->vc.lock); in sun6i_dma_interrupt()
490 spin_unlock(&vchan->vc.lock); in sun6i_dma_interrupt()
510 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_prep_dma_memcpy() local
518 __func__, vchan->vc.chan.chan_id, &dest, &src, len, flags); in sun6i_dma_prep_dma_memcpy()
551 sun6i_dma_dump_lli(vchan, v_lli); in sun6i_dma_prep_dma_memcpy()
553 return vchan_tx_prep(&vchan->vc, &txd->vd, flags); in sun6i_dma_prep_dma_memcpy()
566 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_prep_slave_sg() local
567 struct dma_slave_config *sconfig = &vchan->cfg; in sun6i_dma_prep_slave_sg()
601 DMA_CHAN_CFG_DST_DRQ(vchan->port); in sun6i_dma_prep_slave_sg()
605 __func__, vchan->vc.chan.chan_id, in sun6i_dma_prep_slave_sg()
619 DMA_CHAN_CFG_SRC_DRQ(vchan->port); in sun6i_dma_prep_slave_sg()
623 __func__, vchan->vc.chan.chan_id, in sun6i_dma_prep_slave_sg()
633 sun6i_dma_dump_lli(vchan, prev); in sun6i_dma_prep_slave_sg()
635 return vchan_tx_prep(&vchan->vc, &txd->vd, flags); in sun6i_dma_prep_slave_sg()
649 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_config() local
651 memcpy(&vchan->cfg, config, sizeof(*config)); in sun6i_dma_config()
659 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_pause() local
660 struct sun6i_pchan *pchan = vchan->phy; in sun6i_dma_pause()
662 dev_dbg(chan2dev(chan), "vchan %p: pause\n", &vchan->vc); in sun6i_dma_pause()
669 list_del_init(&vchan->node); in sun6i_dma_pause()
679 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_resume() local
680 struct sun6i_pchan *pchan = vchan->phy; in sun6i_dma_resume()
683 dev_dbg(chan2dev(chan), "vchan %p: resume\n", &vchan->vc); in sun6i_dma_resume()
685 spin_lock_irqsave(&vchan->vc.lock, flags); in sun6i_dma_resume()
690 } else if (!list_empty(&vchan->vc.desc_issued)) { in sun6i_dma_resume()
692 list_add_tail(&vchan->node, &sdev->pending); in sun6i_dma_resume()
696 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun6i_dma_resume()
704 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_terminate_all() local
705 struct sun6i_pchan *pchan = vchan->phy; in sun6i_dma_terminate_all()
710 list_del_init(&vchan->node); in sun6i_dma_terminate_all()
713 spin_lock_irqsave(&vchan->vc.lock, flags); in sun6i_dma_terminate_all()
715 vchan_get_all_descriptors(&vchan->vc, &head); in sun6i_dma_terminate_all()
721 vchan->phy = NULL; in sun6i_dma_terminate_all()
722 pchan->vchan = NULL; in sun6i_dma_terminate_all()
727 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun6i_dma_terminate_all()
729 vchan_dma_desc_free_list(&vchan->vc, &head); in sun6i_dma_terminate_all()
738 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_tx_status() local
739 struct sun6i_pchan *pchan = vchan->phy; in sun6i_dma_tx_status()
751 spin_lock_irqsave(&vchan->vc.lock, flags); in sun6i_dma_tx_status()
753 vd = vchan_find_desc(&vchan->vc, cookie); in sun6i_dma_tx_status()
765 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun6i_dma_tx_status()
775 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_issue_pending() local
778 spin_lock_irqsave(&vchan->vc.lock, flags); in sun6i_dma_issue_pending()
780 if (vchan_issue_pending(&vchan->vc)) { in sun6i_dma_issue_pending()
783 if (!vchan->phy && list_empty(&vchan->node)) { in sun6i_dma_issue_pending()
784 list_add_tail(&vchan->node, &sdev->pending); in sun6i_dma_issue_pending()
787 &vchan->vc); in sun6i_dma_issue_pending()
793 &vchan->vc); in sun6i_dma_issue_pending()
796 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun6i_dma_issue_pending()
802 struct sun6i_vchan *vchan = to_sun6i_vchan(chan); in sun6i_dma_free_chan_resources() local
806 list_del_init(&vchan->node); in sun6i_dma_free_chan_resources()
809 vchan_free_chan_resources(&vchan->vc); in sun6i_dma_free_chan_resources()
816 struct sun6i_vchan *vchan; in sun6i_dma_of_xlate() local
827 vchan = to_sun6i_vchan(chan); in sun6i_dma_of_xlate()
828 vchan->port = port; in sun6i_dma_of_xlate()
854 struct sun6i_vchan *vchan = &sdev->vchans[i]; in sun6i_dma_free() local
856 list_del(&vchan->vc.chan.device_node); in sun6i_dma_free()
857 tasklet_kill(&vchan->vc.task); in sun6i_dma_free()
996 struct sun6i_vchan *vchan = &sdc->vchans[i]; in sun6i_dma_probe() local
998 INIT_LIST_HEAD(&vchan->node); in sun6i_dma_probe()
999 vchan->vc.desc_free = sun6i_dma_free_desc; in sun6i_dma_probe()
1000 vchan_init(&vchan->vc, &sdc->slave); in sun6i_dma_probe()