Lines Matching refs:achan

226 static void *adm_process_fc_descriptors(struct adm_chan *achan, void *desc,  in adm_process_fc_descriptors()  argument
242 src = &achan->slave.src_addr; in adm_process_fc_descriptors()
248 dst = &achan->slave.dst_addr; in adm_process_fc_descriptors()
295 static void *adm_process_non_fc_descriptors(struct adm_chan *achan, void *desc, in adm_process_non_fc_descriptors() argument
306 src = &achan->slave.src_addr; in adm_process_non_fc_descriptors()
310 dst = &achan->slave.dst_addr; in adm_process_non_fc_descriptors()
350 struct adm_chan *achan = to_adm_chan(chan); in adm_prep_slave_sg() local
351 struct adm_device *adev = achan->adev; in adm_prep_slave_sg()
370 achan->slave.dst_maxburst : in adm_prep_slave_sg()
371 achan->slave.src_maxburst; in adm_prep_slave_sg()
374 if (achan->slave.device_fc) { in adm_prep_slave_sg()
382 crci = achan->slave.slave_id & 0xf; in adm_prep_slave_sg()
383 if (!crci || achan->slave.slave_id > 0x1f) { in adm_prep_slave_sg()
391 if (achan->slave.device_fc) { in adm_prep_slave_sg()
407 async_desc->mux = achan->slave.slave_id & ADM_CRCI_MUX_SEL ? in adm_prep_slave_sg()
428 if (achan->slave.device_fc) in adm_prep_slave_sg()
429 desc = adm_process_fc_descriptors(achan, desc, sg, crci, in adm_prep_slave_sg()
432 desc = adm_process_non_fc_descriptors(achan, desc, sg, in adm_prep_slave_sg()
452 return vchan_tx_prep(&achan->vc, &async_desc->vd, flags); in adm_prep_slave_sg()
469 struct adm_chan *achan = to_adm_chan(chan); in adm_terminate_all() local
470 struct adm_device *adev = achan->adev; in adm_terminate_all()
474 spin_lock_irqsave(&achan->vc.lock, flags); in adm_terminate_all()
475 vchan_get_all_descriptors(&achan->vc, &head); in adm_terminate_all()
479 adev->regs + ADM_CH_FLUSH_STATE0(achan->id, adev->ee)); in adm_terminate_all()
481 spin_unlock_irqrestore(&achan->vc.lock, flags); in adm_terminate_all()
483 vchan_dma_desc_free_list(&achan->vc, &head); in adm_terminate_all()
490 struct adm_chan *achan = to_adm_chan(chan); in adm_slave_config() local
493 spin_lock_irqsave(&achan->vc.lock, flag); in adm_slave_config()
494 memcpy(&achan->slave, cfg, sizeof(struct dma_slave_config)); in adm_slave_config()
495 spin_unlock_irqrestore(&achan->vc.lock, flag); in adm_slave_config()
504 static void adm_start_dma(struct adm_chan *achan) in adm_start_dma() argument
506 struct virt_dma_desc *vd = vchan_next_desc(&achan->vc); in adm_start_dma()
507 struct adm_device *adev = achan->adev; in adm_start_dma()
510 lockdep_assert_held(&achan->vc.lock); in adm_start_dma()
519 achan->curr_txd = async_desc; in adm_start_dma()
522 achan->error = 0; in adm_start_dma()
524 if (!achan->initialized) { in adm_start_dma()
530 adev->regs + ADM_CH_CONF(achan->id)); in adm_start_dma()
533 adev->regs + ADM_CH_RSLT_CONF(achan->id, adev->ee)); in adm_start_dma()
535 achan->initialized = 1; in adm_start_dma()
549 adev->regs + ADM_CH_CMD_PTR(achan->id, adev->ee)); in adm_start_dma()
570 struct adm_chan *achan = &adev->channels[i]; in adm_dma_irq() local
590 achan->error = 1; in adm_dma_irq()
592 spin_lock_irqsave(&achan->vc.lock, flags); in adm_dma_irq()
593 async_desc = achan->curr_txd; in adm_dma_irq()
595 achan->curr_txd = NULL; in adm_dma_irq()
601 adm_start_dma(achan); in adm_dma_irq()
604 spin_unlock_irqrestore(&achan->vc.lock, flags); in adm_dma_irq()
622 struct adm_chan *achan = to_adm_chan(chan); in adm_tx_status() local
632 spin_lock_irqsave(&achan->vc.lock, flags); in adm_tx_status()
634 vd = vchan_find_desc(&achan->vc, cookie); in adm_tx_status()
638 spin_unlock_irqrestore(&achan->vc.lock, flags); in adm_tx_status()
647 if (achan->error) in adm_tx_status()
661 struct adm_chan *achan = to_adm_chan(chan); in adm_issue_pending() local
664 spin_lock_irqsave(&achan->vc.lock, flags); in adm_issue_pending()
666 if (vchan_issue_pending(&achan->vc) && !achan->curr_txd) in adm_issue_pending()
667 adm_start_dma(achan); in adm_issue_pending()
668 spin_unlock_irqrestore(&achan->vc.lock, flags); in adm_issue_pending()
687 static void adm_channel_init(struct adm_device *adev, struct adm_chan *achan, in adm_channel_init() argument
690 achan->id = index; in adm_channel_init()
691 achan->adev = adev; in adm_channel_init()
693 vchan_init(&achan->vc, &adev->common); in adm_channel_init()
694 achan->vc.desc_free = adm_dma_free_desc; in adm_channel_init()
862 struct adm_chan *achan; in adm_dma_remove() local
869 achan = &adev->channels[i]; in adm_dma_remove()
872 writel(0, adev->regs + ADM_CH_RSLT_CONF(achan->id, adev->ee)); in adm_dma_remove()