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_MAX,
  21};
  22
  23#define __DMA_ATTRS_LONGS BITS_TO_LONGS(DMA_ATTR_MAX)
  24
  25/**
  26 * struct dma_attrs - an opaque container for DMA attributes
  27 * @flags - bitmask representing a collection of enum dma_attr
  28 */
  29struct dma_attrs {
  30        unsigned long flags[__DMA_ATTRS_LONGS];
  31};
  32
  33#define DEFINE_DMA_ATTRS(x)                                     \
  34        struct dma_attrs x = {                                  \
  35                .flags = { [0 ... __DMA_ATTRS_LONGS-1] = 0 },   \
  36        }
  37
  38static inline void init_dma_attrs(struct dma_attrs *attrs)
  39{
  40        bitmap_zero(attrs->flags, __DMA_ATTRS_LONGS);
  41}
  42
  43#ifdef CONFIG_HAVE_DMA_ATTRS
  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#else /* !CONFIG_HAVE_DMA_ATTRS */
  70static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs)
  71{
  72}
  73
  74static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs)
  75{
  76        return 0;
  77}
  78#endif /* CONFIG_HAVE_DMA_ATTRS */
  79#endif /* _DMA_ATTR_H */
  80
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.