Lines Matching refs:desc

80 	struct pch_dma_desc_regs desc[MAX_CHAN_NR];  member
319 static void pdc_dostart(struct pch_dma_chan *pd_chan, struct pch_dma_desc* desc) in pdc_dostart() argument
328 pd_chan->chan.chan_id, desc->regs.dev_addr); in pdc_dostart()
330 pd_chan->chan.chan_id, desc->regs.mem_addr); in pdc_dostart()
332 pd_chan->chan.chan_id, desc->regs.size); in pdc_dostart()
334 pd_chan->chan.chan_id, desc->regs.next); in pdc_dostart()
336 if (list_empty(&desc->tx_list)) { in pdc_dostart()
337 channel_writel(pd_chan, DEV_ADDR, desc->regs.dev_addr); in pdc_dostart()
338 channel_writel(pd_chan, MEM_ADDR, desc->regs.mem_addr); in pdc_dostart()
339 channel_writel(pd_chan, SIZE, desc->regs.size); in pdc_dostart()
340 channel_writel(pd_chan, NEXT, desc->regs.next); in pdc_dostart()
343 channel_writel(pd_chan, NEXT, desc->txd.phys); in pdc_dostart()
349 struct pch_dma_desc *desc) in pdc_chain_complete() argument
351 struct dma_async_tx_descriptor *txd = &desc->txd; in pdc_chain_complete()
355 list_splice_init(&desc->tx_list, &pd_chan->free_list); in pdc_chain_complete()
356 list_move(&desc->desc_node, &pd_chan->free_list); in pdc_chain_complete()
363 struct pch_dma_desc *desc, *_d; in pdc_complete_all() local
374 list_for_each_entry_safe(desc, _d, &list, desc_node) in pdc_complete_all()
375 pdc_chain_complete(pd_chan, desc); in pdc_complete_all()
410 struct pch_dma_desc *desc = to_pd_desc(txd); in pd_tx_submit() local
416 list_add_tail(&desc->desc_node, &pd_chan->active_list); in pd_tx_submit()
417 pdc_dostart(pd_chan, desc); in pd_tx_submit()
419 list_add_tail(&desc->desc_node, &pd_chan->queue); in pd_tx_submit()
428 struct pch_dma_desc *desc = NULL; in pdc_alloc_desc() local
432 desc = dma_pool_zalloc(pd->pool, flags, &addr); in pdc_alloc_desc()
433 if (desc) { in pdc_alloc_desc()
434 INIT_LIST_HEAD(&desc->tx_list); in pdc_alloc_desc()
435 dma_async_tx_descriptor_init(&desc->txd, chan); in pdc_alloc_desc()
436 desc->txd.tx_submit = pd_tx_submit; in pdc_alloc_desc()
437 desc->txd.flags = DMA_CTRL_ACK; in pdc_alloc_desc()
438 desc->txd.phys = addr; in pdc_alloc_desc()
441 return desc; in pdc_alloc_desc()
446 struct pch_dma_desc *desc, *_d; in pdc_desc_get() local
451 list_for_each_entry_safe(desc, _d, &pd_chan->free_list, desc_node) { in pdc_desc_get()
453 if (async_tx_test_ack(&desc->txd)) { in pdc_desc_get()
454 list_del(&desc->desc_node); in pdc_desc_get()
455 ret = desc; in pdc_desc_get()
458 dev_dbg(chan2dev(&pd_chan->chan), "desc %p not ACKed\n", desc); in pdc_desc_get()
479 struct pch_dma_desc *desc) in pdc_desc_put() argument
481 if (desc) { in pdc_desc_put()
483 list_splice_init(&desc->tx_list, &pd_chan->free_list); in pdc_desc_put()
484 list_add(&desc->desc_node, &pd_chan->free_list); in pdc_desc_put()
492 struct pch_dma_desc *desc; in pd_alloc_chan_resources() local
505 desc = pdc_alloc_desc(chan, GFP_KERNEL); in pd_alloc_chan_resources()
507 if (!desc) { in pd_alloc_chan_resources()
513 list_add_tail(&desc->desc_node, &tmp_list); in pd_alloc_chan_resources()
531 struct pch_dma_desc *desc, *_d; in pd_free_chan_resources() local
543 list_for_each_entry_safe(desc, _d, &tmp_list, desc_node) in pd_free_chan_resources()
544 dma_pool_free(pd->pool, desc, desc->txd.phys); in pd_free_chan_resources()
575 struct pch_dma_desc *desc = NULL; in pd_prep_slave_sg() local
596 desc = pdc_desc_get(pd_chan); in pd_prep_slave_sg()
598 if (!desc) in pd_prep_slave_sg()
601 desc->regs.dev_addr = reg; in pd_prep_slave_sg()
602 desc->regs.mem_addr = sg_dma_address(sg); in pd_prep_slave_sg()
603 desc->regs.size = sg_dma_len(sg); in pd_prep_slave_sg()
604 desc->regs.next = DMA_DESC_FOLLOW_WITHOUT_IRQ; in pd_prep_slave_sg()
608 if (desc->regs.size > DMA_DESC_MAX_COUNT_1_BYTE) in pd_prep_slave_sg()
610 desc->regs.size |= DMA_DESC_WIDTH_1_BYTE; in pd_prep_slave_sg()
613 if (desc->regs.size > DMA_DESC_MAX_COUNT_2_BYTES) in pd_prep_slave_sg()
615 desc->regs.size |= DMA_DESC_WIDTH_2_BYTES; in pd_prep_slave_sg()
618 if (desc->regs.size > DMA_DESC_MAX_COUNT_4_BYTES) in pd_prep_slave_sg()
620 desc->regs.size |= DMA_DESC_WIDTH_4_BYTES; in pd_prep_slave_sg()
627 first = desc; in pd_prep_slave_sg()
629 prev->regs.next |= desc->txd.phys; in pd_prep_slave_sg()
630 list_add_tail(&desc->desc_node, &first->tx_list); in pd_prep_slave_sg()
633 prev = desc; in pd_prep_slave_sg()
637 desc->regs.next = DMA_DESC_END_WITH_IRQ; in pd_prep_slave_sg()
639 desc->regs.next = DMA_DESC_END_WITHOUT_IRQ; in pd_prep_slave_sg()
642 desc->txd.flags = flags; in pd_prep_slave_sg()
655 struct pch_dma_desc *desc, *_d; in pd_device_terminate_all() local
665 list_for_each_entry_safe(desc, _d, &list, desc_node) in pd_device_terminate_all()
666 pdc_chain_complete(pd_chan, desc); in pd_device_terminate_all()
877 pd_chan->membase = &regs->desc[i]; in pch_dma_probe()