Lines Matching refs:vchan

129 	struct sun4i_dma_vchan		*vchan;  member
212 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_free_chan_resources() local
214 vchan_free_chan_resources(&vchan->vc); in sun4i_dma_free_chan_resources()
218 struct sun4i_dma_vchan *vchan) in find_and_use_pchan() argument
228 if (vchan->is_dedicated) { in find_and_use_pchan()
239 pchan->vchan = vchan; in find_and_use_pchan()
256 pchan->vchan = NULL; in release_pchan()
320 struct sun4i_dma_vchan *vchan) in __execute_vchan_pending() argument
328 lockdep_assert_held(&vchan->vc.lock); in __execute_vchan_pending()
331 pchan = find_and_use_pchan(priv, vchan); in __execute_vchan_pending()
339 if (vchan->processing) { in __execute_vchan_pending()
340 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
348 vd = vchan_next_desc(&vchan->vc); in __execute_vchan_pending()
350 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
361 dev_dbg(chan2dev(&vchan->vc.chan), in __execute_vchan_pending()
369 vchan->processing = promise; in __execute_vchan_pending()
373 vchan->contract = contract; in __execute_vchan_pending()
374 vchan->pchan = pchan; in __execute_vchan_pending()
614 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_dma_memcpy() local
615 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_dma_memcpy()
633 if (vchan->is_dedicated) in sun4i_dma_prep_dma_memcpy()
645 if (vchan->is_dedicated) { in sun4i_dma_prep_dma_memcpy()
657 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_dma_memcpy()
665 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_dma_cyclic() local
666 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_dma_cyclic()
685 if (vchan->is_dedicated) { in sun4i_dma_prep_dma_cyclic()
698 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_dma_cyclic()
707 SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_dma_cyclic()
750 if (vchan->is_dedicated) in sun4i_dma_prep_dma_cyclic()
768 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_dma_cyclic()
776 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_prep_slave_sg() local
777 struct dma_slave_config *sconfig = &vchan->cfg; in sun4i_dma_prep_slave_sg()
798 if (vchan->is_dedicated) { in sun4i_dma_prep_slave_sg()
809 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_slave_sg()
816 SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | in sun4i_dma_prep_slave_sg()
841 if (vchan->is_dedicated) in sun4i_dma_prep_slave_sg()
864 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); in sun4i_dma_prep_slave_sg()
870 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_terminate_all() local
871 struct sun4i_dma_pchan *pchan = vchan->pchan; in sun4i_dma_terminate_all()
875 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
876 vchan_get_all_descriptors(&vchan->vc, &head); in sun4i_dma_terminate_all()
877 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_terminate_all()
892 spin_lock_irqsave(&vchan->vc.lock, flags); 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()
898 vchan_dma_desc_free_list(&vchan->vc, &head); in sun4i_dma_terminate_all()
906 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_config() local
908 memcpy(&vchan->cfg, config, sizeof(*config)); in sun4i_dma_config()
917 struct sun4i_dma_vchan *vchan; in sun4i_dma_of_xlate() local
936 vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_of_xlate()
937 vchan->is_dedicated = is_dedicated; in sun4i_dma_of_xlate()
938 vchan->endpoint = endpoint; in sun4i_dma_of_xlate()
947 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_tx_status() local
948 struct sun4i_dma_pchan *pchan = vchan->pchan; in sun4i_dma_tx_status()
960 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_tx_status()
961 vd = vchan_find_desc(&vchan->vc, cookie); in sun4i_dma_tx_status()
987 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_tx_status()
995 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); in sun4i_dma_issue_pending() local
998 spin_lock_irqsave(&vchan->vc.lock, flags); in sun4i_dma_issue_pending()
1004 if (vchan_issue_pending(&vchan->vc)) in sun4i_dma_issue_pending()
1005 __execute_vchan_pending(priv, vchan); in sun4i_dma_issue_pending()
1007 spin_unlock_irqrestore(&vchan->vc.lock, flags); in sun4i_dma_issue_pending()
1014 struct sun4i_dma_vchan *vchan; in sun4i_dma_interrupt() local
1029 vchan = pchan->vchan; in sun4i_dma_interrupt()
1030 if (!vchan) /* a terminated channel may still interrupt */ in sun4i_dma_interrupt()
1032 contract = vchan->contract; in sun4i_dma_interrupt()
1039 spin_lock(&vchan->vc.lock); in sun4i_dma_interrupt()
1045 list_move_tail(&vchan->processing->list, in sun4i_dma_interrupt()
1063 vchan->processing = promise; in sun4i_dma_interrupt()
1067 vchan->processing = NULL; in sun4i_dma_interrupt()
1068 vchan->pchan = NULL; in sun4i_dma_interrupt()
1075 spin_unlock(&vchan->vc.lock); in sun4i_dma_interrupt()
1101 vchan = &priv->vchans[i]; in sun4i_dma_interrupt()
1102 spin_lock(&vchan->vc.lock); in sun4i_dma_interrupt()
1103 __execute_vchan_pending(priv, vchan); in sun4i_dma_interrupt()
1104 spin_unlock(&vchan->vc.lock); in sun4i_dma_interrupt()
1203 struct sun4i_dma_vchan *vchan = &priv->vchans[i]; in sun4i_dma_probe() local
1205 spin_lock_init(&vchan->vc.lock); in sun4i_dma_probe()
1206 vchan->vc.desc_free = sun4i_dma_free_contract; in sun4i_dma_probe()
1207 vchan_init(&vchan->vc, &priv->slave); in sun4i_dma_probe()