Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
dma-attrs.h
Go to the documentation of this file.
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 
13 enum dma_attr {
21 };
22 
23 #define __DMA_ATTRS_LONGS BITS_TO_LONGS(DMA_ATTR_MAX)
24 
29 struct dma_attrs {
30  unsigned long flags[__DMA_ATTRS_LONGS];
31 };
32 
33 #define DEFINE_DMA_ATTRS(x) \
34  struct dma_attrs x = { \
35  .flags = { [0 ... __DMA_ATTRS_LONGS-1] = 0 }, \
36  }
37 
38 static inline void init_dma_attrs(struct dma_attrs *attrs)
39 {
40  bitmap_zero(attrs->flags, __DMA_ATTRS_LONGS);
41 }
42 
43 #ifdef CONFIG_HAVE_DMA_ATTRS
44 
49 static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
50 {
51  if (attrs == NULL)
52  return;
53  BUG_ON(attr >= DMA_ATTR_MAX);
54  __set_bit(attr, attrs->flags);
55 }
56 
62 static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs)
63 {
64  if (attrs == NULL)
65  return 0;
66  BUG_ON(attr >= DMA_ATTR_MAX);
67  return test_bit(attr, attrs->flags);
68 }
69 #else /* !CONFIG_HAVE_DMA_ATTRS */
70 static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
71 {
72 }
73 
74 static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs)
75 {
76  return 0;
77 }
78 #endif /* CONFIG_HAVE_DMA_ATTRS */
79 #endif /* _DMA_ATTR_H */