root/include/linux/swiotlb.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. is_swiotlb_buffer
  2. is_swiotlb_buffer
  3. swiotlb_map
  4. swiotlb_exit
  5. swiotlb_max_segment
  6. swiotlb_max_mapping_size
  7. is_swiotlb_active

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef __LINUX_SWIOTLB_H
   3 #define __LINUX_SWIOTLB_H
   4 
   5 #include <linux/dma-direction.h>
   6 #include <linux/init.h>
   7 #include <linux/types.h>
   8 
   9 struct device;
  10 struct page;
  11 struct scatterlist;
  12 
  13 enum swiotlb_force {
  14         SWIOTLB_NORMAL,         /* Default - depending on HW DMA mask etc. */
  15         SWIOTLB_FORCE,          /* swiotlb=force */
  16         SWIOTLB_NO_FORCE,       /* swiotlb=noforce */
  17 };
  18 
  19 /*
  20  * Maximum allowable number of contiguous slabs to map,
  21  * must be a power of 2.  What is the appropriate value ?
  22  * The complexity of {map,unmap}_single is linearly dependent on this value.
  23  */
  24 #define IO_TLB_SEGSIZE  128
  25 
  26 /*
  27  * log of the size of each IO TLB slab.  The number of slabs is command line
  28  * controllable.
  29  */
  30 #define IO_TLB_SHIFT 11
  31 
  32 extern void swiotlb_init(int verbose);
  33 int swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose);
  34 extern unsigned long swiotlb_nr_tbl(void);
  35 unsigned long swiotlb_size_or_default(void);
  36 extern int swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs);
  37 extern void __init swiotlb_update_mem_attributes(void);
  38 
  39 /*
  40  * Enumeration for sync targets
  41  */
  42 enum dma_sync_target {
  43         SYNC_FOR_CPU = 0,
  44         SYNC_FOR_DEVICE = 1,
  45 };
  46 
  47 extern phys_addr_t swiotlb_tbl_map_single(struct device *hwdev,
  48                                           dma_addr_t tbl_dma_addr,
  49                                           phys_addr_t phys,
  50                                           size_t mapping_size,
  51                                           size_t alloc_size,
  52                                           enum dma_data_direction dir,
  53                                           unsigned long attrs);
  54 
  55 extern void swiotlb_tbl_unmap_single(struct device *hwdev,
  56                                      phys_addr_t tlb_addr,
  57                                      size_t mapping_size,
  58                                      size_t alloc_size,
  59                                      enum dma_data_direction dir,
  60                                      unsigned long attrs);
  61 
  62 extern void swiotlb_tbl_sync_single(struct device *hwdev,
  63                                     phys_addr_t tlb_addr,
  64                                     size_t size, enum dma_data_direction dir,
  65                                     enum dma_sync_target target);
  66 
  67 #ifdef CONFIG_SWIOTLB
  68 extern enum swiotlb_force swiotlb_force;
  69 extern phys_addr_t io_tlb_start, io_tlb_end;
  70 
  71 static inline bool is_swiotlb_buffer(phys_addr_t paddr)
  72 {
  73         return paddr >= io_tlb_start && paddr < io_tlb_end;
  74 }
  75 
  76 bool swiotlb_map(struct device *dev, phys_addr_t *phys, dma_addr_t *dma_addr,
  77                 size_t size, enum dma_data_direction dir, unsigned long attrs);
  78 void __init swiotlb_exit(void);
  79 unsigned int swiotlb_max_segment(void);
  80 size_t swiotlb_max_mapping_size(struct device *dev);
  81 bool is_swiotlb_active(void);
  82 #else
  83 #define swiotlb_force SWIOTLB_NO_FORCE
  84 static inline bool is_swiotlb_buffer(phys_addr_t paddr)
  85 {
  86         return false;
  87 }
  88 static inline bool swiotlb_map(struct device *dev, phys_addr_t *phys,
  89                 dma_addr_t *dma_addr, size_t size, enum dma_data_direction dir,
  90                 unsigned long attrs)
  91 {
  92         return false;
  93 }
  94 static inline void swiotlb_exit(void)
  95 {
  96 }
  97 static inline unsigned int swiotlb_max_segment(void)
  98 {
  99         return 0;
 100 }
 101 static inline size_t swiotlb_max_mapping_size(struct device *dev)
 102 {
 103         return SIZE_MAX;
 104 }
 105 
 106 static inline bool is_swiotlb_active(void)
 107 {
 108         return false;
 109 }
 110 #endif /* CONFIG_SWIOTLB */
 111 
 112 extern void swiotlb_print_info(void);
 113 extern void swiotlb_set_max_segment(unsigned int);
 114 
 115 #endif /* __LINUX_SWIOTLB_H */

/* [<][>][^][v][top][bottom][index][help] */