xref: /linux-6.15/include/linux/swiotlb.h (revision 8c5df16b)
11648993fSJoerg Roedel #ifndef __LINUX_SWIOTLB_H
21648993fSJoerg Roedel #define __LINUX_SWIOTLB_H
31648993fSJoerg Roedel 
41648993fSJoerg Roedel #include <linux/types.h>
51648993fSJoerg Roedel 
61648993fSJoerg Roedel struct device;
71648993fSJoerg Roedel struct dma_attrs;
81648993fSJoerg Roedel struct scatterlist;
91648993fSJoerg Roedel 
101648993fSJoerg Roedel extern void
111648993fSJoerg Roedel swiotlb_init(void);
121648993fSJoerg Roedel 
13*8c5df16bSJeremy Fitzhardinge extern void *swiotlb_alloc_boot(size_t bytes, unsigned long nslabs);
14*8c5df16bSJeremy Fitzhardinge extern void *swiotlb_alloc(unsigned order, unsigned long nslabs);
15*8c5df16bSJeremy Fitzhardinge 
161648993fSJoerg Roedel extern void
171648993fSJoerg Roedel *swiotlb_alloc_coherent(struct device *hwdev, size_t size,
181648993fSJoerg Roedel 			dma_addr_t *dma_handle, gfp_t flags);
191648993fSJoerg Roedel 
201648993fSJoerg Roedel extern void
211648993fSJoerg Roedel swiotlb_free_coherent(struct device *hwdev, size_t size,
221648993fSJoerg Roedel 		      void *vaddr, dma_addr_t dma_handle);
231648993fSJoerg Roedel 
241648993fSJoerg Roedel extern dma_addr_t
251648993fSJoerg Roedel swiotlb_map_single(struct device *hwdev, void *ptr, size_t size, int dir);
261648993fSJoerg Roedel 
271648993fSJoerg Roedel extern void
281648993fSJoerg Roedel swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr,
291648993fSJoerg Roedel 		     size_t size, int dir);
301648993fSJoerg Roedel 
311648993fSJoerg Roedel extern dma_addr_t
321648993fSJoerg Roedel swiotlb_map_single_attrs(struct device *hwdev, void *ptr, size_t size,
331648993fSJoerg Roedel 			 int dir, struct dma_attrs *attrs);
341648993fSJoerg Roedel 
351648993fSJoerg Roedel extern void
361648993fSJoerg Roedel swiotlb_unmap_single_attrs(struct device *hwdev, dma_addr_t dev_addr,
371648993fSJoerg Roedel 			   size_t size, int dir, struct dma_attrs *attrs);
381648993fSJoerg Roedel 
391648993fSJoerg Roedel extern int
401648993fSJoerg Roedel swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg, int nents,
411648993fSJoerg Roedel 	       int direction);
421648993fSJoerg Roedel 
431648993fSJoerg Roedel extern void
441648993fSJoerg Roedel swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
451648993fSJoerg Roedel 		 int direction);
461648993fSJoerg Roedel 
471648993fSJoerg Roedel extern int
481648993fSJoerg Roedel swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems,
491648993fSJoerg Roedel 		     int dir, struct dma_attrs *attrs);
501648993fSJoerg Roedel 
511648993fSJoerg Roedel extern void
521648993fSJoerg Roedel swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl,
531648993fSJoerg Roedel 		       int nelems, int dir, struct dma_attrs *attrs);
541648993fSJoerg Roedel 
551648993fSJoerg Roedel extern void
561648993fSJoerg Roedel swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
571648993fSJoerg Roedel 			    size_t size, int dir);
581648993fSJoerg Roedel 
591648993fSJoerg Roedel extern void
601648993fSJoerg Roedel swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
611648993fSJoerg Roedel 			int nelems, int dir);
621648993fSJoerg Roedel 
631648993fSJoerg Roedel extern void
641648993fSJoerg Roedel swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
651648993fSJoerg Roedel 			       size_t size, int dir);
661648993fSJoerg Roedel 
671648993fSJoerg Roedel extern void
681648993fSJoerg Roedel swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
691648993fSJoerg Roedel 			   int nelems, int dir);
701648993fSJoerg Roedel 
711648993fSJoerg Roedel extern void
721648993fSJoerg Roedel swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
731648993fSJoerg Roedel 				  unsigned long offset, size_t size, int dir);
741648993fSJoerg Roedel 
751648993fSJoerg Roedel extern void
761648993fSJoerg Roedel swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr,
771648993fSJoerg Roedel 				     unsigned long offset, size_t size,
781648993fSJoerg Roedel 				     int dir);
791648993fSJoerg Roedel 
801648993fSJoerg Roedel extern int
811648993fSJoerg Roedel swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
821648993fSJoerg Roedel 
831648993fSJoerg Roedel extern int
841648993fSJoerg Roedel swiotlb_dma_supported(struct device *hwdev, u64 mask);
851648993fSJoerg Roedel 
861648993fSJoerg Roedel #endif /* __LINUX_SWIOTLB_H */
87