Lines Matching refs:vchan
133 struct sun4i_dma_vchan *vchan; member
216 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_free_chan_resources() local
218 vchan_free_chan_resources(&vchan->vc); in sun4i_dma_free_chan_resources()
222 struct sun4i_dma_vchan *vchan) in find_and_use_pchan() argument
232 if (vchan->is_dedicated) { in find_and_use_pchan()
243 pchan->vchan = vchan; in find_and_use_pchan()
260 pchan->vchan = NULL; in release_pchan()
324 struct sun4i_dma_vchan *vchan) in __execute_vchan_pending() argument
332 lockdep_assert_held(&vchan->vc.lock); in __execute_vchan_pending()
335 pchan = find_and_use_pchan(priv, vchan); in __execute_vchan_pending()
343 if (vchan->processing) { in __execute_vchan_pending()
344 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
352 vd = vchan_next_desc(&vchan->vc); in __execute_vchan_pending()
354 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
365 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
373 vchan->processing = promise; in __execute_vchan_pending()
377 vchan->contract = contract; in __execute_vchan_pending()
378 vchan->pchan = pchan; in __execute_vchan_pending()
618 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_dma_memcpy() local
619 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_dma_memcpy()
637 if (vchan->is_dedicated) in sun4i_dma_prep_dma_memcpy()
649 if (vchan->is_dedicated) { in sun4i_dma_prep_dma_memcpy()
661 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_dma_memcpy()
669 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_dma_cyclic() local
670 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_dma_cyclic()
682 if (vchan->is_dedicated) { in sun4i_dma_prep_dma_cyclic()
705 SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_dma_cyclic()
710 endpoints = SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_dma_cyclic()
767 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_dma_cyclic()
775 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_slave_sg() local
776 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_slave_sg()
797 if (vchan->is_dedicated) { in sun4i_dma_prep_slave_sg()
808 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_slave_sg()
815 SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_slave_sg()
840 if (vchan->is_dedicated) in sun4i_dma_prep_slave_sg()
863 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_slave_sg()
869 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_terminate_all() local
870 struct sun4i_dma_pchan *pchan = vchan->pchan; in sun4i_dma_terminate_all()
874 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
875 vchan_get_all_descriptors(&vchan->vc, &head); in sun4i_dma_terminate_all()
876 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
891 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
892 vchan_dma_desc_free_list(&vchan->vc, &head); in sun4i_dma_terminate_all()
894 vchan->processing = NULL; in sun4i_dma_terminate_all()
895 vchan->pchan = NULL; in sun4i_dma_terminate_all()
896 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
904 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_config() local
906 memcpy(&vchan->cfg, config, sizeof(*config)); in sun4i_dma_config()
915 struct sun4i_dma_vchan *vchan; in sun4i_dma_of_xlate() local
934 vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_of_xlate()
935 vchan->is_dedicated = is_dedicated; in sun4i_dma_of_xlate()
936 vchan->endpoint = endpoint; in sun4i_dma_of_xlate()
945 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_tx_status() local
946 struct sun4i_dma_pchan *pchan = vchan->pchan; in sun4i_dma_tx_status()
958 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_tx_status()
959 vd = vchan_find_desc(&vchan->vc, cookie); in sun4i_dma_tx_status()
985 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_tx_status()
993 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_issue_pending() local
996 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_issue_pending()
1002 if (vchan_issue_pending(&vchan->vc)) in sun4i_dma_issue_pending()
1003 __execute_vchan_pending(priv, vchan); in sun4i_dma_issue_pending()
1005 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_issue_pending()
1012 struct sun4i_dma_vchan *vchan; in sun4i_dma_interrupt() local
1027 vchan = pchan->vchan; in sun4i_dma_interrupt()
1028 if (!vchan) /* a terminated channel may still interrupt */ in sun4i_dma_interrupt()
1030 contract = vchan->contract; in sun4i_dma_interrupt()
1037 spin_lock(&vchan->vc.lock); in sun4i_dma_interrupt()
1043 list_del(&vchan->processing->list); in sun4i_dma_interrupt()
1044 list_add_tail(&vchan->processing->list, in sun4i_dma_interrupt()
1062 vchan->processing = promise; in sun4i_dma_interrupt()
1066 vchan->processing = NULL; in sun4i_dma_interrupt()
1067 vchan->pchan = NULL; in sun4i_dma_interrupt()
1074 spin_unlock(&vchan->vc.lock); in sun4i_dma_interrupt()
1100 vchan = &priv->vchans[i]; in sun4i_dma_interrupt()
1101 spin_lock(&vchan->vc.lock); in sun4i_dma_interrupt()
1102 __execute_vchan_pending(priv, vchan); in sun4i_dma_interrupt()
1103 spin_unlock(&vchan->vc.lock); in sun4i_dma_interrupt()
1204 struct sun4i_dma_vchan *vchan = &priv->vchans[i]; in sun4i_dma_probe() local
1206 spin_lock_init(&vchan->vc.lock); in sun4i_dma_probe()
1207 vchan->vc.desc_free = sun4i_dma_free_contract; in sun4i_dma_probe()
1208 vchan_init(&vchan->vc, &priv->slave); in sun4i_dma_probe()