~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/swiotlb.h

Version: ~ [ linux-5.3-rc5 ] ~ [ linux-5.2.9 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.67 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.139 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.189 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.189 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.72 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef __LINUX_SWIOTLB_H
  2 #define __LINUX_SWIOTLB_H
  3 
  4 #include <linux/dma-direction.h>
  5 #include <linux/init.h>
  6 #include <linux/types.h>
  7 
  8 struct device;
  9 struct page;
 10 struct scatterlist;
 11 
 12 enum swiotlb_force {
 13         SWIOTLB_NORMAL,         /* Default - depending on HW DMA mask etc. */
 14         SWIOTLB_FORCE,          /* swiotlb=force */
 15         SWIOTLB_NO_FORCE,       /* swiotlb=noforce */
 16 };
 17 
 18 extern enum swiotlb_force swiotlb_force;
 19 
 20 /*
 21  * Maximum allowable number of contiguous slabs to map,
 22  * must be a power of 2.  What is the appropriate value ?
 23  * The complexity of {map,unmap}_single is linearly dependent on this value.
 24  */
 25 #define IO_TLB_SEGSIZE  128
 26 
 27 /*
 28  * log of the size of each IO TLB slab.  The number of slabs is command line
 29  * controllable.
 30  */
 31 #define IO_TLB_SHIFT 11
 32 
 33 extern void swiotlb_init(int verbose);
 34 int swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose);
 35 extern unsigned long swiotlb_nr_tbl(void);
 36 unsigned long swiotlb_size_or_default(void);
 37 extern int swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs);
 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 /* define the last possible byte of physical address space as a mapping error */
 48 #define SWIOTLB_MAP_ERROR (~(phys_addr_t)0x0)
 49 
 50 extern phys_addr_t swiotlb_tbl_map_single(struct device *hwdev,
 51                                           dma_addr_t tbl_dma_addr,
 52                                           phys_addr_t phys, size_t size,
 53                                           enum dma_data_direction dir,
 54                                           unsigned long attrs);
 55 
 56 extern void swiotlb_tbl_unmap_single(struct device *hwdev,
 57                                      phys_addr_t tlb_addr,
 58                                      size_t size, enum dma_data_direction dir,
 59                                      unsigned long attrs);
 60 
 61 extern void swiotlb_tbl_sync_single(struct device *hwdev,
 62                                     phys_addr_t tlb_addr,
 63                                     size_t size, enum dma_data_direction dir,
 64                                     enum dma_sync_target target);
 65 
 66 /* Accessory functions. */
 67 extern void
 68 *swiotlb_alloc_coherent(struct device *hwdev, size_t size,
 69                         dma_addr_t *dma_handle, gfp_t flags);
 70 
 71 extern void
 72 swiotlb_free_coherent(struct device *hwdev, size_t size,
 73                       void *vaddr, dma_addr_t dma_handle);
 74 
 75 extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
 76                                    unsigned long offset, size_t size,
 77                                    enum dma_data_direction dir,
 78                                    unsigned long attrs);
 79 extern void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr,
 80                                size_t size, enum dma_data_direction dir,
 81                                unsigned long attrs);
 82 
 83 extern int
 84 swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems,
 85                      enum dma_data_direction dir,
 86                      unsigned long attrs);
 87 
 88 extern void
 89 swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
 90                        int nelems, enum dma_data_direction dir,
 91                        unsigned long attrs);
 92 
 93 extern void
 94 swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
 95                             size_t size, enum dma_data_direction dir);
 96 
 97 extern void
 98 swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
 99                         int nelems, enum dma_data_direction dir);
100 
101 extern void
102 swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
103                                size_t size, enum dma_data_direction dir);
104 
105 extern void
106 swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
107                            int nelems, enum dma_data_direction dir);
108 
109 extern int
110 swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
111 
112 extern int
113 swiotlb_dma_supported(struct device *hwdev, u64 mask);
114 
115 #ifdef CONFIG_SWIOTLB
116 extern void __init swiotlb_free(void);
117 unsigned int swiotlb_max_segment(void);
118 #else
119 static inline void swiotlb_free(void) { }
120 static inline unsigned int swiotlb_max_segment(void) { return 0; }
121 #endif
122 
123 extern void swiotlb_print_info(void);
124 extern int is_swiotlb_buffer(phys_addr_t paddr);
125 extern void swiotlb_set_max_segment(unsigned int);
126 
127 #endif /* __LINUX_SWIOTLB_H */
128 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp