Lines Matching refs:vchan

170 	struct sun6i_vchan	*vchan;
387 static inline void sun6i_dma_dump_lli(struct sun6i_vchan *vchan,
392 dev_dbg(chan2dev(&vchan->vc.chan),
427 static int sun6i_dma_start_desc(struct sun6i_vchan *vchan)
429 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(vchan->vc.chan.device);
430 struct virt_dma_desc *desc = vchan_next_desc(&vchan->vc);
431 struct sun6i_pchan *pchan = vchan->phy;
448 sun6i_dma_dump_lli(vchan, pchan->desc->v_lli);
453 vchan->irq_type = vchan->cyclic ? DMA_IRQ_PKG : DMA_IRQ_QUEUE;
458 irq_val |= vchan->irq_type << (irq_offset * DMA_IRQ_CHAN_WIDTH);
473 struct sun6i_vchan *vchan;
478 list_for_each_entry(vchan, &sdev->slave.channels, vc.chan.device_node) {
479 spin_lock_irq(&vchan->vc.lock);
481 pchan = vchan->phy;
484 if (sun6i_dma_start_desc(vchan)) {
492 vchan->phy = NULL;
493 pchan->vchan = NULL;
496 spin_unlock_irq(&vchan->vc.lock);
503 if (pchan->vchan || list_empty(&sdev->pending))
506 vchan = list_first_entry(&sdev->pending,
510 list_del_init(&vchan->node);
514 pchan->vchan = vchan;
515 vchan->phy = pchan;
516 dev_dbg(sdev->slave.dev, "pchan %u: alloc vchan %p\n",
517 pchan->idx, &vchan->vc);
526 vchan = pchan->vchan;
527 if (vchan) {
528 spin_lock_irq(&vchan->vc.lock);
529 sun6i_dma_start_desc(vchan);
530 spin_unlock_irq(&vchan->vc.lock);
538 struct sun6i_vchan *vchan;
555 vchan = pchan->vchan;
556 if (vchan && (status & vchan->irq_type)) {
557 if (vchan->cyclic) {
560 spin_lock(&vchan->vc.lock);
563 spin_unlock(&vchan->vc.lock);
634 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
642 __func__, vchan->vc.chan.chan_id, &dest, &src, len, flags);
673 sun6i_dma_dump_lli(vchan, v_lli);
675 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
688 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
689 struct dma_slave_config *sconfig = &vchan->cfg;
722 sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, vchan->port);
727 __func__, vchan->vc.chan.chan_id,
735 sdev->cfg->set_drq(&v_lli->cfg, vchan->port, DRQ_SDRAM);
740 __func__, vchan->vc.chan.chan_id,
750 sun6i_dma_dump_lli(vchan, prev);
752 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
770 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
771 struct dma_slave_config *sconfig = &vchan->cfg;
803 sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, vchan->port);
809 sdev->cfg->set_drq(&v_lli->cfg, vchan->port, DRQ_SDRAM);
818 vchan->cyclic = true;
820 return vchan_tx_prep(&vchan->vc, &txd->vd, flags);
832 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
834 memcpy(&vchan->cfg, config, sizeof(*config));
842 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
843 struct sun6i_pchan *pchan = vchan->phy;
845 dev_dbg(chan2dev(chan), "vchan %p: pause\n", &vchan->vc);
852 list_del_init(&vchan->node);
862 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
863 struct sun6i_pchan *pchan = vchan->phy;
866 dev_dbg(chan2dev(chan), "vchan %p: resume\n", &vchan->vc);
868 spin_lock_irqsave(&vchan->vc.lock, flags);
873 } else if (!list_empty(&vchan->vc.desc_issued)) {
875 list_add_tail(&vchan->node, &sdev->pending);
879 spin_unlock_irqrestore(&vchan->vc.lock, flags);
887 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
888 struct sun6i_pchan *pchan = vchan->phy;
893 list_del_init(&vchan->node);
896 spin_lock_irqsave(&vchan->vc.lock, flags);
898 if (vchan->cyclic) {
899 vchan->cyclic = false;
902 struct virt_dma_chan *vc = &vchan->vc;
908 vchan_get_all_descriptors(&vchan->vc, &head);
914 vchan->phy = NULL;
915 pchan->vchan = NULL;
920 spin_unlock_irqrestore(&vchan->vc.lock, flags);
922 vchan_dma_desc_free_list(&vchan->vc, &head);
931 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
932 struct sun6i_pchan *pchan = vchan->phy;
944 spin_lock_irqsave(&vchan->vc.lock, flags);
946 vd = vchan_find_desc(&vchan->vc, cookie);
958 spin_unlock_irqrestore(&vchan->vc.lock, flags);
968 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
971 spin_lock_irqsave(&vchan->vc.lock, flags);
973 if (vchan_issue_pending(&vchan->vc)) {
976 if (!vchan->phy && list_empty(&vchan->node)) {
977 list_add_tail(&vchan->node, &sdev->pending);
979 dev_dbg(chan2dev(chan), "vchan %p: issued\n",
980 &vchan->vc);
985 dev_dbg(chan2dev(chan), "vchan %p: nothing to issue\n",
986 &vchan->vc);
989 spin_unlock_irqrestore(&vchan->vc.lock, flags);
995 struct sun6i_vchan *vchan = to_sun6i_vchan(chan);
999 list_del_init(&vchan->node);
1002 vchan_free_chan_resources(&vchan->vc);
1009 struct sun6i_vchan *vchan;
1020 vchan = to_sun6i_vchan(chan);
1021 vchan->port = port;
1047 struct sun6i_vchan *vchan = &sdev->vchans[i];
1049 list_del(&vchan->vc.chan.device_node);
1050 tasklet_kill(&vchan->vc.task);
1356 struct sun6i_vchan *vchan = &sdc->vchans[i];
1358 INIT_LIST_HEAD(&vchan->node);
1359 vchan->vc.desc_free = sun6i_dma_free_desc;
1360 vchan_init(&vchan->vc, &sdc->slave);