Blame view

drivers/dma/dmaengine.h 2.23 KB
d2ebfb335   Russell King - ARM Linux   dmaengine: add pr...
1
2
3
4
5
6
  /*
   * The contents of this file are private to DMA engine drivers, and is not
   * part of the API to be used by DMA engine users.
   */
  #ifndef DMAENGINE_H
  #define DMAENGINE_H
f7fbce07c   Russell King - ARM Linux   dmaengine: provid...
7
  #include <linux/bug.h>
d2ebfb335   Russell King - ARM Linux   dmaengine: add pr...
8
  #include <linux/dmaengine.h>
884485e1f   Russell King - ARM Linux   dmaengine: consol...
9
  /**
d3ee98cdc   Russell King - ARM Linux   dmaengine: consol...
10
11
12
13
14
15
16
17
18
19
   * dma_cookie_init - initialize the cookies for a DMA channel
   * @chan: dma channel to initialize
   */
  static inline void dma_cookie_init(struct dma_chan *chan)
  {
  	chan->cookie = DMA_MIN_COOKIE;
  	chan->completed_cookie = DMA_MIN_COOKIE;
  }
  
  /**
884485e1f   Russell King - ARM Linux   dmaengine: consol...
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
   * dma_cookie_assign - assign a DMA engine cookie to the descriptor
   * @tx: descriptor needing cookie
   *
   * Assign a unique non-zero per-channel cookie to the descriptor.
   * Note: caller is expected to hold a lock to prevent concurrency.
   */
  static inline dma_cookie_t dma_cookie_assign(struct dma_async_tx_descriptor *tx)
  {
  	struct dma_chan *chan = tx->chan;
  	dma_cookie_t cookie;
  
  	cookie = chan->cookie + 1;
  	if (cookie < DMA_MIN_COOKIE)
  		cookie = DMA_MIN_COOKIE;
  	tx->cookie = chan->cookie = cookie;
  
  	return cookie;
  }
f7fbce07c   Russell King - ARM Linux   dmaengine: provid...
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
  /**
   * dma_cookie_complete - complete a descriptor
   * @tx: descriptor to complete
   *
   * Mark this descriptor complete by updating the channels completed
   * cookie marker.  Zero the descriptors cookie to prevent accidental
   * repeated completions.
   *
   * Note: caller is expected to hold a lock to prevent concurrency.
   */
  static inline void dma_cookie_complete(struct dma_async_tx_descriptor *tx)
  {
  	BUG_ON(tx->cookie < DMA_MIN_COOKIE);
  	tx->chan->completed_cookie = tx->cookie;
  	tx->cookie = 0;
  }
96a2af41c   Russell King - ARM Linux   dmaengine: consol...
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  /**
   * dma_cookie_status - report cookie status
   * @chan: dma channel
   * @cookie: cookie we are interested in
   * @state: dma_tx_state structure to return last/used cookies
   *
   * Report the status of the cookie, filling in the state structure if
   * non-NULL.  No locking is required.
   */
  static inline enum dma_status dma_cookie_status(struct dma_chan *chan,
  	dma_cookie_t cookie, struct dma_tx_state *state)
  {
  	dma_cookie_t used, complete;
  
  	used = chan->cookie;
  	complete = chan->completed_cookie;
  	barrier();
  	if (state) {
  		state->last = complete;
  		state->used = used;
  		state->residue = 0;
  	}
  	return dma_async_is_complete(cookie, complete, used);
  }
  
  static inline void dma_set_residue(struct dma_tx_state *state, u32 residue)
  {
  	if (state)
  		state->residue = residue;
  }
d2ebfb335   Russell King - ARM Linux   dmaengine: add pr...
84
  #endif