linux/include/linux/iommu-common.h
<<
>>
Prefs
   1#ifndef _LINUX_IOMMU_COMMON_H
   2#define _LINUX_IOMMU_COMMON_H
   3
   4#include <linux/spinlock_types.h>
   5#include <linux/device.h>
   6#include <asm/page.h>
   7
   8#define IOMMU_POOL_HASHBITS     4
   9#define IOMMU_NR_POOLS          (1 << IOMMU_POOL_HASHBITS)
  10#define IOMMU_ERROR_CODE        (~(unsigned long) 0)
  11
  12struct iommu_pool {
  13        unsigned long   start;
  14        unsigned long   end;
  15        unsigned long   hint;
  16        spinlock_t      lock;
  17};
  18
  19struct iommu_map_table {
  20        unsigned long           table_map_base;
  21        unsigned long           table_shift;
  22        unsigned long           nr_pools;
  23        void                    (*lazy_flush)(struct iommu_map_table *);
  24        unsigned long           poolsize;
  25        struct iommu_pool       pools[IOMMU_NR_POOLS];
  26        u32                     flags;
  27#define IOMMU_HAS_LARGE_POOL    0x00000001
  28#define IOMMU_NO_SPAN_BOUND     0x00000002
  29#define IOMMU_NEED_FLUSH        0x00000004
  30        struct iommu_pool       large_pool;
  31        unsigned long           *map;
  32};
  33
  34extern void iommu_tbl_pool_init(struct iommu_map_table *iommu,
  35                                unsigned long num_entries,
  36                                u32 table_shift,
  37                                void (*lazy_flush)(struct iommu_map_table *),
  38                                bool large_pool, u32 npools,
  39                                bool skip_span_boundary_check);
  40
  41extern unsigned long iommu_tbl_range_alloc(struct device *dev,
  42                                           struct iommu_map_table *iommu,
  43                                           unsigned long npages,
  44                                           unsigned long *handle,
  45                                           unsigned long mask,
  46                                           unsigned int align_order);
  47
  48extern void iommu_tbl_range_free(struct iommu_map_table *iommu,
  49                                 u64 dma_addr, unsigned long npages,
  50                                 unsigned long entry);
  51
  52#endif
  53