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