xref: /openbmc/linux/arch/arm/include/asm/dma-iommu.h (revision 4d852ef8)
14ce63fcdSMarek Szyprowski #ifndef ASMARM_DMA_IOMMU_H
24ce63fcdSMarek Szyprowski #define ASMARM_DMA_IOMMU_H
34ce63fcdSMarek Szyprowski 
44ce63fcdSMarek Szyprowski #ifdef __KERNEL__
54ce63fcdSMarek Szyprowski 
64ce63fcdSMarek Szyprowski #include <linux/mm_types.h>
74ce63fcdSMarek Szyprowski #include <linux/scatterlist.h>
84ce63fcdSMarek Szyprowski #include <linux/dma-debug.h>
94ce63fcdSMarek Szyprowski #include <linux/kmemcheck.h>
103e3a1823SLaurent Pinchart #include <linux/kref.h>
114ce63fcdSMarek Szyprowski 
124ce63fcdSMarek Szyprowski struct dma_iommu_mapping {
134ce63fcdSMarek Szyprowski 	/* iommu specific data */
144ce63fcdSMarek Szyprowski 	struct iommu_domain	*domain;
154ce63fcdSMarek Szyprowski 
164d852ef8SAndreas Herrmann 	unsigned long		**bitmaps;	/* array of bitmaps */
174d852ef8SAndreas Herrmann 	unsigned int		nr_bitmaps;	/* nr of elements in array */
184d852ef8SAndreas Herrmann 	unsigned int		extensions;
194d852ef8SAndreas Herrmann 	size_t			bitmap_size;	/* size of a single bitmap */
204d852ef8SAndreas Herrmann 	size_t			bits;		/* per bitmap */
214d852ef8SAndreas Herrmann 	unsigned int		size;		/* per bitmap */
224ce63fcdSMarek Szyprowski 	unsigned int		order;
234ce63fcdSMarek Szyprowski 	dma_addr_t		base;
244ce63fcdSMarek Szyprowski 
254ce63fcdSMarek Szyprowski 	spinlock_t		lock;
264ce63fcdSMarek Szyprowski 	struct kref		kref;
274ce63fcdSMarek Szyprowski };
284ce63fcdSMarek Szyprowski 
294ce63fcdSMarek Szyprowski struct dma_iommu_mapping *
304ce63fcdSMarek Szyprowski arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, size_t size,
314ce63fcdSMarek Szyprowski 			 int order);
324ce63fcdSMarek Szyprowski 
334ce63fcdSMarek Szyprowski void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping);
344ce63fcdSMarek Szyprowski 
354ce63fcdSMarek Szyprowski int arm_iommu_attach_device(struct device *dev,
364ce63fcdSMarek Szyprowski 					struct dma_iommu_mapping *mapping);
376fe36758SHiroshi Doyu void arm_iommu_detach_device(struct device *dev);
384ce63fcdSMarek Szyprowski 
394ce63fcdSMarek Szyprowski #endif /* __KERNEL__ */
404ce63fcdSMarek Szyprowski #endif
41