xref: /openbmc/linux/arch/arm/include/asm/dma-iommu.h (revision a3ea9fbc)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
24ce63fcdSMarek Szyprowski #ifndef ASMARM_DMA_IOMMU_H
34ce63fcdSMarek Szyprowski #define ASMARM_DMA_IOMMU_H
44ce63fcdSMarek Szyprowski 
54ce63fcdSMarek Szyprowski #ifdef __KERNEL__
64ce63fcdSMarek Szyprowski 
74ce63fcdSMarek Szyprowski #include <linux/mm_types.h>
84ce63fcdSMarek Szyprowski #include <linux/scatterlist.h>
93e3a1823SLaurent Pinchart #include <linux/kref.h>
104ce63fcdSMarek Szyprowski 
114ce63fcdSMarek Szyprowski struct dma_iommu_mapping {
124ce63fcdSMarek Szyprowski 	/* iommu specific data */
134ce63fcdSMarek Szyprowski 	struct iommu_domain	*domain;
144ce63fcdSMarek Szyprowski 
154d852ef8SAndreas Herrmann 	unsigned long		**bitmaps;	/* array of bitmaps */
164d852ef8SAndreas Herrmann 	unsigned int		nr_bitmaps;	/* nr of elements in array */
174d852ef8SAndreas Herrmann 	unsigned int		extensions;
184d852ef8SAndreas Herrmann 	size_t			bitmap_size;	/* size of a single bitmap */
194d852ef8SAndreas Herrmann 	size_t			bits;		/* per bitmap */
204ce63fcdSMarek Szyprowski 	dma_addr_t		base;
214ce63fcdSMarek Szyprowski 
224ce63fcdSMarek Szyprowski 	spinlock_t		lock;
234ce63fcdSMarek Szyprowski 	struct kref		kref;
244ce63fcdSMarek Szyprowski };
254ce63fcdSMarek Szyprowski 
264ce63fcdSMarek Szyprowski struct dma_iommu_mapping *
27*a3ea9fbcSGreg Kroah-Hartman arm_iommu_create_mapping(const struct bus_type *bus, dma_addr_t base, u64 size);
284ce63fcdSMarek Szyprowski 
294ce63fcdSMarek Szyprowski void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping);
304ce63fcdSMarek Szyprowski 
314ce63fcdSMarek Szyprowski int arm_iommu_attach_device(struct device *dev,
324ce63fcdSMarek Szyprowski 					struct dma_iommu_mapping *mapping);
336fe36758SHiroshi Doyu void arm_iommu_detach_device(struct device *dev);
344ce63fcdSMarek Szyprowski 
354ce63fcdSMarek Szyprowski #endif /* __KERNEL__ */
364ce63fcdSMarek Szyprowski #endif
37