Lines Matching refs:desc
84 struct usb_dmac_desc *desc; member
199 struct usb_dmac_desc *desc = chan->desc; in usb_dmac_chan_start_sg() local
200 struct usb_dmac_sg *sg = desc->sg + index; in usb_dmac_chan_start_sg()
205 if (desc->direction == DMA_DEV_TO_MEM) in usb_dmac_chan_start_sg()
231 chan->desc = NULL; in usb_dmac_chan_start_desc()
242 chan->desc = to_usb_dmac_desc(vd); in usb_dmac_chan_start_desc()
243 chan->desc->sg_index = 0; in usb_dmac_chan_start_desc()
269 struct usb_dmac_desc *desc; in usb_dmac_desc_alloc() local
272 desc = kzalloc(sizeof(*desc) + sg_len * sizeof(desc->sg[0]), gfp); in usb_dmac_desc_alloc()
273 if (!desc) in usb_dmac_desc_alloc()
276 desc->sg_allocated_len = sg_len; in usb_dmac_desc_alloc()
277 INIT_LIST_HEAD(&desc->node); in usb_dmac_desc_alloc()
280 list_add_tail(&desc->node, &chan->desc_freed); in usb_dmac_desc_alloc()
288 struct usb_dmac_desc *desc, *_desc; in usb_dmac_desc_free() local
294 list_for_each_entry_safe(desc, _desc, &list, node) { in usb_dmac_desc_free()
295 list_del(&desc->node); in usb_dmac_desc_free()
296 kfree(desc); in usb_dmac_desc_free()
304 struct usb_dmac_desc *desc = NULL; in usb_dmac_desc_get() local
309 list_for_each_entry(desc, &chan->desc_freed, node) { in usb_dmac_desc_get()
310 if (sg_len <= desc->sg_allocated_len) { in usb_dmac_desc_get()
311 list_move_tail(&desc->node, &chan->desc_got); in usb_dmac_desc_get()
313 return desc; in usb_dmac_desc_get()
322 desc = list_last_entry(&chan->desc_freed, struct usb_dmac_desc, in usb_dmac_desc_get()
324 list_move_tail(&desc->node, &chan->desc_got); in usb_dmac_desc_get()
326 return desc; in usb_dmac_desc_get()
333 struct usb_dmac_desc *desc) in usb_dmac_desc_put() argument
338 list_move_tail(&desc->node, &chan->desc_freed); in usb_dmac_desc_put()
424 struct usb_dmac_desc *desc; in usb_dmac_prep_slave_sg() local
434 desc = usb_dmac_desc_get(uchan, sg_len, GFP_NOWAIT); in usb_dmac_prep_slave_sg()
435 if (!desc) in usb_dmac_prep_slave_sg()
438 desc->direction = dir; in usb_dmac_prep_slave_sg()
439 desc->sg_len = sg_len; in usb_dmac_prep_slave_sg()
441 desc->sg[i].mem_addr = sg_dma_address(sg); in usb_dmac_prep_slave_sg()
442 desc->sg[i].size = sg_dma_len(sg); in usb_dmac_prep_slave_sg()
445 return vchan_tx_prep(&uchan->vc, &desc->vd, dma_flags); in usb_dmac_prep_slave_sg()
451 struct usb_dmac_desc *desc; in usb_dmac_chan_terminate_all() local
459 if (uchan->desc) in usb_dmac_chan_terminate_all()
460 uchan->desc = NULL; in usb_dmac_chan_terminate_all()
462 list_for_each_entry(desc, &list, node) in usb_dmac_chan_terminate_all()
463 list_move_tail(&desc->node, &uchan->desc_freed); in usb_dmac_chan_terminate_all()
471 struct usb_dmac_desc *desc, in usb_dmac_get_current_residue() argument
474 struct usb_dmac_sg *sg = desc->sg + sg_index; in usb_dmac_get_current_residue()
482 if (desc->direction == DMA_DEV_TO_MEM) in usb_dmac_get_current_residue()
493 struct usb_dmac_desc *desc; in usb_dmac_chan_get_residue_if_complete() local
496 list_for_each_entry_reverse(desc, &chan->desc_freed, node) { in usb_dmac_chan_get_residue_if_complete()
497 if (desc->done_cookie == cookie) { in usb_dmac_chan_get_residue_if_complete()
498 residue = desc->residue; in usb_dmac_chan_get_residue_if_complete()
511 struct usb_dmac_desc *desc = chan->desc; in usb_dmac_chan_get_residue() local
514 if (!desc) { in usb_dmac_chan_get_residue()
518 desc = to_usb_dmac_desc(vd); in usb_dmac_chan_get_residue()
522 for (i = desc->sg_index + 1; i < desc->sg_len; i++) in usb_dmac_chan_get_residue()
523 residue += desc->sg[i].size; in usb_dmac_chan_get_residue()
526 residue += usb_dmac_get_current_residue(chan, desc, desc->sg_index); in usb_dmac_chan_get_residue()
563 if (vchan_issue_pending(&uchan->vc) && !uchan->desc) in usb_dmac_issue_pending()
570 struct usb_dmac_desc *desc = to_usb_dmac_desc(vd); in usb_dmac_virt_desc_free() local
573 usb_dmac_desc_put(chan, desc); in usb_dmac_virt_desc_free()
582 struct usb_dmac_desc *desc = chan->desc; in usb_dmac_isr_transfer_end() local
584 BUG_ON(!desc); in usb_dmac_isr_transfer_end()
586 if (++desc->sg_index < desc->sg_len) { in usb_dmac_isr_transfer_end()
587 usb_dmac_chan_start_sg(chan, desc->sg_index); in usb_dmac_isr_transfer_end()
589 desc->residue = usb_dmac_get_current_residue(chan, desc, in usb_dmac_isr_transfer_end()
590 desc->sg_index - 1); in usb_dmac_isr_transfer_end()
591 desc->done_cookie = desc->vd.tx.cookie; in usb_dmac_isr_transfer_end()
592 vchan_cookie_complete(&desc->vd); in usb_dmac_isr_transfer_end()