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