1 #ifndef __LINUX_SWIOTLB_H 2 #define __LINUX_SWIOTLB_H 3 4 #include <linux/types.h> 5 6 struct device; 7 struct dma_attrs; 8 struct 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 /* 19 * log of the size of each IO TLB slab. The number of slabs is command line 20 * controllable. 21 */ 22 #define IO_TLB_SHIFT 11 23 24 extern void 25 swiotlb_init(void); 26 27 extern void *swiotlb_alloc_boot(size_t bytes, unsigned long nslabs); 28 extern void *swiotlb_alloc(unsigned order, unsigned long nslabs); 29 30 extern dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, 31 phys_addr_t address); 32 extern phys_addr_t swiotlb_bus_to_phys(dma_addr_t address); 33 34 extern int swiotlb_arch_range_needs_mapping(void *ptr, size_t size); 35 36 extern void 37 *swiotlb_alloc_coherent(struct device *hwdev, size_t size, 38 dma_addr_t *dma_handle, gfp_t flags); 39 40 extern void 41 swiotlb_free_coherent(struct device *hwdev, size_t size, 42 void *vaddr, dma_addr_t dma_handle); 43 44 extern dma_addr_t 45 swiotlb_map_single(struct device *hwdev, void *ptr, size_t size, int dir); 46 47 extern void 48 swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr, 49 size_t size, int dir); 50 51 extern dma_addr_t 52 swiotlb_map_single_attrs(struct device *hwdev, void *ptr, size_t size, 53 int dir, struct dma_attrs *attrs); 54 55 extern void 56 swiotlb_unmap_single_attrs(struct device *hwdev, dma_addr_t dev_addr, 57 size_t size, int dir, struct dma_attrs *attrs); 58 59 extern int 60 swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nents, 61 int direction); 62 63 extern void 64 swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents, 65 int direction); 66 67 extern int 68 swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems, 69 int dir, struct dma_attrs *attrs); 70 71 extern void 72 swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl, 73 int nelems, int dir, struct dma_attrs *attrs); 74 75 extern void 76 swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr, 77 size_t size, int dir); 78 79 extern void 80 swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg, 81 int nelems, int dir); 82 83 extern void 84 swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr, 85 size_t size, int dir); 86 87 extern void 88 swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg, 89 int nelems, int dir); 90 91 extern void 92 swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr, 93 unsigned long offset, size_t size, int dir); 94 95 extern void 96 swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr, 97 unsigned long offset, size_t size, 98 int dir); 99 100 extern int 101 swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr); 102 103 extern int 104 swiotlb_dma_supported(struct device *hwdev, u64 mask); 105 106 #endif /* __LINUX_SWIOTLB_H */ 107