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