Lines Matching refs:chan
89 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
93 dev_dbg(chan->ccp->dev, "%s - chan=%p\n", __func__, chan);
95 spin_lock_irqsave(&chan->lock, flags);
97 ccp_free_desc_resources(chan->ccp, &chan->complete);
98 ccp_free_desc_resources(chan->ccp, &chan->active);
99 ccp_free_desc_resources(chan->ccp, &chan->pending);
100 ccp_free_desc_resources(chan->ccp, &chan->created);
102 spin_unlock_irqrestore(&chan->lock, flags);
126 struct ccp_dma_chan *chan = (struct ccp_dma_chan *)data;
129 dev_dbg(chan->ccp->dev, "%s - chan=%s\n", __func__,
130 dma_chan_name(&chan->dma_chan));
132 spin_lock_irqsave(&chan->lock, flags);
134 ccp_cleanup_desc_resources(chan->ccp, &chan->complete);
136 spin_unlock_irqrestore(&chan->lock, flags);
176 static struct ccp_dma_desc *__ccp_next_dma_desc(struct ccp_dma_chan *chan,
181 list_move(&desc->entry, &chan->complete);
184 desc = list_first_entry_or_null(&chan->active, struct ccp_dma_desc,
190 static struct ccp_dma_desc *ccp_handle_active_desc(struct ccp_dma_chan *chan,
217 spin_lock_irqsave(&chan->lock, flags);
231 desc = __ccp_next_dma_desc(chan, desc);
233 spin_unlock_irqrestore(&chan->lock, flags);
245 static struct ccp_dma_desc *__ccp_pending_to_active(struct ccp_dma_chan *chan)
249 if (list_empty(&chan->pending))
252 desc = list_empty(&chan->active)
253 ? list_first_entry(&chan->pending, struct ccp_dma_desc, entry)
256 list_splice_tail_init(&chan->pending, &chan->active);
264 struct ccp_dma_chan *chan;
270 chan = container_of(desc->tx_desc.chan, struct ccp_dma_chan,
273 dev_dbg(chan->ccp->dev, "%s - tx %d callback, err=%d\n",
281 desc = ccp_handle_active_desc(chan, desc);
284 if (!desc || (chan->status == DMA_PAUSED))
294 tasklet_schedule(&chan->cleanup_tasklet);
301 struct ccp_dma_chan *chan;
305 chan = container_of(tx_desc->chan, struct ccp_dma_chan, dma_chan);
307 spin_lock_irqsave(&chan->lock, flags);
311 list_add_tail(&desc->entry, &chan->pending);
313 spin_unlock_irqrestore(&chan->lock, flags);
315 dev_dbg(chan->ccp->dev, "%s - added tx descriptor %d to pending list\n",
321 static struct ccp_dma_cmd *ccp_alloc_dma_cmd(struct ccp_dma_chan *chan)
325 cmd = kmem_cache_alloc(chan->ccp->dma_cmd_cache, GFP_NOWAIT);
332 static struct ccp_dma_desc *ccp_alloc_dma_desc(struct ccp_dma_chan *chan,
337 desc = kmem_cache_zalloc(chan->ccp->dma_desc_cache, GFP_NOWAIT);
341 dma_async_tx_descriptor_init(&desc->tx_desc, &chan->dma_chan);
344 desc->ccp = chan->ccp;
360 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
362 struct ccp_device *ccp = chan->ccp;
379 desc = ccp_alloc_dma_desc(chan, flags);
422 cmd = ccp_alloc_dma_cmd(chan);
427 ccp_cmd->ccp = chan->ccp;
464 spin_lock_irqsave(&chan->lock, sflags);
466 list_add_tail(&desc->entry, &chan->created);
468 spin_unlock_irqrestore(&chan->lock, sflags);
483 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
488 dev_dbg(chan->ccp->dev,
510 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
514 desc = ccp_alloc_dma_desc(chan, flags);
523 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
528 dev_dbg(chan->ccp->dev, "%s\n", __func__);
530 spin_lock_irqsave(&chan->lock, flags);
532 desc = __ccp_pending_to_active(chan);
534 spin_unlock_irqrestore(&chan->lock, flags);
545 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
551 if (chan->status == DMA_PAUSED) {
558 spin_lock_irqsave(&chan->lock, flags);
561 list_for_each_entry(desc, &chan->complete, entry) {
569 spin_unlock_irqrestore(&chan->lock, flags);
573 dev_dbg(chan->ccp->dev, "%s - %u\n", __func__, ret);
580 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
583 chan->status = DMA_PAUSED;
592 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
597 spin_lock_irqsave(&chan->lock, flags);
599 desc = list_first_entry_or_null(&chan->active, struct ccp_dma_desc,
602 spin_unlock_irqrestore(&chan->lock, flags);
605 chan->status = DMA_IN_PROGRESS;
616 struct ccp_dma_chan *chan = container_of(dma_chan, struct ccp_dma_chan,
620 dev_dbg(chan->ccp->dev, "%s\n", __func__);
624 spin_lock_irqsave(&chan->lock, flags);
627 ccp_free_desc_resources(chan->ccp, &chan->active);
628 ccp_free_desc_resources(chan->ccp, &chan->pending);
629 ccp_free_desc_resources(chan->ccp, &chan->created);
631 spin_unlock_irqrestore(&chan->lock, flags);
638 struct ccp_dma_chan *chan;
643 chan = ccp->ccp_dma_chan + i;
644 dma_chan = &chan->dma_chan;
646 tasklet_kill(&chan->cleanup_tasklet);
653 struct ccp_dma_chan *chan;
658 chan = ccp->ccp_dma_chan + i;
659 dma_chan = &chan->dma_chan;
668 struct ccp_dma_chan *chan;
734 chan = ccp->ccp_dma_chan + i;
735 dma_chan = &chan->dma_chan;
737 chan->ccp = ccp;
739 spin_lock_init(&chan->lock);
740 INIT_LIST_HEAD(&chan->created);
741 INIT_LIST_HEAD(&chan->pending);
742 INIT_LIST_HEAD(&chan->active);
743 INIT_LIST_HEAD(&chan->complete);
745 tasklet_init(&chan->cleanup_tasklet, ccp_do_cleanup,
746 (unsigned long)chan);