Lines Matching refs:vchan

187  * @vchan: the virtual channel currently being served by this physical channel
192 struct owl_dma_vchan *vchan;
381 static inline int owl_dma_cfg_lli(struct owl_dma_vchan *vchan,
388 struct owl_dma *od = to_owl_dma(vchan->vc.chan.device);
401 mode |= OWL_DMA_MODE_TS(vchan->drq)
414 mode |= OWL_DMA_MODE_TS(vchan->drq)
469 struct owl_dma_vchan *vchan)
479 if (!pchan->vchan) {
480 pchan->vchan = vchan;
520 pchan->vchan = NULL;
535 static int owl_dma_start_next_txd(struct owl_dma_vchan *vchan)
537 struct owl_dma *od = to_owl_dma(vchan->vc.chan.device);
538 struct virt_dma_desc *vd = vchan_next_desc(&vchan->vc);
539 struct owl_dma_pchan *pchan = vchan->pchan;
547 vchan->txd = txd;
576 dev_dbg(chan2dev(&vchan->vc.chan), "starting pchan %d\n", pchan->id);
584 static void owl_dma_phy_free(struct owl_dma *od, struct owl_dma_vchan *vchan)
587 owl_dma_terminate_pchan(od, vchan->pchan);
589 vchan->pchan = NULL;
595 struct owl_dma_vchan *vchan;
645 vchan = pchan->vchan;
646 if (!vchan) {
647 dev_warn(od->dma.dev, "no vchan attached on pchan %d\n",
652 spin_lock(&vchan->vc.lock);
654 txd = vchan->txd;
656 vchan->txd = NULL;
664 if (vchan_next_desc(&vchan->vc))
665 owl_dma_start_next_txd(vchan);
667 owl_dma_phy_free(od, vchan);
670 spin_unlock(&vchan->vc.lock);
700 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
704 spin_lock_irqsave(&vchan->vc.lock, flags);
706 if (vchan->pchan)
707 owl_dma_phy_free(od, vchan);
709 if (vchan->txd) {
710 owl_dma_desc_free(&vchan->txd->vd);
711 vchan->txd = NULL;
714 vchan_get_all_descriptors(&vchan->vc, &head);
716 spin_unlock_irqrestore(&vchan->vc.lock, flags);
718 vchan_dma_desc_free_list(&vchan->vc, &head);
726 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
733 memcpy(&vchan->cfg, config, sizeof(struct dma_slave_config));
740 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
743 spin_lock_irqsave(&vchan->vc.lock, flags);
745 owl_dma_pause_pchan(vchan->pchan);
747 spin_unlock_irqrestore(&vchan->vc.lock, flags);
754 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
757 if (!vchan->pchan && !vchan->txd)
760 dev_dbg(chan2dev(chan), "vchan %p: resume\n", &vchan->vc);
762 spin_lock_irqsave(&vchan->vc.lock, flags);
764 owl_dma_resume_pchan(vchan->pchan);
766 spin_unlock_irqrestore(&vchan->vc.lock, flags);
771 static u32 owl_dma_getbytes_chan(struct owl_dma_vchan *vchan)
779 pchan = vchan->pchan;
780 txd = vchan->txd;
808 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
820 spin_lock_irqsave(&vchan->vc.lock, flags);
822 vd = vchan_find_desc(&vchan->vc, cookie);
828 bytes = owl_dma_getbytes_chan(vchan);
831 spin_unlock_irqrestore(&vchan->vc.lock, flags);
838 static void owl_dma_phy_alloc_and_start(struct owl_dma_vchan *vchan)
840 struct owl_dma *od = to_owl_dma(vchan->vc.chan.device);
843 pchan = owl_dma_get_pchan(od, vchan);
849 vchan->pchan = pchan;
850 owl_dma_start_next_txd(vchan);
855 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
858 spin_lock_irqsave(&vchan->vc.lock, flags);
859 if (vchan_issue_pending(&vchan->vc)) {
860 if (!vchan->pchan)
861 owl_dma_phy_alloc_and_start(vchan);
863 spin_unlock_irqrestore(&vchan->vc.lock, flags);
872 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
897 ret = owl_dma_cfg_lli(vchan, lli, src + offset, dst + offset,
899 &vchan->cfg, txd->cyclic);
908 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
923 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
924 struct dma_slave_config *sconfig = &vchan->cfg;
962 ret = owl_dma_cfg_lli(vchan, lli, src, dst, len, dir, sconfig,
972 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
988 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
989 struct dma_slave_config *sconfig = &vchan->cfg;
1018 ret = owl_dma_cfg_lli(vchan, lli, src, dst, period_len,
1034 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
1044 struct owl_dma_vchan *vchan = to_owl_vchan(chan);
1047 vchan_free_chan_resources(&vchan->vc);
1052 struct owl_dma_vchan *vchan = NULL;
1055 list_for_each_entry_safe(vchan,
1057 list_del(&vchan->vc.chan.device_node);
1058 tasklet_kill(&vchan->vc.task);
1066 struct owl_dma_vchan *vchan;
1077 vchan = to_owl_vchan(chan);
1078 vchan->drq = drq;
1191 struct owl_dma_vchan *vchan = &od->vchans[i];
1193 vchan->vc.desc_free = owl_dma_desc_free;
1194 vchan_init(&vchan->vc, &od->dma);