1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2 /* 3 * Copyright (c) 2025 Rockchip Electronics Co., Ltd. 4 */ 5 6 #ifndef __MPP_INTERNAL_H__ 7 #define __MPP_INTERNAL_H__ 8 9 #include "rk_type.h" 10 #include "mpp_err.h" 11 12 /* 13 * All mpp / kmpp internal interface object list here. 14 */ 15 typedef void* MppTrie; 16 typedef void* MppCfgObj; 17 18 /* MppObjDef - mpp object name size and access table trie definition */ 19 typedef void* MppObjDef; 20 /* MppObj - mpp object for string name access and function access */ 21 typedef void* MppObj; 22 typedef void* MppIoc; 23 24 /* KmppObjDef - mpp kernel object name size and access table trie definition */ 25 typedef void* KmppObjDef; 26 /* KmppObj - mpp kernel object for string name access and function access */ 27 typedef void* KmppObj; 28 29 typedef enum CfgType_e { 30 CFG_FUNC_TYPE_s32, 31 CFG_FUNC_TYPE_u32, 32 CFG_FUNC_TYPE_s64, 33 CFG_FUNC_TYPE_u64, 34 CFG_FUNC_TYPE_st, 35 CFG_FUNC_TYPE_ptr, 36 CFG_FUNC_TYPE_BUTT, 37 } CfgType; 38 39 typedef struct MppCfgInfo_t { 40 CfgType data_type; 41 /* update flag info 32bit */ 42 RK_U32 flag_offset; 43 /* data access info */ 44 RK_U32 data_offset; 45 RK_S32 data_size; 46 } MppCfgInfo; 47 48 /* 49 * kernel - userspace transaction trie node ctx info (64 bit) definition 50 * 51 * +------+--------------------+---------------------------+ 52 * | 8bit | 24 bit | 32 bit | 53 * +------+--------------------+---------------------------+ 54 * 55 * bit 0~3 - 4-bit entry type (EntryType) 56 * 0 - invalid entry 57 * 1 - trie self info node 58 * 2 - access location table node 59 * 3 - ioctl cmd node 60 * 61 * bit 4~7 - 4-bit entry flag (EntryFlag) for different entry type 62 */ 63 typedef enum EntryType_e { 64 ENTRY_TYPE_NONE = 0x0, /* invalid entry type */ 65 ENTRY_TYPE_VAL = 0x1, /* 32-bit value */ 66 ENTRY_TYPE_STR = 0x2, /* string info property */ 67 ENTRY_TYPE_LOC_TBL = 0x3, /* entry location table */ 68 ENTRY_TYPE_BUTT, 69 } EntryType; 70 71 /* 72 * 4-bit extention flag for different entry property 73 * EntryValFlag - for ENTRY_TYPE_VAL 74 * EntryValFlag - for ENTRY_TYPE_STR 75 * EntryLocTblFlag - for ENTRY_TYPE_LOC_TBL 76 */ 77 typedef enum EntryValFlag_e { 78 /* 79 * 0 - value is unsigned value 80 * 1 - value is signed value 81 */ 82 VALUE_SIGNED = 0x1, 83 } EntryValFlag; 84 85 typedef enum EntryValUsage_e { 86 VALUE_NORMAL = 0x0, 87 88 VALUE_TRIE = 0x10, 89 /* trie info value */ 90 VALUE_TRIE_INFO = (VALUE_TRIE + 1), 91 /* trie offset from the trie root */ 92 VALUE_TRIE_OFFSET = (VALUE_TRIE + 2), 93 94 /* ioctl cmd */ 95 VALUE_IOCTL_CMD = 0x20, 96 } EntryValUsage; 97 98 typedef enum EntryStrFlag_e { 99 STRING_NORMAL = 0x0, 100 /* string is trie self info */ 101 STRING_TRIE = 0x1, 102 } EntryStrFlag; 103 104 typedef enum EntryLocTblFlag_e { 105 /* 106 * bit 4 - element can be accessed by kernel 107 * bit 5 - element can be accessed by userspace 108 * bit 6 - element is read-only 109 */ 110 LOCTBL_KERNEL = 0x1, 111 LOCTBL_USERSPACE = 0x2, 112 LOCTBL_READONLY = 0x4, 113 } EntryLocTblFlag; 114 115 typedef enum ElemType_e { 116 /* commaon fix size value */ 117 ELEM_TYPE_FIX = 0x0, 118 ELEM_TYPE_s32 = (ELEM_TYPE_FIX + 0), 119 ELEM_TYPE_u32 = (ELEM_TYPE_FIX + 1), 120 ELEM_TYPE_s64 = (ELEM_TYPE_FIX + 2), 121 ELEM_TYPE_u64 = (ELEM_TYPE_FIX + 3), 122 /* pointer type stored by 64-bit */ 123 ELEM_TYPE_ptr = (ELEM_TYPE_FIX + 4), 124 /* value only structure */ 125 ELEM_TYPE_st = (ELEM_TYPE_FIX + 5), 126 127 /* kernel and userspace share data */ 128 ELEM_TYPE_SHARE = 0x6, 129 /* share memory between kernel and userspace */ 130 ELEM_TYPE_shm = (ELEM_TYPE_SHARE + 0), 131 132 /* kernel access only data */ 133 ELEM_TYPE_KERNEL = 0x8, 134 /* kenrel object poineter */ 135 ELEM_TYPE_kobj = (ELEM_TYPE_KERNEL + 0), 136 /* kenrel normal data poineter */ 137 ELEM_TYPE_kptr = (ELEM_TYPE_KERNEL + 1), 138 /* kernel function poineter */ 139 ELEM_TYPE_kfp = (ELEM_TYPE_KERNEL + 2), 140 141 /* userspace access only data */ 142 ELEM_TYPE_USER = 0xc, 143 /* userspace object poineter */ 144 ELEM_TYPE_uobj = (ELEM_TYPE_USER + 0), 145 /* userspace normal data poineter */ 146 ELEM_TYPE_uptr = (ELEM_TYPE_USER + 1), 147 /* userspace function poineter */ 148 ELEM_TYPE_ufp = (ELEM_TYPE_USER + 2), 149 150 ELEM_TYPE_BUTT = 0xf, 151 } ElemType; 152 153 typedef union KmppEntry_u { 154 rk_u64 val; 155 union { 156 EntryType type : 4; 157 struct { 158 EntryType prop : 4; 159 EntryValFlag flag : 4; 160 EntryValUsage usage : 8; 161 rk_u32 reserve : 16; 162 rk_u32 val; 163 } v; 164 struct { 165 EntryType prop : 4; 166 EntryValFlag flag : 4; 167 rk_u32 len : 24; 168 rk_u32 offset; 169 } str; 170 struct { 171 EntryType type : 4; 172 EntryLocTblFlag flag : 4; 173 ElemType elem_type : 8; 174 rk_u16 elem_size; 175 rk_u16 elem_offset; 176 rk_u16 flag_offset; /* define by ElemFlagType */ 177 } tbl; 178 }; 179 } KmppEntry; 180 181 #endif /*__MPP_INTERNAL_H__*/ 182