xref: /OK3568_Linux_fs/kernel/drivers/rknpu/include/rknpu_mm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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