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 memory_flag { 15 /* It will identify whether the buffer is within 0 ~ 4G. */ 16 RGA_MM_UNDER_4G = 1 << 0, 17 /* Logo enable IOMMU */ 18 RGA_MM_NEED_USE_IOMMU = 1 << 1, 19 }; 20 21 struct rga_mm { 22 struct mutex lock; 23 24 /* 25 * @memory_idr: 26 * 27 * Mapping of memory object handles to object pointers. Used by the GEM 28 * subsystem. Protected by @memory_lock. 29 */ 30 struct idr memory_idr; 31 32 /* the count of buffer in the cached_list */ 33 int buffer_count; 34 }; 35 36 struct rga_internal_buffer *rga_mm_lookup_handle(struct rga_mm *mm_session, uint32_t handle); 37 int rga_mm_lookup_flag(struct rga_mm *mm_session, uint64_t handle); 38 dma_addr_t rga_mm_lookup_iova(struct rga_internal_buffer *buffer, int core); 39 struct sg_table *rga_mm_lookup_sgt(struct rga_internal_buffer *buffer, int core); 40 41 void rga_mm_dump_info(struct rga_mm *session); 42 43 int rga_mm_get_handle_info(struct rga_job *job); 44 void rga_mm_put_handle_info(struct rga_job *job); 45 46 uint32_t rga_mm_import_buffer(struct rga_external_buffer *external_buffer); 47 int rga_mm_release_buffer(uint32_t handle); 48 49 int rga_mm_init(struct rga_mm **session); 50 int rga_mm_remove(struct rga_mm **session); 51 52 #endif 53