Lines Matching refs:vchan

186  * @vchan: the virtual channel currently being served by this physical channel
191 struct owl_dma_vchan *vchan;
380 static inline int owl_dma_cfg_lli(struct owl_dma_vchan *vchan,
387 struct owl_dma *od = to_owl_dma(vchan->vc.chan.device);
400 mode |= OWL_DMA_MODE_TS(vchan->drq)
413 mode |= OWL_DMA_MODE_TS(vchan->drq)
468 struct owl_dma_vchan *vchan)
478 if (!pchan->vchan) {
479 pchan->vchan = vchan;
519 pchan->vchan = NULL;
534 static int owl_dma_start_next_txd(struct owl_dma_vchan *vchan)
536 struct owl_dma *od = to_owl_dma(vchan->vc.chan.device);
537 struct virt_dma_desc *vd = vchan_next_desc(&vchan->vc);
538 struct owl_dma_pchan *pchan = vchan->pchan;
546 vchan->txd = txd;
575 dev_dbg(chan2dev(&vchan->vc.chan), "starting pchan %d\n", pchan->id);
583 static void owl_dma_phy_free(struct owl_dma *od, struct owl_dma_vchan *vchan)
586 owl_dma_terminate_pchan(od, vchan->pchan);
588 vchan->pchan = NULL;
594 struct owl_dma_vchan *vchan;
644 vchan = pchan->vchan;
645 if (!vchan) {
646 dev_warn(od->dma.dev, "no vchan attached on pchan %d\n",
651 spin_lock(&vchan->vc.lock);
653 txd = vchan->txd;
655 vchan->txd = NULL;
663 if (vchan_next_desc(&vchan->vc))
664 owl_dma_start_next_txd(vchan);
666 owl_dma_phy_free(od, vchan);
669 spin_unlock(&vchan->vc.lock);
699 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
703 spin_lock_irqsave(&vchan->vc.lock, flags);
705 if (vchan->pchan)
706 owl_dma_phy_free(od, vchan);
708 if (vchan->txd) {
709 owl_dma_desc_free(&vchan->txd->vd);
710 vchan->txd = NULL;
713 vchan_get_all_descriptors(&vchan->vc, &head);
715 spin_unlock_irqrestore(&vchan->vc.lock, flags);
717 vchan_dma_desc_free_list(&vchan->vc, &head);
725 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
732 memcpy(&vchan->cfg, config, sizeof(struct dma_slave_config));
739 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
742 spin_lock_irqsave(&vchan->vc.lock, flags);
744 owl_dma_pause_pchan(vchan->pchan);
746 spin_unlock_irqrestore(&vchan->vc.lock, flags);
753 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
756 if (!vchan->pchan && !vchan->txd)
759 dev_dbg(chan2dev(chan), "vchan %p: resume\n", &vchan->vc);
761 spin_lock_irqsave(&vchan->vc.lock, flags);
763 owl_dma_resume_pchan(vchan->pchan);
765 spin_unlock_irqrestore(&vchan->vc.lock, flags);
770 static u32 owl_dma_getbytes_chan(struct owl_dma_vchan *vchan)
778 pchan = vchan->pchan;
779 txd = vchan->txd;
807 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
819 spin_lock_irqsave(&vchan->vc.lock, flags);
821 vd = vchan_find_desc(&vchan->vc, cookie);
827 bytes = owl_dma_getbytes_chan(vchan);
830 spin_unlock_irqrestore(&vchan->vc.lock, flags);
837 static void owl_dma_phy_alloc_and_start(struct owl_dma_vchan *vchan)
839 struct owl_dma *od = to_owl_dma(vchan->vc.chan.device);
842 pchan = owl_dma_get_pchan(od, vchan);
848 vchan->pchan = pchan;
849 owl_dma_start_next_txd(vchan);
854 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
857 spin_lock_irqsave(&vchan->vc.lock, flags);
858 if (vchan_issue_pending(&vchan->vc)) {
859 if (!vchan->pchan)
860 owl_dma_phy_alloc_and_start(vchan);
862 spin_unlock_irqrestore(&vchan->vc.lock, flags);
871 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
896 ret = owl_dma_cfg_lli(vchan, lli, src + offset, dst + offset,
898 &vchan->cfg, txd->cyclic);
907 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
922 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
923 struct dma_slave_config *sconfig = &vchan->cfg;
961 ret = owl_dma_cfg_lli(vchan, lli, src, dst, len, dir, sconfig,
971 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
987 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
988 struct dma_slave_config *sconfig = &vchan->cfg;
1017 ret = owl_dma_cfg_lli(vchan, lli, src, dst, period_len,
1033 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
1043 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
1046 vchan_free_chan_resources(&vchan->vc);
1051 struct owl_dma_vchan *vchan = NULL;
1054 list_for_each_entry_safe(vchan,
1056 list_del(&vchan->vc.chan.device_node);
1057 tasklet_kill(&vchan->vc.task);
1065 struct owl_dma_vchan *vchan;
1076 vchan = to_owl_vchan(chan);
1077 vchan->drq = drq;
1189 struct owl_dma_vchan *vchan = &od->vchans[i];
1191 vchan->vc.desc_free = owl_dma_desc_free;
1192 vchan_init(&vchan->vc, &od->dma);