1419b0af8Sopenharmony_ci/* 2 * Copyright (c) 2012-2022 Huawei Technologies Co., Ltd. 3 * Description: dynamic ion memory function declaration. 4 * 5 * This software is licensed under the terms of the GNU General Public 6 * License version 2, as published by the Free Software Foundation, and 7 * may be copied, distributed, and modified under those terms. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 */ 14 15#ifndef DYNAMIC_MMEM_H 16#define DYNAMIC_MMEM_H 17 18#include <linux/version.h> 19#include <securec.h> 20#include "teek_ns_client.h" 21 22#ifdef CONFIG_DYNAMIC_ION 23#ifdef CONFIG_DMABUF_MM 24#include <linux/dmabuf/mm_dma_heap.h> 25#else 26#include <linux/ion/mm_ion.h> 27#endif 28#endif 29 30struct sg_memory { 31 int dyn_shared_fd; 32 struct sg_table *dyn_sg_table; 33 struct dma_buf *dyn_dma_buf; 34 phys_addr_t ion_phys_addr; 35 size_t len; 36 void *ion_virt_addr; 37}; 38 39struct dynamic_mem_item { 40 struct list_head head; 41 uint32_t configid; 42 uint32_t size; 43 struct sg_memory memory; 44 uint32_t cafd; 45 struct tc_uuid uuid; 46 uint32_t ddr_sec_region; 47}; 48 49struct dynamic_mem_config { 50 struct tc_uuid uuid; 51 uint32_t ddr_sec_region; 52}; 53 54#define MAX_ION_NENTS 1024 55typedef struct ion_page_info { 56 phys_addr_t phys_addr; 57 uint32_t npages; 58}tz_page_info; 59 60typedef struct sglist { 61 uint64_t sglist_size; 62 uint64_t ion_size; 63 uint64_t ion_id; 64 uint64_t info_length; 65 struct ion_page_info page_info[0]; 66}tz_sg_list; 67 68#ifdef CONFIG_DYNAMIC_ION 69 70bool is_ion_param(uint32_t param_type); 71int init_dynamic_mem(void); 72int load_app_use_configid(uint32_t configid, uint32_t cafd, 73 const struct tc_uuid *uuid, uint32_t size, int32_t *ret_origin); 74void kill_ion_by_cafd(unsigned int cafd); 75void kill_ion_by_uuid(const struct tc_uuid *uuid); 76int load_image_for_ion(const struct load_img_params *params, int32_t *ret_origin); 77int alloc_for_ion_sglist(const struct tc_call_params *call_params, 78 struct tc_op_params *op_params, uint8_t kernel_params, 79 uint32_t param_type, unsigned int index); 80int alloc_for_ion(const struct tc_call_params *call_params, 81 struct tc_op_params *op_params, uint8_t kernel_params, 82 uint32_t param_type, unsigned int index); 83#else 84static inline bool is_ion_param(uint32_t param_type) 85{ 86 (void)param_type; 87 return false; 88} 89 90static inline int load_image_for_ion(const struct load_img_params *params, int32_t *ret_origin) 91{ 92 (void)params; 93 (void)ret_origin; 94 return 0; 95} 96 97static inline int init_dynamic_mem(void) 98{ 99 return 0; 100} 101 102static inline int load_app_use_configid(uint32_t configid, uint32_t cafd, 103 const struct tc_uuid *uuid, uint32_t size) 104{ 105 (void)configid; 106 (void)cafd; 107 (void)uuid; 108 (void)size; 109 return 0; 110} 111 112static inline void kill_ion_by_cafd(unsigned int cafd) 113{ 114 (void)cafd; 115 return; 116} 117 118static inline void kill_ion_by_uuid(const struct tc_uuid *uuid) 119{ 120 (void)uuid; 121 return; 122} 123 124static inline int alloc_for_ion_sglist(const struct tc_call_params *call_params, 125 struct tc_op_params *op_params, uint8_t kernel_params, 126 uint32_t param_type, unsigned int index) 127{ 128 (void)call_params; 129 (void)op_params; 130 (void)kernel_params; 131 (void)param_type; 132 (void)index; 133 tloge("not support seg and related feature!\n"); 134 return -1; 135} 136 137static inline int alloc_for_ion(const struct tc_call_params *call_params, 138 struct tc_op_params *op_params, uint8_t kernel_params, 139 uint32_t param_type, unsigned int index) 140{ 141 (void)call_params; 142 (void)op_params; 143 (void)kernel_params; 144 (void)param_type; 145 (void)index; 146 tloge("not support ion and related feature!\n"); 147 return -1; 148} 149#endif 150#endif