18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef ASMARM_DMA_IOMMU_H 38c2ecf20Sopenharmony_ci#define ASMARM_DMA_IOMMU_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#ifdef __KERNEL__ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <linux/mm_types.h> 88c2ecf20Sopenharmony_ci#include <linux/scatterlist.h> 98c2ecf20Sopenharmony_ci#include <linux/kref.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistruct dma_iommu_mapping { 128c2ecf20Sopenharmony_ci /* iommu specific data */ 138c2ecf20Sopenharmony_ci struct iommu_domain *domain; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci unsigned long **bitmaps; /* array of bitmaps */ 168c2ecf20Sopenharmony_ci unsigned int nr_bitmaps; /* nr of elements in array */ 178c2ecf20Sopenharmony_ci unsigned int extensions; 188c2ecf20Sopenharmony_ci size_t bitmap_size; /* size of a single bitmap */ 198c2ecf20Sopenharmony_ci size_t bits; /* per bitmap */ 208c2ecf20Sopenharmony_ci dma_addr_t base; 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci spinlock_t lock; 238c2ecf20Sopenharmony_ci struct kref kref; 248c2ecf20Sopenharmony_ci}; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistruct dma_iommu_mapping * 278c2ecf20Sopenharmony_ciarm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, u64 size); 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_civoid arm_iommu_release_mapping(struct dma_iommu_mapping *mapping); 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ciint arm_iommu_attach_device(struct device *dev, 328c2ecf20Sopenharmony_ci struct dma_iommu_mapping *mapping); 338c2ecf20Sopenharmony_civoid arm_iommu_detach_device(struct device *dev); 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci#endif /* __KERNEL__ */ 368c2ecf20Sopenharmony_ci#endif 37