at v3.3 1.8 kB view raw
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 */ 13enum 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 */ 25struct 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 34static 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 */ 45static 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 */ 58static 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#else /* !CONFIG_HAVE_DMA_ATTRS */ 66static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs) 67{ 68} 69 70static 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 */