Lines Matching refs:vchan

139 	struct sun4i_dma_vchan		*vchan;  member
223 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_free_chan_resources() local
225 vchan_free_chan_resources(&vchan->vc); in sun4i_dma_free_chan_resources()
229 struct sun4i_dma_vchan *vchan) in find_and_use_pchan() argument
239 if (vchan->is_dedicated) { in find_and_use_pchan()
250 pchan->vchan = vchan; in find_and_use_pchan()
267 pchan->vchan = NULL; in release_pchan()
331 struct sun4i_dma_vchan *vchan) in __execute_vchan_pending() argument
339 lockdep_assert_held(&vchan->vc.lock); in __execute_vchan_pending()
342 pchan = find_and_use_pchan(priv, vchan); in __execute_vchan_pending()
350 if (vchan->processing) { in __execute_vchan_pending()
351 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
359 vd = vchan_next_desc(&vchan->vc); in __execute_vchan_pending()
361 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
372 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
380 vchan->processing = promise; in __execute_vchan_pending()
384 vchan->contract = contract; in __execute_vchan_pending()
385 vchan->pchan = pchan; in __execute_vchan_pending()
625 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_dma_memcpy() local
626 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_dma_memcpy()
644 if (vchan->is_dedicated) in sun4i_dma_prep_dma_memcpy()
656 if (vchan->is_dedicated) { in sun4i_dma_prep_dma_memcpy()
668 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_dma_memcpy()
676 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_dma_cyclic() local
677 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_dma_cyclic()
696 if (vchan->is_dedicated) { in sun4i_dma_prep_dma_cyclic()
709 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_dma_cyclic()
718 SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_dma_cyclic()
754 if (vchan->is_dedicated || period_len <= SUN4I_NDMA_MAX_SEG_SIZE / 2) { in sun4i_dma_prep_dma_cyclic()
770 if (vchan->is_dedicated) in sun4i_dma_prep_dma_cyclic()
788 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_dma_cyclic()
796 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_slave_sg() local
797 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_slave_sg()
818 if (vchan->is_dedicated) { in sun4i_dma_prep_slave_sg()
829 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_slave_sg()
836 SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_slave_sg()
861 if (vchan->is_dedicated) in sun4i_dma_prep_slave_sg()
884 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_slave_sg()
890 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_terminate_all() local
891 struct sun4i_dma_pchan *pchan = vchan->pchan; in sun4i_dma_terminate_all()
895 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
896 vchan_get_all_descriptors(&vchan->vc, &head); in sun4i_dma_terminate_all()
897 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
912 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
914 vchan->processing = NULL; in sun4i_dma_terminate_all()
915 vchan->pchan = NULL; in sun4i_dma_terminate_all()
916 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
918 vchan_dma_desc_free_list(&vchan->vc, &head); in sun4i_dma_terminate_all()
926 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_config() local
928 memcpy(&vchan->cfg, config, sizeof(*config)); in sun4i_dma_config()
937 struct sun4i_dma_vchan *vchan; in sun4i_dma_of_xlate() local
956 vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_of_xlate()
957 vchan->is_dedicated = is_dedicated; in sun4i_dma_of_xlate()
958 vchan->endpoint = endpoint; in sun4i_dma_of_xlate()
967 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_tx_status() local
968 struct sun4i_dma_pchan *pchan = vchan->pchan; in sun4i_dma_tx_status()
980 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_tx_status()
981 vd = vchan_find_desc(&vchan->vc, cookie); in sun4i_dma_tx_status()
1007 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_tx_status()
1015 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_issue_pending() local
1018 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_issue_pending()
1024 if (vchan_issue_pending(&vchan->vc)) in sun4i_dma_issue_pending()
1025 __execute_vchan_pending(priv, vchan); in sun4i_dma_issue_pending()
1027 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_issue_pending()
1034 struct sun4i_dma_vchan *vchan; in sun4i_dma_interrupt() local
1049 vchan = pchan->vchan; in sun4i_dma_interrupt()
1050 if (!vchan) /* a terminated channel may still interrupt */ in sun4i_dma_interrupt()
1052 contract = vchan->contract; in sun4i_dma_interrupt()
1059 spin_lock(&vchan->vc.lock); in sun4i_dma_interrupt()
1065 list_move_tail(&vchan->processing->list, in sun4i_dma_interrupt()
1083 vchan->processing = promise; in sun4i_dma_interrupt()
1087 vchan->processing = NULL; in sun4i_dma_interrupt()
1088 vchan->pchan = NULL; in sun4i_dma_interrupt()
1095 spin_unlock(&vchan->vc.lock); in sun4i_dma_interrupt()
1121 vchan = &priv->vchans[i]; in sun4i_dma_interrupt()
1122 spin_lock(&vchan->vc.lock); in sun4i_dma_interrupt()
1123 __execute_vchan_pending(priv, vchan); in sun4i_dma_interrupt()
1124 spin_unlock(&vchan->vc.lock); in sun4i_dma_interrupt()
1223 struct sun4i_dma_vchan *vchan = &priv->vchans[i]; in sun4i_dma_probe() local
1225 spin_lock_init(&vchan->vc.lock); in sun4i_dma_probe()
1226 vchan->vc.desc_free = sun4i_dma_free_contract; in sun4i_dma_probe()
1227 vchan_init(&vchan->vc, &priv->slave); in sun4i_dma_probe()