提交 bca34692 编写于 作者: D Dan Williams

dmaengine: provide helper for setting txstate

Simple conditional struct filler to cut out some duplicated code.
Signed-off-by: NDan Williams <dan.j.williams@intel.com>
上级 07934481
...@@ -834,12 +834,7 @@ atc_tx_status(struct dma_chan *chan, ...@@ -834,12 +834,7 @@ atc_tx_status(struct dma_chan *chan,
spin_unlock_bh(&atchan->lock); spin_unlock_bh(&atchan->lock);
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
dev_vdbg(chan2dev(chan), "tx_status: %d (d%d, u%d)\n", dev_vdbg(chan2dev(chan), "tx_status: %d (d%d, u%d)\n",
cookie, last_complete ? last_complete : 0, cookie, last_complete ? last_complete : 0,
last_used ? last_used : 0); last_used ? last_used : 0);
......
...@@ -1147,12 +1147,8 @@ coh901318_tx_status(struct dma_chan *chan, dma_cookie_t cookie, ...@@ -1147,12 +1147,8 @@ coh901318_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
ret = dma_async_is_complete(cookie, last_complete, last_used); ret = dma_async_is_complete(cookie, last_complete, last_used);
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used,
txstate->last = last_complete; coh901318_get_bytes_left(chan));
txstate->used = last_used;
txstate->residue = coh901318_get_bytes_left(chan);
}
if (ret == DMA_IN_PROGRESS && cohc->stopped) if (ret == DMA_IN_PROGRESS && cohc->stopped)
ret = DMA_PAUSED; ret = DMA_PAUSED;
......
...@@ -841,11 +841,7 @@ dwc_tx_status(struct dma_chan *chan, ...@@ -841,11 +841,7 @@ dwc_tx_status(struct dma_chan *chan,
ret = dma_async_is_complete(cookie, last_complete, last_used); ret = dma_async_is_complete(cookie, last_complete, last_used);
} }
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
return ret; return ret;
} }
......
...@@ -987,11 +987,7 @@ static enum dma_status fsl_tx_status(struct dma_chan *dchan, ...@@ -987,11 +987,7 @@ static enum dma_status fsl_tx_status(struct dma_chan *dchan,
last_used = dchan->cookie; last_used = dchan->cookie;
last_complete = chan->completed_cookie; last_complete = chan->completed_cookie;
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
return dma_async_is_complete(cookie, last_complete, last_used); return dma_async_is_complete(cookie, last_complete, last_used);
} }
......
...@@ -158,11 +158,7 @@ ioat_tx_status(struct dma_chan *c, dma_cookie_t cookie, ...@@ -158,11 +158,7 @@ ioat_tx_status(struct dma_chan *c, dma_cookie_t cookie,
last_used = c->cookie; last_used = c->cookie;
last_complete = chan->completed_cookie; last_complete = chan->completed_cookie;
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
return dma_async_is_complete(cookie, last_complete, last_used); return dma_async_is_complete(cookie, last_complete, last_used);
} }
......
...@@ -909,13 +909,7 @@ static enum dma_status iop_adma_status(struct dma_chan *chan, ...@@ -909,13 +909,7 @@ static enum dma_status iop_adma_status(struct dma_chan *chan,
last_used = chan->cookie; last_used = chan->cookie;
last_complete = iop_chan->completed_cookie; last_complete = iop_chan->completed_cookie;
dma_set_tx_state(txstate, last_complete, last_used, 0);
if (txstate) {
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
ret = dma_async_is_complete(cookie, last_complete, last_used); ret = dma_async_is_complete(cookie, last_complete, last_used);
if (ret == DMA_SUCCESS) if (ret == DMA_SUCCESS)
return ret; return ret;
...@@ -924,12 +918,7 @@ static enum dma_status iop_adma_status(struct dma_chan *chan, ...@@ -924,12 +918,7 @@ static enum dma_status iop_adma_status(struct dma_chan *chan,
last_used = chan->cookie; last_used = chan->cookie;
last_complete = iop_chan->completed_cookie; last_complete = iop_chan->completed_cookie;
dma_set_tx_state(txstate, last_complete, last_used, 0);
if (txstate) {
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
return dma_async_is_complete(cookie, last_complete, last_used); return dma_async_is_complete(cookie, last_complete, last_used);
} }
......
...@@ -1651,11 +1651,7 @@ static enum dma_status idmac_tx_status(struct dma_chan *chan, ...@@ -1651,11 +1651,7 @@ static enum dma_status idmac_tx_status(struct dma_chan *chan,
{ {
struct idmac_channel *ichan = to_idmac_chan(chan); struct idmac_channel *ichan = to_idmac_chan(chan);
if (txstate) { dma_set_tx_state(txstate, ichan->completed, chan->cookie, 0);
txstate->last = ichan->completed;
txstate->used = chan->cookie;
txstate->residue = 0;
}
if (cookie != chan->cookie) if (cookie != chan->cookie)
return DMA_ERROR; return DMA_ERROR;
return DMA_SUCCESS; return DMA_SUCCESS;
......
...@@ -553,12 +553,7 @@ mpc_dma_tx_status(struct dma_chan *chan, dma_cookie_t cookie, ...@@ -553,12 +553,7 @@ mpc_dma_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
last_complete = mchan->completed_cookie; last_complete = mchan->completed_cookie;
spin_unlock_irqrestore(&mchan->lock, flags); spin_unlock_irqrestore(&mchan->lock, flags);
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
return dma_async_is_complete(cookie, last_complete, last_used); return dma_async_is_complete(cookie, last_complete, last_used);
} }
......
...@@ -826,11 +826,7 @@ static enum dma_status mv_xor_status(struct dma_chan *chan, ...@@ -826,11 +826,7 @@ static enum dma_status mv_xor_status(struct dma_chan *chan,
last_used = chan->cookie; last_used = chan->cookie;
last_complete = mv_chan->completed_cookie; last_complete = mv_chan->completed_cookie;
mv_chan->is_complete_cookie = cookie; mv_chan->is_complete_cookie = cookie;
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
ret = dma_async_is_complete(cookie, last_complete, last_used); ret = dma_async_is_complete(cookie, last_complete, last_used);
if (ret == DMA_SUCCESS) { if (ret == DMA_SUCCESS) {
...@@ -842,12 +838,7 @@ static enum dma_status mv_xor_status(struct dma_chan *chan, ...@@ -842,12 +838,7 @@ static enum dma_status mv_xor_status(struct dma_chan *chan,
last_used = chan->cookie; last_used = chan->cookie;
last_complete = mv_chan->completed_cookie; last_complete = mv_chan->completed_cookie;
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
return dma_async_is_complete(cookie, last_complete, last_used); return dma_async_is_complete(cookie, last_complete, last_used);
} }
......
...@@ -3951,11 +3951,7 @@ static enum dma_status ppc440spe_adma_tx_status(struct dma_chan *chan, ...@@ -3951,11 +3951,7 @@ static enum dma_status ppc440spe_adma_tx_status(struct dma_chan *chan,
last_used = chan->cookie; last_used = chan->cookie;
last_complete = ppc440spe_chan->completed_cookie; last_complete = ppc440spe_chan->completed_cookie;
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
ret = dma_async_is_complete(cookie, last_complete, last_used); ret = dma_async_is_complete(cookie, last_complete, last_used);
if (ret == DMA_SUCCESS) if (ret == DMA_SUCCESS)
...@@ -3966,11 +3962,7 @@ static enum dma_status ppc440spe_adma_tx_status(struct dma_chan *chan, ...@@ -3966,11 +3962,7 @@ static enum dma_status ppc440spe_adma_tx_status(struct dma_chan *chan,
last_used = chan->cookie; last_used = chan->cookie;
last_complete = ppc440spe_chan->completed_cookie; last_complete = ppc440spe_chan->completed_cookie;
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
return dma_async_is_complete(cookie, last_complete, last_used); return dma_async_is_complete(cookie, last_complete, last_used);
} }
......
...@@ -752,12 +752,7 @@ static enum dma_status sh_dmae_tx_status(struct dma_chan *chan, ...@@ -752,12 +752,7 @@ static enum dma_status sh_dmae_tx_status(struct dma_chan *chan,
last_used = chan->cookie; last_used = chan->cookie;
last_complete = sh_chan->completed_cookie; last_complete = sh_chan->completed_cookie;
BUG_ON(last_complete < 0); BUG_ON(last_complete < 0);
dma_set_tx_state(txstate, last_complete, last_used, 0);
if (txstate) {
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
spin_lock_bh(&sh_chan->desc_lock); spin_lock_bh(&sh_chan->desc_lock);
......
...@@ -527,11 +527,7 @@ static enum dma_status td_tx_status(struct dma_chan *chan, dma_cookie_t cookie, ...@@ -527,11 +527,7 @@ static enum dma_status td_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
ret = dma_async_is_complete(cookie, last_complete, last_used); ret = dma_async_is_complete(cookie, last_complete, last_used);
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
dev_dbg(chan2dev(chan), dev_dbg(chan2dev(chan),
"%s: exit, ret: %d, last_complete: %d, last_used: %d\n", "%s: exit, ret: %d, last_complete: %d, last_used: %d\n",
......
...@@ -990,11 +990,7 @@ txx9dmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie, ...@@ -990,11 +990,7 @@ txx9dmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie,
ret = dma_async_is_complete(cookie, last_complete, last_used); ret = dma_async_is_complete(cookie, last_complete, last_used);
} }
if (txstate) { dma_set_tx_state(txstate, last_complete, last_used, 0);
txstate->last = last_complete;
txstate->used = last_used;
txstate->residue = 0;
}
return ret; return ret;
} }
......
...@@ -628,6 +628,16 @@ static inline enum dma_status dma_async_is_complete(dma_cookie_t cookie, ...@@ -628,6 +628,16 @@ static inline enum dma_status dma_async_is_complete(dma_cookie_t cookie,
return DMA_IN_PROGRESS; return DMA_IN_PROGRESS;
} }
static inline void
dma_set_tx_state(struct dma_tx_state *st, dma_cookie_t last, dma_cookie_t used, u32 residue)
{
if (st) {
st->last = last;
st->used = used;
st->residue = residue;
}
}
enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie); enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie);
#ifdef CONFIG_DMA_ENGINE #ifdef CONFIG_DMA_ENGINE
enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx); enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册