Lines Matching refs:mchan
249 struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(c); in dma_chan_to_mpc_dma() local
250 return container_of(mchan, struct mpc_dma, channels[c->chan_id]); in dma_chan_to_mpc_dma()
261 static void mpc_dma_execute(struct mpc_dma_chan *mchan) in mpc_dma_execute() argument
263 struct mpc_dma *mdma = dma_chan_to_mpc_dma(&mchan->chan); in mpc_dma_execute()
267 int cid = mchan->chan.chan_id; in mpc_dma_execute()
269 while (!list_empty(&mchan->queued)) { in mpc_dma_execute()
270 mdesc = list_first_entry(&mchan->queued, in mpc_dma_execute()
279 if (list_empty(&mchan->active)) in mpc_dma_execute()
280 list_move_tail(&mdesc->node, &mchan->active); in mpc_dma_execute()
283 list_move_tail(&mdesc->node, &mchan->active); in mpc_dma_execute()
288 list_for_each_entry(mdesc, &mchan->active, node) { in mpc_dma_execute()
327 struct mpc_dma_chan *mchan; in mpc_dma_irq_process() local
334 mchan = &mdma->channels[ch + off]; in mpc_dma_irq_process()
336 spin_lock(&mchan->lock); in mpc_dma_irq_process()
343 list_for_each_entry(mdesc, &mchan->active, node) in mpc_dma_irq_process()
347 list_splice_tail_init(&mchan->active, &mchan->completed); in mpc_dma_irq_process()
348 if (!list_empty(&mchan->queued)) in mpc_dma_irq_process()
349 mpc_dma_execute(mchan); in mpc_dma_irq_process()
351 spin_unlock(&mchan->lock); in mpc_dma_irq_process()
386 struct mpc_dma_chan *mchan; in mpc_dma_process_completed() local
394 mchan = &mdma->channels[i]; in mpc_dma_process_completed()
397 spin_lock_irqsave(&mchan->lock, flags); in mpc_dma_process_completed()
398 if (!list_empty(&mchan->completed)) in mpc_dma_process_completed()
399 list_splice_tail_init(&mchan->completed, &list); in mpc_dma_process_completed()
400 spin_unlock_irqrestore(&mchan->lock, flags); in mpc_dma_process_completed()
417 spin_lock_irqsave(&mchan->lock, flags); in mpc_dma_process_completed()
418 list_splice_tail_init(&list, &mchan->free); in mpc_dma_process_completed()
419 mchan->chan.completed_cookie = last_cookie; in mpc_dma_process_completed()
420 spin_unlock_irqrestore(&mchan->lock, flags); in mpc_dma_process_completed()
475 struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(txd->chan); in mpc_dma_tx_submit() local
482 spin_lock_irqsave(&mchan->lock, flags); in mpc_dma_tx_submit()
485 list_move_tail(&mdesc->node, &mchan->queued); in mpc_dma_tx_submit()
488 if (list_empty(&mchan->active)) in mpc_dma_tx_submit()
489 mpc_dma_execute(mchan); in mpc_dma_tx_submit()
493 spin_unlock_irqrestore(&mchan->lock, flags); in mpc_dma_tx_submit()
502 struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(chan); in mpc_dma_alloc_chan_resources() local
544 spin_lock_irqsave(&mchan->lock, flags); in mpc_dma_alloc_chan_resources()
545 mchan->tcd = tcd; in mpc_dma_alloc_chan_resources()
546 mchan->tcd_paddr = tcd_paddr; in mpc_dma_alloc_chan_resources()
547 list_splice_tail_init(&descs, &mchan->free); in mpc_dma_alloc_chan_resources()
548 spin_unlock_irqrestore(&mchan->lock, flags); in mpc_dma_alloc_chan_resources()
560 struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(chan); in mpc_dma_free_chan_resources() local
567 spin_lock_irqsave(&mchan->lock, flags); in mpc_dma_free_chan_resources()
570 BUG_ON(!list_empty(&mchan->prepared)); in mpc_dma_free_chan_resources()
571 BUG_ON(!list_empty(&mchan->queued)); in mpc_dma_free_chan_resources()
572 BUG_ON(!list_empty(&mchan->active)); in mpc_dma_free_chan_resources()
573 BUG_ON(!list_empty(&mchan->completed)); in mpc_dma_free_chan_resources()
576 list_splice_tail_init(&mchan->free, &descs); in mpc_dma_free_chan_resources()
577 tcd = mchan->tcd; in mpc_dma_free_chan_resources()
578 tcd_paddr = mchan->tcd_paddr; in mpc_dma_free_chan_resources()
580 spin_unlock_irqrestore(&mchan->lock, flags); in mpc_dma_free_chan_resources()
618 struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(chan); in mpc_dma_prep_memcpy() local
624 spin_lock_irqsave(&mchan->lock, iflags); in mpc_dma_prep_memcpy()
625 if (!list_empty(&mchan->free)) { in mpc_dma_prep_memcpy()
626 mdesc = list_first_entry(&mchan->free, struct mpc_dma_desc, in mpc_dma_prep_memcpy()
630 spin_unlock_irqrestore(&mchan->lock, iflags); in mpc_dma_prep_memcpy()
680 spin_lock_irqsave(&mchan->lock, iflags); in mpc_dma_prep_memcpy()
681 list_add_tail(&mdesc->node, &mchan->prepared); in mpc_dma_prep_memcpy()
682 spin_unlock_irqrestore(&mchan->lock, iflags); in mpc_dma_prep_memcpy()
693 struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(chan); in mpc_dma_prep_slave_sg() local
711 spin_lock_irqsave(&mchan->lock, iflags); in mpc_dma_prep_slave_sg()
713 mdesc = list_first_entry(&mchan->free, in mpc_dma_prep_slave_sg()
716 spin_unlock_irqrestore(&mchan->lock, iflags); in mpc_dma_prep_slave_sg()
725 per_paddr = mchan->src_per_paddr; in mpc_dma_prep_slave_sg()
726 tcd_nunits = mchan->src_tcd_nunits; in mpc_dma_prep_slave_sg()
728 per_paddr = mchan->dst_per_paddr; in mpc_dma_prep_slave_sg()
729 tcd_nunits = mchan->dst_tcd_nunits; in mpc_dma_prep_slave_sg()
732 spin_unlock_irqrestore(&mchan->lock, iflags); in mpc_dma_prep_slave_sg()
783 spin_lock_irqsave(&mchan->lock, iflags); in mpc_dma_prep_slave_sg()
784 list_add_tail(&mdesc->node, &mchan->prepared); in mpc_dma_prep_slave_sg()
785 spin_unlock_irqrestore(&mchan->lock, iflags); in mpc_dma_prep_slave_sg()
792 spin_lock_irqsave(&mchan->lock, iflags); in mpc_dma_prep_slave_sg()
793 list_add_tail(&mdesc->node, &mchan->free); in mpc_dma_prep_slave_sg()
794 spin_unlock_irqrestore(&mchan->lock, iflags); in mpc_dma_prep_slave_sg()
802 struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(chan); in mpc_dma_device_config() local
827 spin_lock_irqsave(&mchan->lock, flags); in mpc_dma_device_config()
829 mchan->src_per_paddr = cfg->src_addr; in mpc_dma_device_config()
830 mchan->src_tcd_nunits = cfg->src_maxburst; in mpc_dma_device_config()
831 mchan->dst_per_paddr = cfg->dst_addr; in mpc_dma_device_config()
832 mchan->dst_tcd_nunits = cfg->dst_maxburst; in mpc_dma_device_config()
835 if (mchan->src_tcd_nunits == 0) in mpc_dma_device_config()
836 mchan->src_tcd_nunits = 1; in mpc_dma_device_config()
837 if (mchan->dst_tcd_nunits == 0) in mpc_dma_device_config()
838 mchan->dst_tcd_nunits = 1; in mpc_dma_device_config()
840 spin_unlock_irqrestore(&mchan->lock, flags); in mpc_dma_device_config()
847 struct mpc_dma_chan *mchan = dma_chan_to_mpc_dma_chan(chan); in mpc_dma_device_terminate_all() local
852 spin_lock_irqsave(&mchan->lock, flags); in mpc_dma_device_terminate_all()
855 list_splice_tail_init(&mchan->prepared, &mchan->free); in mpc_dma_device_terminate_all()
856 list_splice_tail_init(&mchan->queued, &mchan->free); in mpc_dma_device_terminate_all()
857 list_splice_tail_init(&mchan->active, &mchan->free); in mpc_dma_device_terminate_all()
859 spin_unlock_irqrestore(&mchan->lock, flags); in mpc_dma_device_terminate_all()
870 struct mpc_dma_chan *mchan; in mpc_dma_probe() local
965 mchan = &mdma->channels[i]; in mpc_dma_probe()
967 mchan->chan.device = dma; in mpc_dma_probe()
968 dma_cookie_init(&mchan->chan); in mpc_dma_probe()
970 INIT_LIST_HEAD(&mchan->free); in mpc_dma_probe()
971 INIT_LIST_HEAD(&mchan->prepared); in mpc_dma_probe()
972 INIT_LIST_HEAD(&mchan->queued); in mpc_dma_probe()
973 INIT_LIST_HEAD(&mchan->active); in mpc_dma_probe()
974 INIT_LIST_HEAD(&mchan->completed); in mpc_dma_probe()
976 spin_lock_init(&mchan->lock); in mpc_dma_probe()
977 list_add_tail(&mchan->chan.device_node, &dma->channels); in mpc_dma_probe()