Lines Matching refs:mchan

108 static void hidma_process_completed(struct hidma_chan *mchan)  in hidma_process_completed()  argument
110 struct dma_device *ddev = mchan->chan.device; in hidma_process_completed()
122 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_process_completed()
123 list_splice_tail_init(&mchan->completed, &list); in hidma_process_completed()
124 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_process_completed()
137 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_process_completed()
139 mchan->last_success = last_cookie; in hidma_process_completed()
146 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_process_completed()
152 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_process_completed()
153 list_move(&mdesc->node, &mchan->free); in hidma_process_completed()
154 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_process_completed()
168 struct hidma_chan *mchan = to_hidma_chan(mdesc->desc.chan); in hidma_callback() local
169 struct dma_device *ddev = mchan->chan.device; in hidma_callback()
174 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_callback()
177 list_move_tail(&mdesc->node, &mchan->completed); in hidma_callback()
181 mchan->running = list_first_entry(&mchan->active, in hidma_callback()
184 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_callback()
186 hidma_process_completed(mchan); in hidma_callback()
196 struct hidma_chan *mchan; in hidma_chan_init() local
199 mchan = devm_kzalloc(dmadev->ddev.dev, sizeof(*mchan), GFP_KERNEL); in hidma_chan_init()
200 if (!mchan) in hidma_chan_init()
204 mchan->dma_sig = dma_sig; in hidma_chan_init()
205 mchan->dmadev = dmadev; in hidma_chan_init()
206 mchan->chan.device = ddev; in hidma_chan_init()
207 dma_cookie_init(&mchan->chan); in hidma_chan_init()
209 INIT_LIST_HEAD(&mchan->free); in hidma_chan_init()
210 INIT_LIST_HEAD(&mchan->prepared); in hidma_chan_init()
211 INIT_LIST_HEAD(&mchan->active); in hidma_chan_init()
212 INIT_LIST_HEAD(&mchan->completed); in hidma_chan_init()
213 INIT_LIST_HEAD(&mchan->queued); in hidma_chan_init()
215 spin_lock_init(&mchan->lock); in hidma_chan_init()
216 list_add_tail(&mchan->chan.device_node, &ddev->channels); in hidma_chan_init()
231 struct hidma_chan *mchan = to_hidma_chan(dmach); in hidma_issue_pending() local
232 struct hidma_dev *dmadev = mchan->dmadev; in hidma_issue_pending()
237 spin_lock_irqsave(&mchan->lock, flags); in hidma_issue_pending()
238 list_for_each_entry_safe(qdesc, next, &mchan->queued, node) { in hidma_issue_pending()
240 list_move_tail(&qdesc->node, &mchan->active); in hidma_issue_pending()
243 if (!mchan->running) { in hidma_issue_pending()
244 struct hidma_desc *desc = list_first_entry(&mchan->active, in hidma_issue_pending()
247 mchan->running = desc; in hidma_issue_pending()
249 spin_unlock_irqrestore(&mchan->lock, flags); in hidma_issue_pending()
276 struct hidma_chan *mchan = to_hidma_chan(dmach); in hidma_tx_status() local
283 is_success = hidma_txn_is_success(cookie, mchan->last_success, in hidma_tx_status()
288 if (mchan->paused && (ret == DMA_IN_PROGRESS)) { in hidma_tx_status()
292 spin_lock_irqsave(&mchan->lock, flags); in hidma_tx_status()
293 if (mchan->running) in hidma_tx_status()
294 runcookie = mchan->running->desc.cookie; in hidma_tx_status()
301 spin_unlock_irqrestore(&mchan->lock, flags); in hidma_tx_status()
313 struct hidma_chan *mchan = to_hidma_chan(txd->chan); in hidma_tx_submit() local
314 struct hidma_dev *dmadev = mchan->dmadev; in hidma_tx_submit()
329 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_tx_submit()
332 list_move_tail(&mdesc->node, &mchan->queued); in hidma_tx_submit()
337 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_tx_submit()
344 struct hidma_chan *mchan = to_hidma_chan(dmach); in hidma_alloc_chan_resources() local
345 struct hidma_dev *dmadev = mchan->dmadev; in hidma_alloc_chan_resources()
352 if (mchan->allocated) in hidma_alloc_chan_resources()
365 rc = hidma_ll_request(dmadev->lldev, mchan->dma_sig, in hidma_alloc_chan_resources()
386 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_alloc_chan_resources()
387 list_splice_tail_init(&descs, &mchan->free); in hidma_alloc_chan_resources()
388 mchan->allocated = true; in hidma_alloc_chan_resources()
389 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_alloc_chan_resources()
397 struct hidma_chan *mchan = to_hidma_chan(dmach); in hidma_prep_dma_memcpy() local
399 struct hidma_dev *mdma = mchan->dmadev; in hidma_prep_dma_memcpy()
403 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_prep_dma_memcpy()
404 if (!list_empty(&mchan->free)) { in hidma_prep_dma_memcpy()
405 mdesc = list_first_entry(&mchan->free, struct hidma_desc, node); in hidma_prep_dma_memcpy()
408 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_prep_dma_memcpy()
419 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_prep_dma_memcpy()
420 list_add_tail(&mdesc->node, &mchan->prepared); in hidma_prep_dma_memcpy()
421 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_prep_dma_memcpy()
430 struct hidma_chan *mchan = to_hidma_chan(dmach); in hidma_prep_dma_memset() local
432 struct hidma_dev *mdma = mchan->dmadev; in hidma_prep_dma_memset()
436 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_prep_dma_memset()
437 if (!list_empty(&mchan->free)) { in hidma_prep_dma_memset()
438 mdesc = list_first_entry(&mchan->free, struct hidma_desc, node); in hidma_prep_dma_memset()
441 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_prep_dma_memset()
452 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_prep_dma_memset()
453 list_add_tail(&mdesc->node, &mchan->prepared); in hidma_prep_dma_memset()
454 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_prep_dma_memset()
461 struct hidma_chan *mchan = to_hidma_chan(chan); in hidma_terminate_channel() local
462 struct hidma_dev *dmadev = to_hidma_dev(mchan->chan.device); in hidma_terminate_channel()
470 hidma_process_completed(mchan); in hidma_terminate_channel()
472 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_terminate_channel()
473 mchan->last_success = 0; in hidma_terminate_channel()
474 list_splice_init(&mchan->active, &list); in hidma_terminate_channel()
475 list_splice_init(&mchan->prepared, &list); in hidma_terminate_channel()
476 list_splice_init(&mchan->completed, &list); in hidma_terminate_channel()
477 list_splice_init(&mchan->queued, &list); in hidma_terminate_channel()
478 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_terminate_channel()
496 list_move(&mdesc->node, &mchan->free); in hidma_terminate_channel()
508 struct hidma_chan *mchan = to_hidma_chan(chan); in hidma_terminate_all() local
509 struct hidma_dev *dmadev = to_hidma_dev(mchan->chan.device); in hidma_terminate_all()
526 struct hidma_chan *mchan = to_hidma_chan(dmach); in hidma_free_chan_resources() local
527 struct hidma_dev *mdma = mchan->dmadev; in hidma_free_chan_resources()
535 spin_lock_irqsave(&mchan->lock, irqflags); in hidma_free_chan_resources()
538 list_splice_tail_init(&mchan->free, &descs); in hidma_free_chan_resources()
547 mchan->allocated = false; in hidma_free_chan_resources()
548 spin_unlock_irqrestore(&mchan->lock, irqflags); in hidma_free_chan_resources()
553 struct hidma_chan *mchan; in hidma_pause() local
556 mchan = to_hidma_chan(chan); in hidma_pause()
557 dmadev = to_hidma_dev(mchan->chan.device); in hidma_pause()
558 if (!mchan->paused) { in hidma_pause()
562 mchan->paused = true; in hidma_pause()
571 struct hidma_chan *mchan; in hidma_resume() local
575 mchan = to_hidma_chan(chan); in hidma_resume()
576 dmadev = to_hidma_dev(mchan->chan.device); in hidma_resume()
577 if (mchan->paused) { in hidma_resume()
581 mchan->paused = false; in hidma_resume()