Branch data 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_WRITE_COMBINE,
17 : : DMA_ATTR_NON_CONSISTENT,
18 : : DMA_ATTR_NO_KERNEL_MAPPING,
19 : : DMA_ATTR_SKIP_CPU_SYNC,
20 : : DMA_ATTR_FORCE_CONTIGUOUS,
21 : : DMA_ATTR_MAX,
22 : : };
23 : :
24 : : #define __DMA_ATTRS_LONGS BITS_TO_LONGS(DMA_ATTR_MAX)
25 : :
26 : : /**
27 : : * struct dma_attrs - an opaque container for DMA attributes
28 : : * @flags - bitmask representing a collection of enum dma_attr
29 : : */
30 : : struct dma_attrs {
31 : : unsigned long flags[__DMA_ATTRS_LONGS];
32 : : };
33 : :
34 : : #define DEFINE_DMA_ATTRS(x) \
35 : : struct dma_attrs x = { \
36 : : .flags = { [0 ... __DMA_ATTRS_LONGS-1] = 0 }, \
37 : : }
38 : :
39 : : static inline void init_dma_attrs(struct dma_attrs *attrs)
40 : : {
41 : : bitmap_zero(attrs->flags, __DMA_ATTRS_LONGS);
42 : : }
43 : :
44 : : #ifdef CONFIG_HAVE_DMA_ATTRS
45 : : /**
46 : : * dma_set_attr - set a specific attribute
47 : : * @attr: attribute to set
48 : : * @attrs: struct dma_attrs (may be NULL)
49 : : */
50 : : static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
51 : : {
52 : : if (attrs == NULL)
53 : : return;
54 : : BUG_ON(attr >= DMA_ATTR_MAX);
55 : : __set_bit(attr, attrs->flags);
56 : : }
57 : :
58 : : /**
59 : : * dma_get_attr - check for a specific attribute
60 : : * @attr: attribute to set
61 : : * @attrs: struct dma_attrs (may be NULL)
62 : : */
63 : : static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs)
64 : : {
65 [ # # ][ # # ]: 0 : if (attrs == NULL)
[ # # ][ # # ]
[ # # ]
66 : : return 0;
67 : : BUG_ON(attr >= DMA_ATTR_MAX);
68 : : return test_bit(attr, attrs->flags);
69 : : }
70 : : #else /* !CONFIG_HAVE_DMA_ATTRS */
71 : : static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
72 : : {
73 : : }
74 : :
75 : : static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs)
76 : : {
77 : : return 0;
78 : : }
79 : : #endif /* CONFIG_HAVE_DMA_ATTRS */
80 : : #endif /* _DMA_ATTR_H */
|