linux/include/linux/swiotlb.h
<<
>>
Prefs
   1#ifndef __LINUX_SWIOTLB_H
   2#define __LINUX_SWIOTLB_H
   3
   4#include <linux/types.h>
   5
   6struct device;
   7struct dma_attrs;
   8struct scatterlist;
   9
  10/*
  11 * Maximum allowable number of contiguous slabs to map,
  12 * must be a power of 2.  What is the appropriate value ?
  13 * The complexity of {map,unmap}_single is linearly dependent on this value.
  14 */
  15#define IO_TLB_SEGSIZE  128
  16
  17/*
  18 * log of the size of each IO TLB slab.  The number of slabs is command line
  19 * controllable.
  20 */
  21#define IO_TLB_SHIFT 11
  22
  23extern void
  24swiotlb_init(void);
  25
  26extern void
  27*swiotlb_alloc_coherent(struct device *hwdev, size_t size,
  28                        dma_addr_t *dma_handle, gfp_t flags);
  29
  30extern void
  31swiotlb_free_coherent(struct device *hwdev, size_t size,
  32                      void *vaddr, dma_addr_t dma_handle);
  33
  34extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
  35                                   unsigned long offset, size_t size,
  36                                   enum dma_data_direction dir,
  37                                   struct dma_attrs *attrs);
  38extern void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr,
  39                               size_t size, enum dma_data_direction dir,
  40                               struct dma_attrs *attrs);
  41
  42extern int
  43swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nents,
  44               int direction);
  45
  46extern void
  47swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
  48                 int direction);
  49
  50extern int
  51swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems,
  52                     enum dma_data_direction dir, struct dma_attrs *attrs);
  53
  54extern void
  55swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
  56                       int nelems, enum dma_data_direction dir,
  57                       struct dma_attrs *attrs);
  58
  59extern void
  60swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
  61                            size_t size, enum dma_data_direction dir);
  62
  63extern void
  64swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
  65                        int nelems, enum dma_data_direction dir);
  66
  67extern void
  68swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
  69                               size_t size, enum dma_data_direction dir);
  70
  71extern void
  72swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
  73                           int nelems, enum dma_data_direction dir);
  74
  75extern void
  76swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
  77                                  unsigned long offset, size_t size,
  78                                  enum dma_data_direction dir);
  79
  80extern void
  81swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr,
  82                                     unsigned long offset, size_t size,
  83                                     enum dma_data_direction dir);
  84
  85extern int
  86swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
  87
  88extern int
  89swiotlb_dma_supported(struct device *hwdev, u64 mask);
  90
  91#endif /* __LINUX_SWIOTLB_H */
  92