Lines Matching refs:desc

80 	struct pch_dma_desc_regs desc[MAX_CHAN_NR];
314 static void pdc_dostart(struct pch_dma_chan *pd_chan, struct pch_dma_desc* desc)
323 pd_chan->chan.chan_id, desc->regs.dev_addr);
325 pd_chan->chan.chan_id, desc->regs.mem_addr);
327 pd_chan->chan.chan_id, desc->regs.size);
329 pd_chan->chan.chan_id, desc->regs.next);
331 if (list_empty(&desc->tx_list)) {
332 channel_writel(pd_chan, DEV_ADDR, desc->regs.dev_addr);
333 channel_writel(pd_chan, MEM_ADDR, desc->regs.mem_addr);
334 channel_writel(pd_chan, SIZE, desc->regs.size);
335 channel_writel(pd_chan, NEXT, desc->regs.next);
338 channel_writel(pd_chan, NEXT, desc->txd.phys);
344 struct pch_dma_desc *desc)
346 struct dma_async_tx_descriptor *txd = &desc->txd;
350 list_splice_init(&desc->tx_list, &pd_chan->free_list);
351 list_move(&desc->desc_node, &pd_chan->free_list);
358 struct pch_dma_desc *desc, *_d;
369 list_for_each_entry_safe(desc, _d, &list, desc_node)
370 pdc_chain_complete(pd_chan, desc);
405 struct pch_dma_desc *desc = to_pd_desc(txd);
411 list_add_tail(&desc->desc_node, &pd_chan->active_list);
412 pdc_dostart(pd_chan, desc);
414 list_add_tail(&desc->desc_node, &pd_chan->queue);
423 struct pch_dma_desc *desc = NULL;
427 desc = dma_pool_zalloc(pd->pool, flags, &addr);
428 if (desc) {
429 INIT_LIST_HEAD(&desc->tx_list);
430 dma_async_tx_descriptor_init(&desc->txd, chan);
431 desc->txd.tx_submit = pd_tx_submit;
432 desc->txd.flags = DMA_CTRL_ACK;
433 desc->txd.phys = addr;
436 return desc;
441 struct pch_dma_desc *desc, *_d;
446 list_for_each_entry_safe(desc, _d, &pd_chan->free_list, desc_node) {
448 if (async_tx_test_ack(&desc->txd)) {
449 list_del(&desc->desc_node);
450 ret = desc;
453 dev_dbg(chan2dev(&pd_chan->chan), "desc %p not ACKed\n", desc);
466 "failed to alloc desc\n");
474 struct pch_dma_desc *desc)
476 if (desc) {
478 list_splice_init(&desc->tx_list, &pd_chan->free_list);
479 list_add(&desc->desc_node, &pd_chan->free_list);
487 struct pch_dma_desc *desc;
500 desc = pdc_alloc_desc(chan, GFP_KERNEL);
502 if (!desc) {
508 list_add_tail(&desc->desc_node, &tmp_list);
526 struct pch_dma_desc *desc, *_d;
538 list_for_each_entry_safe(desc, _d, &tmp_list, desc_node)
539 dma_pool_free(pd->pool, desc, desc->txd.phys);
570 struct pch_dma_desc *desc = NULL;
591 desc = pdc_desc_get(pd_chan);
593 if (!desc)
596 desc->regs.dev_addr = reg;
597 desc->regs.mem_addr = sg_dma_address(sg);
598 desc->regs.size = sg_dma_len(sg);
599 desc->regs.next = DMA_DESC_FOLLOW_WITHOUT_IRQ;
603 if (desc->regs.size > DMA_DESC_MAX_COUNT_1_BYTE)
605 desc->regs.size |= DMA_DESC_WIDTH_1_BYTE;
608 if (desc->regs.size > DMA_DESC_MAX_COUNT_2_BYTES)
610 desc->regs.size |= DMA_DESC_WIDTH_2_BYTES;
613 if (desc->regs.size > DMA_DESC_MAX_COUNT_4_BYTES)
615 desc->regs.size |= DMA_DESC_WIDTH_4_BYTES;
622 first = desc;
624 prev->regs.next |= desc->txd.phys;
625 list_add_tail(&desc->desc_node, &first->tx_list);
628 prev = desc;
632 desc->regs.next = DMA_DESC_END_WITH_IRQ;
634 desc->regs.next = DMA_DESC_END_WITHOUT_IRQ;
637 desc->txd.flags = flags;
642 dev_err(chan2dev(chan), "failed to get desc or wrong parameters\n");
650 struct pch_dma_desc *desc, *_d;
660 list_for_each_entry_safe(desc, _d, &list, desc_node)
661 pdc_chain_complete(pd_chan, desc);
872 pd_chan->membase = &regs->desc[i];