at v2.6.29 106 lines 3.0 kB view raw
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/* 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 24extern void 25swiotlb_init(void); 26 27extern void *swiotlb_alloc_boot(size_t bytes, unsigned long nslabs); 28extern void *swiotlb_alloc(unsigned order, unsigned long nslabs); 29 30extern dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, 31 phys_addr_t address); 32extern phys_addr_t swiotlb_bus_to_phys(dma_addr_t address); 33 34extern int swiotlb_arch_range_needs_mapping(void *ptr, size_t size); 35 36extern void 37*swiotlb_alloc_coherent(struct device *hwdev, size_t size, 38 dma_addr_t *dma_handle, gfp_t flags); 39 40extern void 41swiotlb_free_coherent(struct device *hwdev, size_t size, 42 void *vaddr, dma_addr_t dma_handle); 43 44extern dma_addr_t 45swiotlb_map_single(struct device *hwdev, void *ptr, size_t size, int dir); 46 47extern void 48swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr, 49 size_t size, int dir); 50 51extern dma_addr_t 52swiotlb_map_single_attrs(struct device *hwdev, void *ptr, size_t size, 53 int dir, struct dma_attrs *attrs); 54 55extern void 56swiotlb_unmap_single_attrs(struct device *hwdev, dma_addr_t dev_addr, 57 size_t size, int dir, struct dma_attrs *attrs); 58 59extern int 60swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nents, 61 int direction); 62 63extern void 64swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents, 65 int direction); 66 67extern int 68swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems, 69 int dir, struct dma_attrs *attrs); 70 71extern void 72swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl, 73 int nelems, int dir, struct dma_attrs *attrs); 74 75extern void 76swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr, 77 size_t size, int dir); 78 79extern void 80swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg, 81 int nelems, int dir); 82 83extern void 84swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr, 85 size_t size, int dir); 86 87extern void 88swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg, 89 int nelems, int dir); 90 91extern void 92swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr, 93 unsigned long offset, size_t size, int dir); 94 95extern void 96swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr, 97 unsigned long offset, size_t size, 98 int dir); 99 100extern int 101swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr); 102 103extern int 104swiotlb_dma_supported(struct device *hwdev, u64 mask); 105 106#endif /* __LINUX_SWIOTLB_H */