1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) Rockchip Electronics Co.Ltd 4*4882a593Smuzhiyun * Author: Felix Zeng <felix.zeng@rock-chips.com> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __LINUX_RKNPU_IOMMU_H 8*4882a593Smuzhiyun #define __LINUX_RKNPU_IOMMU_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/mutex.h> 11*4882a593Smuzhiyun #include <linux/seq_file.h> 12*4882a593Smuzhiyun #include <linux/iommu.h> 13*4882a593Smuzhiyun #include <linux/iova.h> 14*4882a593Smuzhiyun #include <linux/version.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE 17*4882a593Smuzhiyun #include <linux/dma-iommu.h> 18*4882a593Smuzhiyun #endif 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #include "rknpu_drv.h" 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun enum iommu_dma_cookie_type { 23*4882a593Smuzhiyun IOMMU_DMA_IOVA_COOKIE, 24*4882a593Smuzhiyun IOMMU_DMA_MSI_COOKIE, 25*4882a593Smuzhiyun }; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun struct rknpu_iommu_dma_cookie { 28*4882a593Smuzhiyun enum iommu_dma_cookie_type type; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* Full allocator for IOMMU_DMA_IOVA_COOKIE */ 31*4882a593Smuzhiyun struct iova_domain iovad; 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun dma_addr_t rknpu_iommu_dma_alloc_iova(struct iommu_domain *domain, size_t size, 35*4882a593Smuzhiyun u64 dma_limit, struct device *dev); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun void rknpu_iommu_dma_free_iova(struct rknpu_iommu_dma_cookie *cookie, 38*4882a593Smuzhiyun dma_addr_t iova, size_t size); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #endif 41