Blame view

include/linux/dma-attrs.h 1.72 KB
74bc7ceeb   Arthur Kepner   dma: add dma_*map...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  #ifndef _DMA_ATTR_H
  #define _DMA_ATTR_H
  
  #include <linux/bitmap.h>
  #include <linux/bitops.h>
  #include <linux/bug.h>
  
  /**
   * an enum dma_attr represents an attribute associated with a DMA
   * mapping. The semantics of each attribute should be defined in
   * Documentation/DMA-attributes.txt.
   */
  enum dma_attr {
  	DMA_ATTR_WRITE_BARRIER,
1ed6af734   Mark Nelson   powerpc/cell: Add...
15
  	DMA_ATTR_WEAK_ORDERING,
74bc7ceeb   Arthur Kepner   dma: add dma_*map...
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  	DMA_ATTR_MAX,
  };
  
  #define __DMA_ATTRS_LONGS BITS_TO_LONGS(DMA_ATTR_MAX)
  
  /**
   * struct dma_attrs - an opaque container for DMA attributes
   * @flags - bitmask representing a collection of enum dma_attr
   */
  struct dma_attrs {
  	unsigned long flags[__DMA_ATTRS_LONGS];
  };
  
  #define DEFINE_DMA_ATTRS(x) 					\
  	struct dma_attrs x = {					\
  		.flags = { [0 ... __DMA_ATTRS_LONGS-1] = 0 },	\
  	}
  
  static inline void init_dma_attrs(struct dma_attrs *attrs)
  {
  	bitmap_zero(attrs->flags, __DMA_ATTRS_LONGS);
  }
  
  #ifdef CONFIG_HAVE_DMA_ATTRS
  /**
   * dma_set_attr - set a specific attribute
   * @attr: attribute to set
   * @attrs: struct dma_attrs (may be NULL)
   */
  static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
  {
  	if (attrs == NULL)
  		return;
  	BUG_ON(attr >= DMA_ATTR_MAX);
  	__set_bit(attr, attrs->flags);
  }
  
  /**
   * dma_get_attr - check for a specific attribute
   * @attr: attribute to set
   * @attrs: struct dma_attrs (may be NULL)
   */
  static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs)
  {
  	if (attrs == NULL)
  		return 0;
  	BUG_ON(attr >= DMA_ATTR_MAX);
  	return test_bit(attr, attrs->flags);
  }
  #else /* !CONFIG_HAVE_DMA_ATTRS */
  static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
  {
  }
  
  static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs)
  {
  	return 0;
  }
  #endif /* CONFIG_HAVE_DMA_ATTRS */
  #endif /* _DMA_ATTR_H */