dmaengine: consolidate tx_status functions
[deliverable/linux.git] / drivers / dma / ppc4xx / adma.c
index fc457a7e8832dc8f29ed4055cc781369de4ef7aa..86239ea01898b840661ea968e8885592ea00b8c8 100644 (file)
@@ -46,6 +46,7 @@
 #include <asm/dcr.h>
 #include <asm/dcr-regs.h>
 #include "adma.h"
+#include "../dmaengine.h"
 
 enum ppc_adma_init_code {
        PPC_ADMA_INIT_OK = 0,
@@ -1930,7 +1931,7 @@ static void __ppc440spe_adma_slot_cleanup(struct ppc440spe_adma_chan *chan)
                                if (end_of_chain && slot_cnt) {
                                        /* Should wait for ZeroSum completion */
                                        if (cookie > 0)
-                                               chan->completed_cookie = cookie;
+                                               chan->common.completed_cookie = cookie;
                                        return;
                                }
 
@@ -1960,7 +1961,7 @@ static void __ppc440spe_adma_slot_cleanup(struct ppc440spe_adma_chan *chan)
        BUG_ON(!seen_current);
 
        if (cookie > 0) {
-               chan->completed_cookie = cookie;
+               chan->common.completed_cookie = cookie;
                pr_debug("\tcompleted cookie %d\n", cookie);
        }
 
@@ -2149,22 +2150,6 @@ static int ppc440spe_adma_alloc_chan_resources(struct dma_chan *chan)
        return (i > 0) ? i : -ENOMEM;
 }
 
-/**
- * ppc440spe_desc_assign_cookie - assign a cookie
- */
-static dma_cookie_t ppc440spe_desc_assign_cookie(
-               struct ppc440spe_adma_chan *chan,
-               struct ppc440spe_adma_desc_slot *desc)
-{
-       dma_cookie_t cookie = chan->common.cookie;
-
-       cookie++;
-       if (cookie < 0)
-               cookie = 1;
-       chan->common.cookie = desc->async_tx.cookie = cookie;
-       return cookie;
-}
-
 /**
  * ppc440spe_rxor_set_region_data -
  */
@@ -2235,8 +2220,7 @@ static dma_cookie_t ppc440spe_adma_tx_submit(struct dma_async_tx_descriptor *tx)
        slots_per_op = group_start->slots_per_op;
 
        spin_lock_bh(&chan->lock);
-
-       cookie = ppc440spe_desc_assign_cookie(chan, sw_desc);
+       cookie = dma_cookie_assign(tx);
 
        if (unlikely(list_empty(&chan->chain))) {
                /* first peer */
@@ -3944,28 +3928,16 @@ static enum dma_status ppc440spe_adma_tx_status(struct dma_chan *chan,
                        dma_cookie_t cookie, struct dma_tx_state *txstate)
 {
        struct ppc440spe_adma_chan *ppc440spe_chan;
-       dma_cookie_t last_used;
-       dma_cookie_t last_complete;
        enum dma_status ret;
 
        ppc440spe_chan = to_ppc440spe_adma_chan(chan);
-       last_used = chan->cookie;
-       last_complete = ppc440spe_chan->completed_cookie;
-
-       dma_set_tx_state(txstate, last_complete, last_used, 0);
-
-       ret = dma_async_is_complete(cookie, last_complete, last_used);
+       ret = dma_cookie_status(chan, cookie, txstate);
        if (ret == DMA_SUCCESS)
                return ret;
 
        ppc440spe_adma_slot_cleanup(ppc440spe_chan);
 
-       last_used = chan->cookie;
-       last_complete = ppc440spe_chan->completed_cookie;
-
-       dma_set_tx_state(txstate, last_complete, last_used, 0);
-
-       return dma_async_is_complete(cookie, last_complete, last_used);
+       return dma_cookie_status(chan, cookie, txstate);
 }
 
 /**
@@ -4058,7 +4030,7 @@ static void ppc440spe_chan_start_null_xor(struct ppc440spe_adma_chan *chan)
                /* initialize the completed cookie to be less than
                 * the most recently used cookie
                 */
-               chan->completed_cookie = cookie - 1;
+               chan->common.completed_cookie = cookie - 1;
                chan->common.cookie = sw_desc->async_tx.cookie = cookie;
 
                /* channel should not be busy */
This page took 0.025555 seconds and 5 git commands to generate.