From fddfc9db2ea9ee58b37b3bcc8ba09659f21a9b01 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Wed, 28 May 2025 17:38:00 +0800 Subject: [PATCH] chore[kmpp_obj]: Add from objs device macro Combine kernel objdef and userspace objdef process. Signed-off-by: Herman Chen Signed-off-by: Yanjun Liao Change-Id: Icf1ad03af8df3d1450138d3a9161b2dd20bb59f5 --- kmpp/base/inc/kmpp_obj.h | 2 -- kmpp/base/inc/kmpp_obj_helper.h | 8 ++++- kmpp/base/kmpp_obj.c | 57 ++++++++++++++------------------- 3 files changed, 31 insertions(+), 36 deletions(-) diff --git a/kmpp/base/inc/kmpp_obj.h b/kmpp/base/inc/kmpp_obj.h index 37d8e400..86669e33 100644 --- a/kmpp/base/inc/kmpp_obj.h +++ b/kmpp/base/inc/kmpp_obj.h @@ -18,8 +18,6 @@ extern "C" { /* userspace objdef register */ rk_s32 kmpp_objdef_register(KmppObjDef *def, rk_s32 size, const char *name); -/* userspace objdef unregister */ -rk_s32 kmpp_objdef_unregister(KmppObjDef def); /* userspace objdef add MppCfgObj root */ rk_s32 kmpp_objdef_add_cfg_root(KmppObjDef def, MppCfgObj root); /* userspace objdef add KmppEntry table */ diff --git a/kmpp/base/inc/kmpp_obj_helper.h b/kmpp/base/inc/kmpp_obj_helper.h index 0a44dc80..f177f7a8 100644 --- a/kmpp/base/inc/kmpp_obj_helper.h +++ b/kmpp/base/inc/kmpp_obj_helper.h @@ -266,6 +266,12 @@ void CONCAT_US(KMPP_OBJ_NAME, register)(void) mpp_env_get_u32(TO_STR(CONCAT_US(KMPP_OBJ_NAME, debug)), &KMPP_OBJ_DEF_DEUBG(KMPP_OBJ_NAME), 0); + kmpp_objdef_get(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), TO_STR(KMPP_OBJ_INTF_TYPE)); + if (KMPP_OBJ_DEF(KMPP_OBJ_NAME)) { + KMPP_OBJ_DBG_LOG(TO_STR(KMPP_OBJ_NAME) " found at kernel\n"); + return; + } + KMPP_OBJ_DBG_LOG("register enter\n"); kmpp_objdef_register(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), impl_size, TO_STR(KMPP_OBJ_INTF_TYPE)); @@ -303,7 +309,7 @@ void CONCAT_US(KMPP_OBJ_NAME, unregister)(void) KmppObjDef def = __sync_fetch_and_and(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), NULL); KMPP_OBJ_DBG_LOG("unregister enter\n"); - kmpp_objdef_unregister(def); + kmpp_objdef_put(def); KMPP_OBJ_DBG_LOG("unregister leave\n"); } diff --git a/kmpp/base/kmpp_obj.c b/kmpp/base/kmpp_obj.c index eabd57c9..c52e04fe 100644 --- a/kmpp/base/kmpp_obj.c +++ b/kmpp/base/kmpp_obj.c @@ -102,6 +102,8 @@ typedef struct KmppObjDefImpl_t { /* userspace objdef */ MppCfgObj cfg; MppMemPool pool; + /* object define from kernel or userspace */ + rk_s32 is_kobj; rk_s32 flag_base; rk_s32 flag_max_pos; rk_s32 buf_size; @@ -418,15 +420,31 @@ rk_s32 kmpp_objdef_put(KmppObjDef def) rk_s32 ret = rk_nok; if (impl) { - impl->ref_cnt--; - - if (!impl->ref_cnt) { + if (impl->is_kobj) { + impl->ref_cnt--; + if (!impl->ref_cnt) { + if (impl->trie) { + ret = mpp_trie_deinit(impl->trie); + impl->trie = NULL; + } + } + } else { + if (impl->cfg) { + mpp_cfg_put_all(impl->cfg); + impl->cfg = NULL; + /* When init with MppCfgObj the trie is associated to the MppCfgObj */ + impl->trie = NULL; + } if (impl->trie) { ret = mpp_trie_deinit(impl->trie); impl->trie = NULL; } + if (impl->pool) { + mpp_mem_pool_deinit(impl->pool); + impl->pool = NULL; + } + mpp_free(impl); } - ret = rk_ok; } @@ -469,34 +487,6 @@ rk_s32 kmpp_objdef_register(KmppObjDef *def, rk_s32 size, const char *name) return rk_ok; } -rk_s32 kmpp_objdef_unregister(KmppObjDef def) -{ - KmppObjDefImpl *impl = (KmppObjDefImpl *)def; - rk_s32 ret = rk_nok; - - if (impl) { - if (impl->cfg) { - mpp_cfg_put_all(impl->cfg); - impl->cfg = NULL; - /* When init with MppCfgObj the trie is associated to the MppCfgObj */ - impl->trie = NULL; - } - if (impl->trie) { - ret = mpp_trie_deinit(impl->trie); - impl->trie = NULL; - } - if (impl->pool) { - mpp_mem_pool_deinit(impl->pool); - impl->pool = NULL; - } - - mpp_free(impl); - ret = rk_ok; - } - - return ret; -} - rk_s32 kmpp_objdef_add_cfg_root(KmppObjDef def, MppCfgObj root) { KmppObjDefImpl *impl = (KmppObjDefImpl *)def; @@ -639,7 +629,7 @@ rk_s32 kmpp_objdef_get(KmppObjDef *def, const char *name) info = mpp_trie_get_info(p->trie, name); if (!info) { - mpp_loge_f("failed to get objdef %s\n", name); + obj_dbg_flow("failed to get kernel objdef %s\n", name); return rk_nok; } @@ -647,6 +637,7 @@ rk_s32 kmpp_objdef_get(KmppObjDef *def, const char *name) KmppObjDefImpl *impl = &p->defs[info->index]; impl->ref_cnt++; + impl->is_kobj = 1; *def = impl; return rk_ok;