Lines Matching refs:desc

88 	struct pch_dma_desc_regs desc[MAX_CHAN_NR];  member
327 static void pdc_dostart(struct pch_dma_chan *pd_chan, struct pch_dma_desc* desc) in pdc_dostart() argument
336 pd_chan->chan.chan_id, desc->regs.dev_addr); in pdc_dostart()
338 pd_chan->chan.chan_id, desc->regs.mem_addr); in pdc_dostart()
340 pd_chan->chan.chan_id, desc->regs.size); in pdc_dostart()
342 pd_chan->chan.chan_id, desc->regs.next); in pdc_dostart()
344 if (list_empty(&desc->tx_list)) { in pdc_dostart()
345 channel_writel(pd_chan, DEV_ADDR, desc->regs.dev_addr); in pdc_dostart()
346 channel_writel(pd_chan, MEM_ADDR, desc->regs.mem_addr); in pdc_dostart()
347 channel_writel(pd_chan, SIZE, desc->regs.size); in pdc_dostart()
348 channel_writel(pd_chan, NEXT, desc->regs.next); in pdc_dostart()
351 channel_writel(pd_chan, NEXT, desc->txd.phys); in pdc_dostart()
357 struct pch_dma_desc *desc) in pdc_chain_complete() argument
359 struct dma_async_tx_descriptor *txd = &desc->txd; in pdc_chain_complete()
363 list_splice_init(&desc->tx_list, &pd_chan->free_list); in pdc_chain_complete()
364 list_move(&desc->desc_node, &pd_chan->free_list); in pdc_chain_complete()
372 struct pch_dma_desc *desc, *_d; in pdc_complete_all() local
383 list_for_each_entry_safe(desc, _d, &list, desc_node) in pdc_complete_all()
384 pdc_chain_complete(pd_chan, desc); in pdc_complete_all()
419 struct pch_dma_desc *desc = to_pd_desc(txd); in pd_tx_submit() local
427 list_add_tail(&desc->desc_node, &pd_chan->active_list); in pd_tx_submit()
428 pdc_dostart(pd_chan, desc); in pd_tx_submit()
430 list_add_tail(&desc->desc_node, &pd_chan->queue); in pd_tx_submit()
439 struct pch_dma_desc *desc = NULL; in pdc_alloc_desc() local
443 desc = pci_pool_alloc(pd->pool, flags, &addr); in pdc_alloc_desc()
444 if (desc) { in pdc_alloc_desc()
445 memset(desc, 0, sizeof(struct pch_dma_desc)); in pdc_alloc_desc()
446 INIT_LIST_HEAD(&desc->tx_list); in pdc_alloc_desc()
447 dma_async_tx_descriptor_init(&desc->txd, chan); in pdc_alloc_desc()
448 desc->txd.tx_submit = pd_tx_submit; in pdc_alloc_desc()
449 desc->txd.flags = DMA_CTRL_ACK; in pdc_alloc_desc()
450 desc->txd.phys = addr; in pdc_alloc_desc()
453 return desc; in pdc_alloc_desc()
458 struct pch_dma_desc *desc, *_d; in pdc_desc_get() local
463 list_for_each_entry_safe(desc, _d, &pd_chan->free_list, desc_node) { in pdc_desc_get()
465 if (async_tx_test_ack(&desc->txd)) { in pdc_desc_get()
466 list_del(&desc->desc_node); in pdc_desc_get()
467 ret = desc; in pdc_desc_get()
470 dev_dbg(chan2dev(&pd_chan->chan), "desc %p not ACKed\n", desc); in pdc_desc_get()
491 struct pch_dma_desc *desc) in pdc_desc_put() argument
493 if (desc) { in pdc_desc_put()
495 list_splice_init(&desc->tx_list, &pd_chan->free_list); in pdc_desc_put()
496 list_add(&desc->desc_node, &pd_chan->free_list); in pdc_desc_put()
504 struct pch_dma_desc *desc; in pd_alloc_chan_resources() local
517 desc = pdc_alloc_desc(chan, GFP_KERNEL); in pd_alloc_chan_resources()
519 if (!desc) { in pd_alloc_chan_resources()
525 list_add_tail(&desc->desc_node, &tmp_list); in pd_alloc_chan_resources()
543 struct pch_dma_desc *desc, *_d; in pd_free_chan_resources() local
555 list_for_each_entry_safe(desc, _d, &tmp_list, desc_node) in pd_free_chan_resources()
556 pci_pool_free(pd->pool, desc, desc->txd.phys); in pd_free_chan_resources()
587 struct pch_dma_desc *desc = NULL; in pd_prep_slave_sg() local
608 desc = pdc_desc_get(pd_chan); in pd_prep_slave_sg()
610 if (!desc) in pd_prep_slave_sg()
613 desc->regs.dev_addr = reg; in pd_prep_slave_sg()
614 desc->regs.mem_addr = sg_dma_address(sg); in pd_prep_slave_sg()
615 desc->regs.size = sg_dma_len(sg); in pd_prep_slave_sg()
616 desc->regs.next = DMA_DESC_FOLLOW_WITHOUT_IRQ; in pd_prep_slave_sg()
620 if (desc->regs.size > DMA_DESC_MAX_COUNT_1_BYTE) in pd_prep_slave_sg()
622 desc->regs.size |= DMA_DESC_WIDTH_1_BYTE; in pd_prep_slave_sg()
625 if (desc->regs.size > DMA_DESC_MAX_COUNT_2_BYTES) in pd_prep_slave_sg()
627 desc->regs.size |= DMA_DESC_WIDTH_2_BYTES; in pd_prep_slave_sg()
630 if (desc->regs.size > DMA_DESC_MAX_COUNT_4_BYTES) in pd_prep_slave_sg()
632 desc->regs.size |= DMA_DESC_WIDTH_4_BYTES; in pd_prep_slave_sg()
639 first = desc; in pd_prep_slave_sg()
641 prev->regs.next |= desc->txd.phys; in pd_prep_slave_sg()
642 list_add_tail(&desc->desc_node, &first->tx_list); in pd_prep_slave_sg()
645 prev = desc; in pd_prep_slave_sg()
649 desc->regs.next = DMA_DESC_END_WITH_IRQ; in pd_prep_slave_sg()
651 desc->regs.next = DMA_DESC_END_WITHOUT_IRQ; in pd_prep_slave_sg()
654 desc->txd.flags = flags; in pd_prep_slave_sg()
667 struct pch_dma_desc *desc, *_d; in pd_device_terminate_all() local
677 list_for_each_entry_safe(desc, _d, &list, desc_node) in pd_device_terminate_all()
678 pdc_chain_complete(pd_chan, desc); in pd_device_terminate_all()
905 pd_chan->membase = &regs->desc[i]; in pch_dma_probe()