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_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 */
  76