linux/include/linux/dma-attrs.h
<<
>>
Prefs
   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_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 */
  30struct 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
  39static 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 */
  50static 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 */
  63static 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#else /* !CONFIG_HAVE_DMA_ATTRS */
  71static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
  72{
  73}
  74
  75static 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 */
  81