2 * The contents of this file are private to DMA engine drivers, and is not
3 * part of the API to be used by DMA engine users.
9 #include <linux/dmaengine.h>
12 * dma_cookie_assign - assign a DMA engine cookie to the descriptor
13 * @tx: descriptor needing cookie
15 * Assign a unique non-zero per-channel cookie to the descriptor.
16 * Note: caller is expected to hold a lock to prevent concurrency.
18 static inline dma_cookie_t dma_cookie_assign(struct dma_async_tx_descriptor *tx)
20 struct dma_chan *chan = tx->chan;
23 cookie = chan->cookie + 1;
24 if (cookie < DMA_MIN_COOKIE)
25 cookie = DMA_MIN_COOKIE;
26 tx->cookie = chan->cookie = cookie;
32 * dma_cookie_complete - complete a descriptor
33 * @tx: descriptor to complete
35 * Mark this descriptor complete by updating the channels completed
36 * cookie marker. Zero the descriptors cookie to prevent accidental
37 * repeated completions.
39 * Note: caller is expected to hold a lock to prevent concurrency.
41 static inline void dma_cookie_complete(struct dma_async_tx_descriptor *tx)
43 BUG_ON(tx->cookie < DMA_MIN_COOKIE);
44 tx->chan->completed_cookie = tx->cookie;
49 * dma_cookie_status - report cookie status
51 * @cookie: cookie we are interested in
52 * @state: dma_tx_state structure to return last/used cookies
54 * Report the status of the cookie, filling in the state structure if
55 * non-NULL. No locking is required.
57 static inline enum dma_status dma_cookie_status(struct dma_chan *chan,
58 dma_cookie_t cookie, struct dma_tx_state *state)
60 dma_cookie_t used, complete;
63 complete = chan->completed_cookie;
66 state->last = complete;
70 return dma_async_is_complete(cookie, complete, used);
73 static inline void dma_set_residue(struct dma_tx_state *state, u32 residue)
76 state->residue = residue;