Rev 6936 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6514 | serge | 1 | #ifndef _DMA_ATTR_H |
2 | #define _DMA_ATTR_H |
||
3 | |||
4 | #include |
||
5 | #include |
||
6 | #include |
||
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, |
||
7143 | serge | 21 | DMA_ATTR_ALLOC_SINGLE_PAGES, |
6514 | serge | 22 | DMA_ATTR_MAX, |
23 | }; |
||
24 | |||
25 | #define __DMA_ATTRS_LONGS BITS_TO_LONGS(DMA_ATTR_MAX) |
||
26 | |||
27 | /** |
||
28 | * struct dma_attrs - an opaque container for DMA attributes |
||
29 | * @flags - bitmask representing a collection of enum dma_attr |
||
30 | */ |
||
31 | struct dma_attrs { |
||
32 | unsigned long flags[__DMA_ATTRS_LONGS]; |
||
33 | }; |
||
34 | |||
35 | #define DEFINE_DMA_ATTRS(x) \ |
||
36 | struct dma_attrs x = { \ |
||
37 | .flags = { [0 ... __DMA_ATTRS_LONGS-1] = 0 }, \ |
||
38 | } |
||
39 | |||
40 | static inline void init_dma_attrs(struct dma_attrs *attrs) |
||
41 | { |
||
42 | bitmap_zero(attrs->flags, __DMA_ATTRS_LONGS); |
||
43 | } |
||
44 | |||
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 | if (attrs == NULL) |
||
66 | return 0; |
||
67 | BUG_ON(attr >= DMA_ATTR_MAX); |
||
68 | return test_bit(attr, attrs->flags); |
||
69 | } |
||
70 | |||
71 | #endif /* _DMA_ATTR_H */ |