1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2024 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __KMPP_OBJ_H__ 7*437bfbebSnyanmisaka #define __KMPP_OBJ_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include "mpp_internal.h" 10*437bfbebSnyanmisaka 11*437bfbebSnyanmisaka typedef rk_s32 (*KmppObjInit)(void *entry, KmppObj obj, const char *caller); 12*437bfbebSnyanmisaka typedef rk_s32 (*KmppObjDeinit)(void *entry, KmppObj obj, const char *caller); 13*437bfbebSnyanmisaka typedef rk_s32 (*KmppObjPreset)(void *entry, KmppObj obj, const char *val, const char *caller); 14*437bfbebSnyanmisaka typedef rk_s32 (*KmppObjDump)(void *entry); 15*437bfbebSnyanmisaka 16*437bfbebSnyanmisaka #ifdef __cplusplus 17*437bfbebSnyanmisaka extern "C" { 18*437bfbebSnyanmisaka #endif 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka /* userspace objdef register */ 21*437bfbebSnyanmisaka rk_s32 kmpp_objdef_register(KmppObjDef *def, rk_s32 priv_size, rk_s32 size, const char *name); 22*437bfbebSnyanmisaka /* kernel objdef query from /dev/kmpp_objs */ 23*437bfbebSnyanmisaka rk_s32 kmpp_objdef_get(KmppObjDef *def, rk_s32 priv_size, const char *name); 24*437bfbebSnyanmisaka /* find kernel objdef by name */ 25*437bfbebSnyanmisaka rk_s32 kmpp_objdef_find(KmppObjDef *def, const char *name); 26*437bfbebSnyanmisaka /* kernel objdef from /dev/kmpp_objs reduce refcnt */ 27*437bfbebSnyanmisaka rk_s32 kmpp_objdef_put(KmppObjDef def); 28*437bfbebSnyanmisaka 29*437bfbebSnyanmisaka /* userspace objdef add MppCfgObj root */ 30*437bfbebSnyanmisaka rk_s32 kmpp_objdef_add_cfg_root(KmppObjDef def, MppCfgObj root); 31*437bfbebSnyanmisaka /* userspace objdef get MppCfgObj root */ 32*437bfbebSnyanmisaka MppCfgObj kmpp_objdef_get_cfg_root(KmppObjDef def); 33*437bfbebSnyanmisaka /* userspace objdef add KmppEntry table */ 34*437bfbebSnyanmisaka rk_s32 kmpp_objdef_add_entry(KmppObjDef def, const char *name, KmppEntry *tbl); 35*437bfbebSnyanmisaka /* userspace object init function register default object is all zero */ 36*437bfbebSnyanmisaka rk_s32 kmpp_objdef_add_init(KmppObjDef def, KmppObjInit init); 37*437bfbebSnyanmisaka /* userspace object deinit function register */ 38*437bfbebSnyanmisaka rk_s32 kmpp_objdef_add_deinit(KmppObjDef def, KmppObjDeinit deinit); 39*437bfbebSnyanmisaka /* userspace object preset function register */ 40*437bfbebSnyanmisaka rk_s32 kmpp_objdef_add_preset(KmppObjDef def, KmppObjPreset preset); 41*437bfbebSnyanmisaka /* userspace object dump function register */ 42*437bfbebSnyanmisaka rk_s32 kmpp_objdef_add_dump(KmppObjDef def, KmppObjDump dump); 43*437bfbebSnyanmisaka 44*437bfbebSnyanmisaka rk_s32 kmpp_objdef_set_prop(KmppObjDef def, const char *op, rk_s32 value); 45*437bfbebSnyanmisaka 46*437bfbebSnyanmisaka rk_s32 kmpp_objdef_get_entry(KmppObjDef def, const char *name, KmppEntry **tbl); 47*437bfbebSnyanmisaka rk_s32 kmpp_objdef_get_offset(KmppObjDef def, const char *name); 48*437bfbebSnyanmisaka rk_s32 kmpp_objdef_get_cmd(KmppObjDef def, const char *name); 49*437bfbebSnyanmisaka rk_s32 kmpp_objdef_dump(KmppObjDef def); 50*437bfbebSnyanmisaka 51*437bfbebSnyanmisaka /* mpp objcet internal element set / get function */ 52*437bfbebSnyanmisaka const char *kmpp_objdef_get_name(KmppObjDef def); 53*437bfbebSnyanmisaka rk_s32 kmpp_objdef_get_entry_size(KmppObjDef def); 54*437bfbebSnyanmisaka MppTrie kmpp_objdef_get_trie(KmppObjDef def); 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka /* import kernel object ref */ 57*437bfbebSnyanmisaka rk_s32 kmpp_obj_get(KmppObj *obj, KmppObjDef def, const char *caller); 58*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_by_name(KmppObj *obj, const char *name, const char *caller); 59*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_by_sptr(KmppObj *obj, KmppShmPtr *sptr, const char *caller); 60*437bfbebSnyanmisaka /* release object and impl head */ 61*437bfbebSnyanmisaka rk_s32 kmpp_obj_put(KmppObj obj, const char *caller); 62*437bfbebSnyanmisaka /* release impl head only */ 63*437bfbebSnyanmisaka rk_s32 kmpp_obj_impl_put(KmppObj obj, const char *caller); 64*437bfbebSnyanmisaka /* setup object to a preset value by string args input */ 65*437bfbebSnyanmisaka rk_s32 kmpp_obj_preset(KmppObj obj, const char *arg, const char *caller); 66*437bfbebSnyanmisaka /* check object is valid or not */ 67*437bfbebSnyanmisaka rk_s32 kmpp_obj_check(KmppObj obj, const char *caller); 68*437bfbebSnyanmisaka /* run object's ioctl to kernel with input and output object */ 69*437bfbebSnyanmisaka rk_s32 kmpp_obj_ioctl(KmppObj ctx, rk_s32 cmd, KmppObj in, KmppObj *out, const char *caller); 70*437bfbebSnyanmisaka 71*437bfbebSnyanmisaka #define kmpp_obj_get_f(obj, def) kmpp_obj_get(obj, def, __FUNCTION__) 72*437bfbebSnyanmisaka #define kmpp_obj_get_by_name_f(obj, name) kmpp_obj_get_by_name(obj, name, __FUNCTION__) 73*437bfbebSnyanmisaka #define kmpp_obj_get_by_sptr_f(obj, sptr) kmpp_obj_get_by_sptr(obj, sptr, __FUNCTION__) 74*437bfbebSnyanmisaka #define kmpp_obj_put_f(obj) kmpp_obj_put(obj, __FUNCTION__) 75*437bfbebSnyanmisaka #define kmpp_obj_impl_put_f(obj) kmpp_obj_impl_put(obj, __FUNCTION__) 76*437bfbebSnyanmisaka #define kmpp_obj_preset_f(obj, arg) kmpp_obj_preset(obj, arg, __FUNCTION__) 77*437bfbebSnyanmisaka #define kmpp_obj_check_f(obj) kmpp_obj_check(obj, __FUNCTION__) 78*437bfbebSnyanmisaka #define kmpp_obj_ioctl_f(ctx, cmd, in, out) kmpp_obj_ioctl(ctx, cmd, in, out, __FUNCTION__) 79*437bfbebSnyanmisaka 80*437bfbebSnyanmisaka /* check a object is kobject or not */ 81*437bfbebSnyanmisaka rk_s32 kmpp_obj_is_kobj(KmppObj obj); 82*437bfbebSnyanmisaka /* object to its objdef */ 83*437bfbebSnyanmisaka KmppObjDef kmpp_obj_to_objdef(KmppObj obj); 84*437bfbebSnyanmisaka /* object implement element update flags access */ 85*437bfbebSnyanmisaka void *kmpp_obj_to_flags(KmppObj obj); 86*437bfbebSnyanmisaka rk_s32 kmpp_obj_to_flags_size(KmppObj obj); 87*437bfbebSnyanmisaka /* KmppShmPtr is the kernel share object userspace base address for kernel ioctl */ 88*437bfbebSnyanmisaka KmppShmPtr *kmpp_obj_to_shm(KmppObj obj); 89*437bfbebSnyanmisaka /* KmppShmPtr size defined the copy size for kernel ioctl */ 90*437bfbebSnyanmisaka rk_s32 kmpp_obj_to_shm_size(KmppObj obj); 91*437bfbebSnyanmisaka const char *kmpp_obj_get_name(KmppObj obj); 92*437bfbebSnyanmisaka /* 93*437bfbebSnyanmisaka * priv is the private data in userspace KmppObjImpl struct for kobject transaction 94*437bfbebSnyanmisaka * priv = KmppObjImpl->priv 95*437bfbebSnyanmisaka */ 96*437bfbebSnyanmisaka void *kmpp_obj_to_priv(KmppObj obj); 97*437bfbebSnyanmisaka /* 98*437bfbebSnyanmisaka * entry is the userspace address for kernel share object body 99*437bfbebSnyanmisaka * entry = KmppShmPtr->uaddr + entry_offset 100*437bfbebSnyanmisaka */ 101*437bfbebSnyanmisaka void *kmpp_obj_to_entry(KmppObj obj); 102*437bfbebSnyanmisaka /* offset is the entry offset from kernel share object body */ 103*437bfbebSnyanmisaka rk_s32 kmpp_obj_to_offset(KmppObj obj, const char *name); 104*437bfbebSnyanmisaka 105*437bfbebSnyanmisaka /* value access function */ 106*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_s32(KmppObj obj, const char *name, rk_s32 val); 107*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_s32(KmppObj obj, const char *name, rk_s32 *val); 108*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_u32(KmppObj obj, const char *name, rk_u32 val); 109*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_u32(KmppObj obj, const char *name, rk_u32 *val); 110*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_s64(KmppObj obj, const char *name, rk_s64 val); 111*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_s64(KmppObj obj, const char *name, rk_s64 *val); 112*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_u64(KmppObj obj, const char *name, rk_u64 val); 113*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_u64(KmppObj obj, const char *name, rk_u64 *val); 114*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_st(KmppObj obj, const char *name, void *val); 115*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_st(KmppObj obj, const char *name, void *val); 116*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_s32(KmppObj obj, KmppEntry *tbl, rk_s32 val); 117*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_s32(KmppObj obj, KmppEntry *tbl, rk_s32 *val); 118*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_u32(KmppObj obj, KmppEntry *tbl, rk_u32 val); 119*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_u32(KmppObj obj, KmppEntry *tbl, rk_u32 *val); 120*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_s64(KmppObj obj, KmppEntry *tbl, rk_s64 val); 121*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_s64(KmppObj obj, KmppEntry *tbl, rk_s64 *val); 122*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_u64(KmppObj obj, KmppEntry *tbl, rk_u64 val); 123*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_u64(KmppObj obj, KmppEntry *tbl, rk_u64 *val); 124*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_st(KmppObj obj, KmppEntry *tbl, void *val); 125*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_st(KmppObj obj, KmppEntry *tbl, void *val); 126*437bfbebSnyanmisaka 127*437bfbebSnyanmisaka /* userspace access only function */ 128*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_obj(KmppObj obj, const char *name, KmppObj val); 129*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_obj(KmppObj obj, const char *name, KmppObj *val); 130*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_ptr(KmppObj obj, const char *name, void *val); 131*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_ptr(KmppObj obj, const char *name, void **val); 132*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_fp(KmppObj obj, const char *name, void *val); 133*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_fp(KmppObj obj, const char *name, void **val); 134*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_obj(KmppObj obj, KmppEntry *tbl, KmppObj val); 135*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_obj(KmppObj obj, KmppEntry *tbl, KmppObj *val); 136*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_ptr(KmppObj obj, KmppEntry *tbl, void *val); 137*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_ptr(KmppObj obj, KmppEntry *tbl, void **val); 138*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_fp(KmppObj obj, KmppEntry *tbl, void *val); 139*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_fp(KmppObj obj, KmppEntry *tbl, void **val); 140*437bfbebSnyanmisaka 141*437bfbebSnyanmisaka /* share access function */ 142*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_shm(KmppObj obj, const char *name, KmppShmPtr *val); 143*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_shm(KmppObj obj, const char *name, KmppShmPtr *val); 144*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_set_shm(KmppObj obj, KmppEntry *tbl, KmppShmPtr *val); 145*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_get_shm(KmppObj obj, KmppEntry *tbl, KmppShmPtr *val); 146*437bfbebSnyanmisaka 147*437bfbebSnyanmisaka /* helper for get share object from a share memory element */ 148*437bfbebSnyanmisaka rk_s32 kmpp_obj_set_shm_obj(KmppObj obj, const char *name, KmppObj val); 149*437bfbebSnyanmisaka rk_s32 kmpp_obj_get_shm_obj(KmppObj obj, const char *name, KmppObj *val); 150*437bfbebSnyanmisaka 151*437bfbebSnyanmisaka /* update flag check function */ 152*437bfbebSnyanmisaka rk_s32 kmpp_obj_test(KmppObj obj, const char *name); 153*437bfbebSnyanmisaka rk_s32 kmpp_obj_tbl_test(KmppObj obj, KmppEntry *tbl); 154*437bfbebSnyanmisaka rk_s32 kmpp_obj_update(KmppObj dst, KmppObj src); 155*437bfbebSnyanmisaka rk_s32 kmpp_obj_update_entry(void *entry, KmppObj src); 156*437bfbebSnyanmisaka 157*437bfbebSnyanmisaka /* copy entry value from src to dst */ 158*437bfbebSnyanmisaka rk_s32 kmpp_obj_copy_entry(KmppObj dst, KmppObj src); 159*437bfbebSnyanmisaka 160*437bfbebSnyanmisaka /* run a callback function */ 161*437bfbebSnyanmisaka rk_s32 kmpp_obj_run(KmppObj obj, const char *name); 162*437bfbebSnyanmisaka /* dump by userspace */ 163*437bfbebSnyanmisaka rk_s32 kmpp_obj_udump_f(KmppObj obj, const char *caller); 164*437bfbebSnyanmisaka /* dump by kernel */ 165*437bfbebSnyanmisaka rk_s32 kmpp_obj_kdump_f(KmppObj obj, const char *caller); 166*437bfbebSnyanmisaka 167*437bfbebSnyanmisaka #define kmpp_obj_udump(obj) kmpp_obj_udump_f(obj, __FUNCTION__) 168*437bfbebSnyanmisaka #define kmpp_obj_kdump(obj) kmpp_obj_kdump_f(obj, __FUNCTION__) 169*437bfbebSnyanmisaka 170*437bfbebSnyanmisaka rk_s32 kmpp_shm_get(KmppShm *shm, rk_s32 size, const char *caller); 171*437bfbebSnyanmisaka rk_s32 kmpp_shm_put(KmppShm shm, const char *caller); 172*437bfbebSnyanmisaka 173*437bfbebSnyanmisaka void *kmpp_shm_to_entry(KmppShm shm, const char *caller); 174*437bfbebSnyanmisaka 175*437bfbebSnyanmisaka #define kmpp_shm_get_f(shm, size) kmpp_shm_get(shm, size, __FUNCTION__) 176*437bfbebSnyanmisaka #define kmpp_shm_put_f(shm) kmpp_shm_put(shm, __FUNCTION__) 177*437bfbebSnyanmisaka #define kmpp_shm_to_entry_f(shm) kmpp_shm_to_entry(shm, __FUNCTION__) 178*437bfbebSnyanmisaka 179*437bfbebSnyanmisaka const char *strof_elem_type(ElemType type); 180*437bfbebSnyanmisaka 181*437bfbebSnyanmisaka #ifdef __cplusplus 182*437bfbebSnyanmisaka } 183*437bfbebSnyanmisaka #endif 184*437bfbebSnyanmisaka 185*437bfbebSnyanmisaka #endif /* __KMPP_OBJ_H__ */ 186