xref: /OK3568_Linux_fs/kernel/drivers/video/rockchip/rga3/include/rga_mm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) Rockchip Electronics Co., Ltd.
4  *
5  * Author:
6  *  Cerf Yu <cerf.yu@rock-chips.com>
7  */
8 
9 #ifndef __LINUX_RKRGA_MM_H_
10 #define __LINUX_RKRGA_MM_H_
11 
12 #include "rga_drv.h"
13 
14 enum rga_mm_flag {
15 	/* It will identify whether the buffer is within 0 ~ 4G. */
16 	RGA_MEM_UNDER_4G		= 1 << 0,
17 	/* Logo enable IOMMU */
18 	RGA_MEM_NEED_USE_IOMMU		= 1 << 1,
19 	/* Flag this is a physical contiguous memory. */
20 	RGA_MEM_PHYSICAL_CONTIGUOUS	= 1 << 2,
21 	/* need force flush cache */
22 	RGA_MEM_FORCE_FLUSH_CACHE	= 1 << 3,
23 };
24 
25 struct rga_mm {
26 	struct mutex lock;
27 
28 	/*
29 	 * @memory_idr:
30 	 *
31 	 * Mapping of memory object handles to object pointers. Used by the GEM
32 	 * subsystem. Protected by @memory_lock.
33 	 */
34 	struct idr memory_idr;
35 
36 	/* the count of buffer in the cached_list */
37 	int buffer_count;
38 };
39 
rga_mm_is_invalid_dma_buffer(struct rga_dma_buffer * buffer)40 static inline bool rga_mm_is_invalid_dma_buffer(struct rga_dma_buffer *buffer)
41 {
42 	if (buffer == NULL)
43 		return true;
44 
45 	return buffer->scheduler == NULL ? true : false;
46 }
47 
48 struct rga_internal_buffer *rga_mm_lookup_handle(struct rga_mm *mm_session, uint32_t handle);
49 int rga_mm_lookup_flag(struct rga_mm *mm_session, uint64_t handle);
50 dma_addr_t rga_mm_lookup_iova(struct rga_internal_buffer *buffer);
51 struct sg_table *rga_mm_lookup_sgt(struct rga_internal_buffer *buffer);
52 
53 void rga_mm_dump_buffer(struct rga_internal_buffer *dump_buffer);
54 void rga_mm_dump_info(struct rga_mm *session);
55 
56 int rga_mm_map_job_info(struct rga_job *job);
57 void rga_mm_unmap_job_info(struct rga_job *job);
58 
59 uint32_t rga_mm_import_buffer(struct rga_external_buffer *external_buffer,
60 			      struct rga_session *session);
61 int rga_mm_release_buffer(uint32_t handle);
62 int rga_mm_session_release_buffer(struct rga_session *session);
63 
64 int rga_mm_init(struct rga_mm **session);
65 int rga_mm_remove(struct rga_mm **session);
66 
67 #endif
68