xref: /linux-6.15/include/linux/swiotlb.h (revision 1648993f)
1*1648993fSJoerg Roedel #ifndef __LINUX_SWIOTLB_H
2*1648993fSJoerg Roedel #define __LINUX_SWIOTLB_H
3*1648993fSJoerg Roedel 
4*1648993fSJoerg Roedel #include <linux/types.h>
5*1648993fSJoerg Roedel 
6*1648993fSJoerg Roedel struct device;
7*1648993fSJoerg Roedel struct dma_attrs;
8*1648993fSJoerg Roedel struct scatterlist;
9*1648993fSJoerg Roedel 
10*1648993fSJoerg Roedel extern void
11*1648993fSJoerg Roedel swiotlb_init(void);
12*1648993fSJoerg Roedel 
13*1648993fSJoerg Roedel extern void
14*1648993fSJoerg Roedel *swiotlb_alloc_coherent(struct device *hwdev, size_t size,
15*1648993fSJoerg Roedel 			dma_addr_t *dma_handle, gfp_t flags);
16*1648993fSJoerg Roedel 
17*1648993fSJoerg Roedel extern void
18*1648993fSJoerg Roedel swiotlb_free_coherent(struct device *hwdev, size_t size,
19*1648993fSJoerg Roedel 		      void *vaddr, dma_addr_t dma_handle);
20*1648993fSJoerg Roedel 
21*1648993fSJoerg Roedel extern dma_addr_t
22*1648993fSJoerg Roedel swiotlb_map_single(struct device *hwdev, void *ptr, size_t size, int dir);
23*1648993fSJoerg Roedel 
24*1648993fSJoerg Roedel extern void
25*1648993fSJoerg Roedel swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr,
26*1648993fSJoerg Roedel 		     size_t size, int dir);
27*1648993fSJoerg Roedel 
28*1648993fSJoerg Roedel extern dma_addr_t
29*1648993fSJoerg Roedel swiotlb_map_single_attrs(struct device *hwdev, void *ptr, size_t size,
30*1648993fSJoerg Roedel 			 int dir, struct dma_attrs *attrs);
31*1648993fSJoerg Roedel 
32*1648993fSJoerg Roedel extern void
33*1648993fSJoerg Roedel swiotlb_unmap_single_attrs(struct device *hwdev, dma_addr_t dev_addr,
34*1648993fSJoerg Roedel 			   size_t size, int dir, struct dma_attrs *attrs);
35*1648993fSJoerg Roedel 
36*1648993fSJoerg Roedel extern int
37*1648993fSJoerg Roedel swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nents,
38*1648993fSJoerg Roedel 	       int direction);
39*1648993fSJoerg Roedel 
40*1648993fSJoerg Roedel extern void
41*1648993fSJoerg Roedel swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
42*1648993fSJoerg Roedel 		 int direction);
43*1648993fSJoerg Roedel 
44*1648993fSJoerg Roedel extern int
45*1648993fSJoerg Roedel swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems,
46*1648993fSJoerg Roedel 		     int dir, struct dma_attrs *attrs);
47*1648993fSJoerg Roedel 
48*1648993fSJoerg Roedel extern void
49*1648993fSJoerg Roedel swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
50*1648993fSJoerg Roedel 		       int nelems, int dir, struct dma_attrs *attrs);
51*1648993fSJoerg Roedel 
52*1648993fSJoerg Roedel extern void
53*1648993fSJoerg Roedel swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
54*1648993fSJoerg Roedel 			    size_t size, int dir);
55*1648993fSJoerg Roedel 
56*1648993fSJoerg Roedel extern void
57*1648993fSJoerg Roedel swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
58*1648993fSJoerg Roedel 			int nelems, int dir);
59*1648993fSJoerg Roedel 
60*1648993fSJoerg Roedel extern void
61*1648993fSJoerg Roedel swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
62*1648993fSJoerg Roedel 			       size_t size, int dir);
63*1648993fSJoerg Roedel 
64*1648993fSJoerg Roedel extern void
65*1648993fSJoerg Roedel swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
66*1648993fSJoerg Roedel 			   int nelems, int dir);
67*1648993fSJoerg Roedel 
68*1648993fSJoerg Roedel extern void
69*1648993fSJoerg Roedel swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
70*1648993fSJoerg Roedel 				  unsigned long offset, size_t size, int dir);
71*1648993fSJoerg Roedel 
72*1648993fSJoerg Roedel extern void
73*1648993fSJoerg Roedel swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr,
74*1648993fSJoerg Roedel 				     unsigned long offset, size_t size,
75*1648993fSJoerg Roedel 				     int dir);
76*1648993fSJoerg Roedel 
77*1648993fSJoerg Roedel extern int
78*1648993fSJoerg Roedel swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
79*1648993fSJoerg Roedel 
80*1648993fSJoerg Roedel extern int
81*1648993fSJoerg Roedel swiotlb_dma_supported(struct device *hwdev, u64 mask);
82*1648993fSJoerg Roedel 
83*1648993fSJoerg Roedel #endif /* __LINUX_SWIOTLB_H */
84