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)40static 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