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/**
  45 * dma_set_attr - set a specific attribute
  46 * @attr: attribute to set
  47 * @attrs: struct dma_attrs (may be NULL)
  48 */
  49static 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
  57/**
  58 * dma_get_attr - check for a specific attribute
  59 * @attr: attribute to set
  60 * @attrs: struct dma_attrs (may be NULL)
  61 */
  62static 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
  70#endif /* _DMA_ATTR_H */
  71