• Home
  • Raw
  • Download

Lines Matching refs:desc

42 	struct ccp_dma_desc *desc, *dtmp;  in ccp_free_desc_resources()  local
44 list_for_each_entry_safe(desc, dtmp, list, entry) { in ccp_free_desc_resources()
45 ccp_free_cmd_resources(ccp, &desc->active); in ccp_free_desc_resources()
46 ccp_free_cmd_resources(ccp, &desc->pending); in ccp_free_desc_resources()
48 list_del(&desc->entry); in ccp_free_desc_resources()
49 kmem_cache_free(ccp->dma_desc_cache, desc); in ccp_free_desc_resources()
74 struct ccp_dma_desc *desc, *dtmp; in ccp_cleanup_desc_resources() local
76 list_for_each_entry_safe_reverse(desc, dtmp, list, entry) { in ccp_cleanup_desc_resources()
77 if (!async_tx_test_ack(&desc->tx_desc)) in ccp_cleanup_desc_resources()
80 dev_dbg(ccp->dev, "%s - desc=%p\n", __func__, desc); in ccp_cleanup_desc_resources()
82 ccp_free_cmd_resources(ccp, &desc->active); in ccp_cleanup_desc_resources()
83 ccp_free_cmd_resources(ccp, &desc->pending); in ccp_cleanup_desc_resources()
85 list_del(&desc->entry); in ccp_cleanup_desc_resources()
86 kmem_cache_free(ccp->dma_desc_cache, desc); in ccp_cleanup_desc_resources()
105 static int ccp_issue_next_cmd(struct ccp_dma_desc *desc) in ccp_issue_next_cmd() argument
110 cmd = list_first_entry(&desc->pending, struct ccp_dma_cmd, entry); in ccp_issue_next_cmd()
111 list_move(&cmd->entry, &desc->active); in ccp_issue_next_cmd()
113 dev_dbg(desc->ccp->dev, "%s - tx %d, cmd=%p\n", __func__, in ccp_issue_next_cmd()
114 desc->tx_desc.cookie, cmd); in ccp_issue_next_cmd()
120 dev_dbg(desc->ccp->dev, "%s - error: ret=%d, tx %d, cmd=%p\n", __func__, in ccp_issue_next_cmd()
121 ret, desc->tx_desc.cookie, cmd); in ccp_issue_next_cmd()
126 static void ccp_free_active_cmd(struct ccp_dma_desc *desc) in ccp_free_active_cmd() argument
130 cmd = list_first_entry_or_null(&desc->active, struct ccp_dma_cmd, in ccp_free_active_cmd()
135 dev_dbg(desc->ccp->dev, "%s - freeing tx %d cmd=%p\n", in ccp_free_active_cmd()
136 __func__, desc->tx_desc.cookie, cmd); in ccp_free_active_cmd()
139 kmem_cache_free(desc->ccp->dma_cmd_cache, cmd); in ccp_free_active_cmd()
143 struct ccp_dma_desc *desc) in __ccp_next_dma_desc() argument
146 if (desc) in __ccp_next_dma_desc()
147 list_move(&desc->entry, &chan->complete); in __ccp_next_dma_desc()
150 desc = list_first_entry_or_null(&chan->active, struct ccp_dma_desc, in __ccp_next_dma_desc()
153 return desc; in __ccp_next_dma_desc()
157 struct ccp_dma_desc *desc) in ccp_handle_active_desc() argument
164 if (desc) { in ccp_handle_active_desc()
166 ccp_free_active_cmd(desc); in ccp_handle_active_desc()
168 if (!list_empty(&desc->pending)) { in ccp_handle_active_desc()
170 if (desc->status != DMA_ERROR) in ccp_handle_active_desc()
171 return desc; in ccp_handle_active_desc()
174 ccp_free_cmd_resources(desc->ccp, in ccp_handle_active_desc()
175 &desc->pending); in ccp_handle_active_desc()
178 tx_desc = &desc->tx_desc; in ccp_handle_active_desc()
185 if (desc) { in ccp_handle_active_desc()
186 if (desc->status != DMA_ERROR) in ccp_handle_active_desc()
187 desc->status = DMA_COMPLETE; in ccp_handle_active_desc()
189 dev_dbg(desc->ccp->dev, in ccp_handle_active_desc()
191 desc->tx_desc.cookie, desc->status); in ccp_handle_active_desc()
196 desc = __ccp_next_dma_desc(chan, desc); in ccp_handle_active_desc()
207 } while (desc); in ccp_handle_active_desc()
214 struct ccp_dma_desc *desc; in __ccp_pending_to_active() local
219 desc = list_empty(&chan->active) in __ccp_pending_to_active()
225 return desc; in __ccp_pending_to_active()
230 struct ccp_dma_desc *desc = data; in ccp_cmd_callback() local
237 chan = container_of(desc->tx_desc.chan, struct ccp_dma_chan, in ccp_cmd_callback()
241 __func__, desc->tx_desc.cookie, err); in ccp_cmd_callback()
244 desc->status = DMA_ERROR; in ccp_cmd_callback()
248 desc = ccp_handle_active_desc(chan, desc); in ccp_cmd_callback()
251 if (!desc || (chan->status == DMA_PAUSED)) in ccp_cmd_callback()
254 ret = ccp_issue_next_cmd(desc); in ccp_cmd_callback()
258 desc->status = DMA_ERROR; in ccp_cmd_callback()
266 struct ccp_dma_desc *desc = container_of(tx_desc, struct ccp_dma_desc, in ccp_tx_submit() local
277 list_del(&desc->entry); in ccp_tx_submit()
278 list_add_tail(&desc->entry, &chan->pending); in ccp_tx_submit()
302 struct ccp_dma_desc *desc; in ccp_alloc_dma_desc() local
304 desc = kmem_cache_zalloc(chan->ccp->dma_desc_cache, GFP_NOWAIT); in ccp_alloc_dma_desc()
305 if (!desc) in ccp_alloc_dma_desc()
308 dma_async_tx_descriptor_init(&desc->tx_desc, &chan->dma_chan); in ccp_alloc_dma_desc()
309 desc->tx_desc.flags = flags; in ccp_alloc_dma_desc()
310 desc->tx_desc.tx_submit = ccp_tx_submit; in ccp_alloc_dma_desc()
311 desc->ccp = chan->ccp; in ccp_alloc_dma_desc()
312 INIT_LIST_HEAD(&desc->pending); in ccp_alloc_dma_desc()
313 INIT_LIST_HEAD(&desc->active); in ccp_alloc_dma_desc()
314 desc->status = DMA_IN_PROGRESS; in ccp_alloc_dma_desc()
316 return desc; in ccp_alloc_dma_desc()
329 struct ccp_dma_desc *desc; in ccp_create_desc() local
345 desc = ccp_alloc_dma_desc(chan, flags); in ccp_create_desc()
346 if (!desc) in ccp_create_desc()
405 ccp_cmd->data = desc; in ccp_create_desc()
407 list_add_tail(&cmd->entry, &desc->pending); in ccp_create_desc()
423 desc->len = total_len; in ccp_create_desc()
425 if (list_empty(&desc->pending)) in ccp_create_desc()
428 dev_dbg(ccp->dev, "%s - desc=%p\n", __func__, desc); in ccp_create_desc()
432 list_add_tail(&desc->entry, &chan->created); in ccp_create_desc()
436 return desc; in ccp_create_desc()
439 ccp_free_cmd_resources(ccp, &desc->pending); in ccp_create_desc()
440 kmem_cache_free(ccp->dma_desc_cache, desc); in ccp_create_desc()
451 struct ccp_dma_desc *desc; in ccp_prep_dma_memcpy() local
466 desc = ccp_create_desc(dma_chan, &dst_sg, 1, &src_sg, 1, flags); in ccp_prep_dma_memcpy()
467 if (!desc) in ccp_prep_dma_memcpy()
470 return &desc->tx_desc; in ccp_prep_dma_memcpy()
480 struct ccp_dma_desc *desc; in ccp_prep_dma_sg() local
486 desc = ccp_create_desc(dma_chan, dst_sg, dst_nents, src_sg, src_nents, in ccp_prep_dma_sg()
488 if (!desc) in ccp_prep_dma_sg()
491 return &desc->tx_desc; in ccp_prep_dma_sg()
499 struct ccp_dma_desc *desc; in ccp_prep_dma_interrupt() local
501 desc = ccp_alloc_dma_desc(chan, flags); in ccp_prep_dma_interrupt()
502 if (!desc) in ccp_prep_dma_interrupt()
505 return &desc->tx_desc; in ccp_prep_dma_interrupt()
512 struct ccp_dma_desc *desc; in ccp_issue_pending() local
519 desc = __ccp_pending_to_active(chan); in ccp_issue_pending()
524 if (desc) in ccp_issue_pending()
525 ccp_cmd_callback(desc, 0); in ccp_issue_pending()
534 struct ccp_dma_desc *desc; in ccp_tx_status() local
548 list_for_each_entry(desc, &chan->complete, entry) { in ccp_tx_status()
549 if (desc->tx_desc.cookie != cookie) in ccp_tx_status()
552 ret = desc->status; in ccp_tx_status()
581 struct ccp_dma_desc *desc; in ccp_resume() local
586 desc = list_first_entry_or_null(&chan->active, struct ccp_dma_desc, in ccp_resume()
595 if (desc) in ccp_resume()
596 ccp_cmd_callback(desc, 0); in ccp_resume()