Lines Matching defs:mxs_chan
186 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
187 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
188 int chan_id = mxs_chan->chan.chan_id;
197 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE &&
198 mxs_chan->flags & MXS_DMA_SG_LOOP) {
199 mxs_chan->reset = true;
222 dev_err(&mxs_chan->mxs_dma->pdev->dev,
230 mxs_chan->status = DMA_COMPLETE;
235 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
236 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
237 int chan_id = mxs_chan->chan.chan_id;
240 writel(mxs_chan->ccw_phys,
244 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE &&
245 mxs_chan->flags & MXS_DMA_SG_LOOP) {
253 mxs_chan->reset = false;
258 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
260 mxs_chan->status = DMA_COMPLETE;
265 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
266 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
267 int chan_id = mxs_chan->chan.chan_id;
277 mxs_chan->status = DMA_PAUSED;
283 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
284 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
285 int chan_id = mxs_chan->chan.chan_id;
295 mxs_chan->status = DMA_IN_PROGRESS;
306 struct mxs_dma_chan *mxs_chan = from_tasklet(mxs_chan, t, tasklet);
308 dmaengine_desc_get_callback_invoke(&mxs_chan->desc, NULL);
325 struct mxs_dma_chan *mxs_chan;
365 mxs_chan = &mxs_dma->mxs_chans[chan];
371 mxs_chan->status = DMA_ERROR;
372 mxs_dma_reset_chan(&mxs_chan->chan);
373 } else if (mxs_chan->status != DMA_COMPLETE) {
374 if (mxs_chan->flags & MXS_DMA_SG_LOOP) {
375 mxs_chan->status = DMA_IN_PROGRESS;
376 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE)
380 mxs_chan->status = DMA_COMPLETE;
384 if (mxs_chan->status == DMA_COMPLETE) {
385 if (mxs_chan->reset)
387 dma_cookie_complete(&mxs_chan->desc);
391 tasklet_schedule(&mxs_chan->tasklet);
398 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
399 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
402 mxs_chan->ccw = dma_alloc_coherent(mxs_dma->dma_device.dev,
404 &mxs_chan->ccw_phys, GFP_KERNEL);
405 if (!mxs_chan->ccw) {
410 ret = request_irq(mxs_chan->chan_irq, mxs_dma_int_handler,
421 dma_async_tx_descriptor_init(&mxs_chan->desc, chan);
422 mxs_chan->desc.tx_submit = mxs_dma_tx_submit;
425 async_tx_ack(&mxs_chan->desc);
430 free_irq(mxs_chan->chan_irq, mxs_dma);
433 mxs_chan->ccw, mxs_chan->ccw_phys);
440 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
441 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
445 free_irq(mxs_chan->chan_irq, mxs_dma);
448 mxs_chan->ccw, mxs_chan->ccw_phys);
480 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
481 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
488 if (mxs_chan->status == DMA_IN_PROGRESS)
489 idx = mxs_chan->desc_count;
498 mxs_chan->status = DMA_IN_PROGRESS;
499 mxs_chan->flags = 0;
507 ccw = &mxs_chan->ccw[idx - 1];
508 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * idx;
517 ccw = &mxs_chan->ccw[idx++];
542 ccw = &mxs_chan->ccw[idx++];
544 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * idx;
565 mxs_chan->desc_count = idx;
567 return &mxs_chan->desc;
570 mxs_chan->status = DMA_ERROR;
579 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
580 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
584 if (mxs_chan->status == DMA_IN_PROGRESS)
587 mxs_chan->status = DMA_IN_PROGRESS;
588 mxs_chan->flags |= MXS_DMA_SG_LOOP;
589 mxs_chan->flags |= MXS_DMA_USE_SEMAPHORE;
606 struct mxs_dma_ccw *ccw = &mxs_chan->ccw[i];
609 ccw->next = mxs_chan->ccw_phys;
611 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * (i + 1);
630 mxs_chan->desc_count = i;
632 return &mxs_chan->desc;
635 mxs_chan->status = DMA_ERROR;
650 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
651 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
654 if (mxs_chan->status == DMA_IN_PROGRESS &&
655 mxs_chan->flags & MXS_DMA_SG_LOOP) {
659 last_ccw = &mxs_chan->ccw[mxs_chan->desc_count - 1];
670 return mxs_chan->status;
709 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan);
710 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma;
720 mxs_chan->chan_irq = chan_irq;
782 struct mxs_dma_chan *mxs_chan = &mxs_dma->mxs_chans[i];
784 mxs_chan->mxs_dma = mxs_dma;
785 mxs_chan->chan.device = &mxs_dma->dma_device;
786 dma_cookie_init(&mxs_chan->chan);
788 tasklet_setup(&mxs_chan->tasklet, mxs_dma_tasklet);
791 /* Add the channel to mxs_chan list */
792 list_add_tail(&mxs_chan->chan.device_node,