Lines Matching defs:achan

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