1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) Rockchip Electronics Co.Ltd 4 * Author: Felix Zeng <felix.zeng@rock-chips.com> 5 */ 6 7 #ifndef __LINUX_RKNPU_MM_H 8 #define __LINUX_RKNPU_MM_H 9 10 #include <linux/mutex.h> 11 #include <linux/seq_file.h> 12 #include <linux/iommu.h> 13 #include <linux/iova.h> 14 15 #include "rknpu_drv.h" 16 17 struct rknpu_mm { 18 void *bitmap; 19 struct mutex lock; 20 unsigned int chunk_size; 21 unsigned int total_chunks; 22 unsigned int free_chunks; 23 }; 24 25 struct rknpu_mm_obj { 26 uint32_t range_start; 27 uint32_t range_end; 28 }; 29 30 int rknpu_mm_create(unsigned int mem_size, unsigned int chunk_size, 31 struct rknpu_mm **mm); 32 33 void rknpu_mm_destroy(struct rknpu_mm *mm); 34 35 int rknpu_mm_alloc(struct rknpu_mm *mm, unsigned int size, 36 struct rknpu_mm_obj **mm_obj); 37 38 int rknpu_mm_free(struct rknpu_mm *mm, struct rknpu_mm_obj *mm_obj); 39 40 int rknpu_mm_dump(struct seq_file *m, void *data); 41 42 #endif 43