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_MEM_H 8*4882a593Smuzhiyun #define __LINUX_RKNPU_MEM_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/mm_types.h> 11*4882a593Smuzhiyun #include <linux/version.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* 14*4882a593Smuzhiyun * rknpu DMA buffer structure. 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * @flags: indicate memory type to allocated buffer and cache attribute. 17*4882a593Smuzhiyun * @size: size requested from user, in bytes and this size is aligned 18*4882a593Smuzhiyun * in page unit. 19*4882a593Smuzhiyun * @kv_addr: kernel virtual address to allocated memory region. 20*4882a593Smuzhiyun * @dma_addr: bus address(accessed by dma) to allocated memory region. 21*4882a593Smuzhiyun * - this address could be physical address without IOMMU and 22*4882a593Smuzhiyun * device address with IOMMU. 23*4882a593Smuzhiyun * @pages: Array of backing pages. 24*4882a593Smuzhiyun * @sgt: Imported sg_table. 25*4882a593Smuzhiyun * @dmabuf: buffer for this attachment. 26*4882a593Smuzhiyun * @owner: Is this memory internally allocated. 27*4882a593Smuzhiyun */ 28*4882a593Smuzhiyun struct rknpu_mem_object { 29*4882a593Smuzhiyun unsigned long flags; 30*4882a593Smuzhiyun unsigned long size; 31*4882a593Smuzhiyun void __iomem *kv_addr; 32*4882a593Smuzhiyun dma_addr_t dma_addr; 33*4882a593Smuzhiyun struct page **pages; 34*4882a593Smuzhiyun struct sg_table *sgt; 35*4882a593Smuzhiyun struct dma_buf *dmabuf; 36*4882a593Smuzhiyun struct list_head head; 37*4882a593Smuzhiyun unsigned int owner; 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun int rknpu_mem_create_ioctl(struct rknpu_device *rknpu_dev, unsigned long data, 41*4882a593Smuzhiyun struct file *file); 42*4882a593Smuzhiyun int rknpu_mem_destroy_ioctl(struct rknpu_device *rknpu_dev, unsigned long data, 43*4882a593Smuzhiyun struct file *file); 44*4882a593Smuzhiyun int rknpu_mem_sync_ioctl(struct rknpu_device *rknpu_dev, unsigned long data); 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #endif 47