Lines Matching refs:achan

229 static void *adm_process_fc_descriptors(struct adm_chan *achan, void *desc,  in adm_process_fc_descriptors()  argument
245 src = &achan->slave.src_addr; in adm_process_fc_descriptors()
251 dst = &achan->slave.dst_addr; in adm_process_fc_descriptors()
298 static void *adm_process_non_fc_descriptors(struct adm_chan *achan, void *desc, in adm_process_non_fc_descriptors() argument
309 src = &achan->slave.src_addr; in adm_process_non_fc_descriptors()
313 dst = &achan->slave.dst_addr; in adm_process_non_fc_descriptors()
353 struct adm_chan *achan = to_adm_chan(chan); in adm_prep_slave_sg() local
354 struct adm_device *adev = achan->adev; in adm_prep_slave_sg()
373 achan->slave.dst_maxburst : in adm_prep_slave_sg()
374 achan->slave.src_maxburst; in adm_prep_slave_sg()
377 if (achan->slave.device_fc) { in adm_prep_slave_sg()
385 crci = achan->crci & 0xf; in adm_prep_slave_sg()
386 if (!crci || achan->crci > 0x1f) { in adm_prep_slave_sg()
394 if (achan->slave.device_fc) { in adm_prep_slave_sg()
411 async_desc->mux = achan->mux ? ADM_CRCI_CTL_MUX_SEL : 0; in adm_prep_slave_sg()
433 if (achan->slave.device_fc) in adm_prep_slave_sg()
434 desc = adm_process_fc_descriptors(achan, desc, sg, crci, in adm_prep_slave_sg()
437 desc = adm_process_non_fc_descriptors(achan, desc, sg, in adm_prep_slave_sg()
459 return vchan_tx_prep(&achan->vc, &async_desc->vd, flags); in adm_prep_slave_sg()
476 struct adm_chan *achan = to_adm_chan(chan); in adm_terminate_all() local
477 struct adm_device *adev = achan->adev; in adm_terminate_all()
481 spin_lock_irqsave(&achan->vc.lock, flags); in adm_terminate_all()
482 vchan_get_all_descriptors(&achan->vc, &head); in adm_terminate_all()
486 adev->regs + ADM_CH_FLUSH_STATE0(achan->id, adev->ee)); in adm_terminate_all()
488 spin_unlock_irqrestore(&achan->vc.lock, flags); in adm_terminate_all()
490 vchan_dma_desc_free_list(&achan->vc, &head); in adm_terminate_all()
497 struct adm_chan *achan = to_adm_chan(chan); in adm_slave_config() local
501 spin_lock_irqsave(&achan->vc.lock, flag); in adm_slave_config()
502 memcpy(&achan->slave, cfg, sizeof(struct dma_slave_config)); in adm_slave_config()
504 achan->crci = config->crci; in adm_slave_config()
505 spin_unlock_irqrestore(&achan->vc.lock, flag); in adm_slave_config()
514 static void adm_start_dma(struct adm_chan *achan) in adm_start_dma() argument
516 struct virt_dma_desc *vd = vchan_next_desc(&achan->vc); in adm_start_dma()
517 struct adm_device *adev = achan->adev; in adm_start_dma()
520 lockdep_assert_held(&achan->vc.lock); in adm_start_dma()
529 achan->curr_txd = async_desc; in adm_start_dma()
532 achan->error = 0; in adm_start_dma()
534 if (!achan->initialized) { in adm_start_dma()
540 adev->regs + ADM_CH_CONF(achan->id)); in adm_start_dma()
543 adev->regs + ADM_CH_RSLT_CONF(achan->id, adev->ee)); in adm_start_dma()
545 achan->initialized = 1; in adm_start_dma()
559 adev->regs + ADM_CH_CMD_PTR(achan->id, adev->ee)); in adm_start_dma()
580 struct adm_chan *achan = &adev->channels[i]; in adm_dma_irq() local
600 achan->error = 1; in adm_dma_irq()
602 spin_lock_irqsave(&achan->vc.lock, flags); in adm_dma_irq()
603 async_desc = achan->curr_txd; in adm_dma_irq()
605 achan->curr_txd = NULL; in adm_dma_irq()
611 adm_start_dma(achan); in adm_dma_irq()
614 spin_unlock_irqrestore(&achan->vc.lock, flags); in adm_dma_irq()
632 struct adm_chan *achan = to_adm_chan(chan); in adm_tx_status() local
642 spin_lock_irqsave(&achan->vc.lock, flags); in adm_tx_status()
644 vd = vchan_find_desc(&achan->vc, cookie); in adm_tx_status()
648 spin_unlock_irqrestore(&achan->vc.lock, flags); in adm_tx_status()
657 if (achan->error) in adm_tx_status()
671 struct adm_chan *achan = to_adm_chan(chan); in adm_issue_pending() local
674 spin_lock_irqsave(&achan->vc.lock, flags); in adm_issue_pending()
676 if (vchan_issue_pending(&achan->vc) && !achan->curr_txd) in adm_issue_pending()
677 adm_start_dma(achan); in adm_issue_pending()
678 spin_unlock_irqrestore(&achan->vc.lock, flags); in adm_issue_pending()
697 static void adm_channel_init(struct adm_device *adev, struct adm_chan *achan, in adm_channel_init() argument
700 achan->id = index; in adm_channel_init()
701 achan->adev = adev; in adm_channel_init()
703 vchan_init(&achan->vc, &adev->common); in adm_channel_init()
704 achan->vc.desc_free = adm_dma_free_desc; in adm_channel_init()
723 struct adm_chan *achan; in adm_dma_xlate() local
737 achan = to_adm_chan(candidate); in adm_dma_xlate()
739 achan->crci = dma_spec->args[1]; in adm_dma_xlate()
741 achan->crci = 0; in adm_dma_xlate()
910 struct adm_chan *achan; in adm_dma_remove() local
917 achan = &adev->channels[i]; in adm_dma_remove()
920 writel(0, adev->regs + ADM_CH_RSLT_CONF(achan->id, adev->ee)); in adm_dma_remove()