mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-09-27 21:42:08 +08:00
chore[kmpp_obj]: Add more obj function
1. Add update flag copy function. 2. Add entry copy function. 3. Fix register log. Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Change-Id: I4059c63cd3bbcab86144eaad38c0fc30c9ee52a8
This commit is contained in:
@@ -45,6 +45,8 @@ rk_s32 kmpp_objdef_dump(KmppObjDef def);
|
|||||||
/* mpp objcet internal element set / get function */
|
/* mpp objcet internal element set / get function */
|
||||||
const char *kmpp_objdef_get_name(KmppObjDef def);
|
const char *kmpp_objdef_get_name(KmppObjDef def);
|
||||||
rk_s32 kmpp_objdef_get_entry_size(KmppObjDef def);
|
rk_s32 kmpp_objdef_get_entry_size(KmppObjDef def);
|
||||||
|
rk_s32 kmpp_objdef_get_flag_base(KmppObjDef def);
|
||||||
|
rk_s32 kmpp_objdef_get_flag_size(KmppObjDef def);
|
||||||
MppTrie kmpp_objdef_get_trie(KmppObjDef def);
|
MppTrie kmpp_objdef_get_trie(KmppObjDef def);
|
||||||
|
|
||||||
/* import kernel object ref */
|
/* import kernel object ref */
|
||||||
@@ -127,6 +129,9 @@ rk_s32 kmpp_obj_tbl_test(KmppObj obj, KmppEntry *tbl);
|
|||||||
rk_s32 kmpp_obj_update(KmppObj dst, KmppObj src);
|
rk_s32 kmpp_obj_update(KmppObj dst, KmppObj src);
|
||||||
rk_s32 kmpp_obj_update_entry(void *entry, KmppObj src);
|
rk_s32 kmpp_obj_update_entry(void *entry, KmppObj src);
|
||||||
|
|
||||||
|
/* copy entry value from src to dst */
|
||||||
|
rk_s32 kmpp_obj_copy_entry(KmppObj dst, KmppObj src);
|
||||||
|
|
||||||
/* run a callback function */
|
/* run a callback function */
|
||||||
rk_s32 kmpp_obj_run(KmppObj obj, const char *name);
|
rk_s32 kmpp_obj_run(KmppObj obj, const char *name);
|
||||||
/* dump by userspace */
|
/* dump by userspace */
|
||||||
|
@@ -264,7 +264,7 @@ void CONCAT_US(KMPP_OBJ_NAME, register)(void)
|
|||||||
(void) __flag_prev;
|
(void) __flag_prev;
|
||||||
(void) __flag_record;
|
(void) __flag_record;
|
||||||
|
|
||||||
mpp_env_get_u32(TO_STR(CONCAT_US(KMPP_OBJ_NAME, debug)), &KMPP_OBJ_DEF_DEUBG(KMPP_OBJ_NAME), 1);
|
mpp_env_get_u32(TO_STR(CONCAT_US(KMPP_OBJ_NAME, debug)), &KMPP_OBJ_DEF_DEUBG(KMPP_OBJ_NAME), 0);
|
||||||
|
|
||||||
KMPP_OBJ_DBG_LOG("register enter\n");
|
KMPP_OBJ_DBG_LOG("register enter\n");
|
||||||
|
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
#define OBJ_DBG_ENTRY (0x00000004)
|
#define OBJ_DBG_ENTRY (0x00000004)
|
||||||
#define OBJ_DBG_HOOK (0x00000008)
|
#define OBJ_DBG_HOOK (0x00000008)
|
||||||
#define OBJ_DBG_IOCTL (0x00000010)
|
#define OBJ_DBG_IOCTL (0x00000010)
|
||||||
|
#define OBJ_DBG_UPDATE (0x00000020)
|
||||||
#define OBJ_DBG_SET (0x00000040)
|
#define OBJ_DBG_SET (0x00000040)
|
||||||
#define OBJ_DBG_GET (0x00000080)
|
#define OBJ_DBG_GET (0x00000080)
|
||||||
|
|
||||||
@@ -43,6 +44,7 @@
|
|||||||
#define obj_dbg_entry(fmt, ...) obj_dbg(OBJ_DBG_ENTRY, fmt, ## __VA_ARGS__)
|
#define obj_dbg_entry(fmt, ...) obj_dbg(OBJ_DBG_ENTRY, fmt, ## __VA_ARGS__)
|
||||||
#define obj_dbg_hook(fmt, ...) obj_dbg(OBJ_DBG_HOOK, fmt, ## __VA_ARGS__)
|
#define obj_dbg_hook(fmt, ...) obj_dbg(OBJ_DBG_HOOK, fmt, ## __VA_ARGS__)
|
||||||
#define obj_dbg_ioctl(fmt, ...) obj_dbg(OBJ_DBG_IOCTL, fmt, ## __VA_ARGS__)
|
#define obj_dbg_ioctl(fmt, ...) obj_dbg(OBJ_DBG_IOCTL, fmt, ## __VA_ARGS__)
|
||||||
|
#define obj_dbg_update(fmt, ...) obj_dbg(OBJ_DBG_UPDATE, fmt, ## __VA_ARGS__)
|
||||||
#define obj_dbg_set(fmt, ...) obj_dbg(OBJ_DBG_SET, fmt, ## __VA_ARGS__)
|
#define obj_dbg_set(fmt, ...) obj_dbg(OBJ_DBG_SET, fmt, ## __VA_ARGS__)
|
||||||
#define obj_dbg_get(fmt, ...) obj_dbg(OBJ_DBG_GET, fmt, ## __VA_ARGS__)
|
#define obj_dbg_get(fmt, ...) obj_dbg(OBJ_DBG_GET, fmt, ## __VA_ARGS__)
|
||||||
|
|
||||||
@@ -100,8 +102,8 @@ typedef struct KmppObjDefImpl_t {
|
|||||||
/* userspace objdef */
|
/* userspace objdef */
|
||||||
MppCfgObj cfg;
|
MppCfgObj cfg;
|
||||||
MppMemPool pool;
|
MppMemPool pool;
|
||||||
|
rk_s32 flag_base;
|
||||||
rk_s32 flag_max_pos;
|
rk_s32 flag_max_pos;
|
||||||
rk_s32 flag_offset;
|
|
||||||
rk_s32 buf_size;
|
rk_s32 buf_size;
|
||||||
KmppObjInit init;
|
KmppObjInit init;
|
||||||
KmppObjDeinit deinit;
|
KmppObjDeinit deinit;
|
||||||
@@ -460,7 +462,7 @@ rk_s32 kmpp_objdef_register(KmppObjDef *def, rk_s32 size, const char *name)
|
|||||||
impl->buf_size = size + sizeof(KmppObjImpl);
|
impl->buf_size = size + sizeof(KmppObjImpl);
|
||||||
impl->ref_cnt = 1;
|
impl->ref_cnt = 1;
|
||||||
|
|
||||||
obj_dbg_flow("kmpp_objdef_register %-16s size %d\n", name, impl, size);
|
obj_dbg_flow("kmpp_objdef_register %-16s size %4d - %p\n", name, size, impl);
|
||||||
|
|
||||||
*def = impl;
|
*def = impl;
|
||||||
|
|
||||||
@@ -542,9 +544,12 @@ rk_s32 kmpp_objdef_add_entry(KmppObjDef def, const char *name, KmppEntry *tbl)
|
|||||||
|
|
||||||
/* When last entry finish update and create memory pool */
|
/* When last entry finish update and create memory pool */
|
||||||
if (impl->flag_max_pos) {
|
if (impl->flag_max_pos) {
|
||||||
rk_s32 flag_size = MPP_ALIGN(impl->flag_max_pos, 8) / 8;
|
rk_s32 flag_max_pos = MPP_ALIGN(impl->flag_max_pos, 8);
|
||||||
|
rk_s32 flag_size = flag_max_pos / 8;
|
||||||
|
|
||||||
|
impl->flag_base = impl->entry_size;
|
||||||
|
impl->flag_max_pos = flag_size;
|
||||||
|
|
||||||
impl->flag_offset = impl->buf_size;
|
|
||||||
flag_size -= impl->entry_size;
|
flag_size -= impl->entry_size;
|
||||||
flag_size = MPP_ALIGN(flag_size, 4);
|
flag_size = MPP_ALIGN(flag_size, 4);
|
||||||
impl->buf_size += flag_size;
|
impl->buf_size += flag_size;
|
||||||
@@ -755,6 +760,20 @@ rk_s32 kmpp_objdef_get_entry_size(KmppObjDef def)
|
|||||||
return impl ? impl->entry_size : 0;
|
return impl ? impl->entry_size : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rk_s32 kmpp_objdef_get_flag_base(KmppObjDef def)
|
||||||
|
{
|
||||||
|
KmppObjDefImpl *impl = (KmppObjDefImpl *)def;
|
||||||
|
|
||||||
|
return impl ? impl->flag_base : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
rk_s32 kmpp_objdef_get_flag_size(KmppObjDef def)
|
||||||
|
{
|
||||||
|
KmppObjDefImpl *impl = (KmppObjDefImpl *)def;
|
||||||
|
|
||||||
|
return (impl && impl->flag_base) ? (impl->flag_max_pos - impl->flag_base) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
MppTrie kmpp_objdef_get_trie(KmppObjDef def)
|
MppTrie kmpp_objdef_get_trie(KmppObjDef def)
|
||||||
{
|
{
|
||||||
KmppObjDefImpl *impl = (KmppObjDefImpl *)def;
|
KmppObjDefImpl *impl = (KmppObjDefImpl *)def;
|
||||||
@@ -1375,14 +1394,29 @@ rk_s32 kmpp_obj_update(KmppObj dst, KmppObj src)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
e = (KmppEntry *)mpp_trie_info_ctx(info);
|
e = (KmppEntry *)mpp_trie_info_ctx(info);
|
||||||
if (ENTRY_TEST_FLAG(e, src_impl->entry)) {
|
if (e->tbl.flag_offset && ENTRY_TEST_FLAG(e, src_impl->entry)) {
|
||||||
rk_s32 offset = e->tbl.elem_offset;
|
rk_s32 offset = e->tbl.elem_offset;
|
||||||
rk_s32 size = e->tbl.elem_size;
|
rk_s32 size = e->tbl.elem_size;
|
||||||
|
|
||||||
|
obj_dbg_update("obj %s %p update %s\n", src_impl->name,
|
||||||
|
dst, mpp_trie_info_name(info));
|
||||||
memcpy(dst_impl->entry + offset, src_impl->entry + offset, size);
|
memcpy(dst_impl->entry + offset, src_impl->entry + offset, size);
|
||||||
}
|
}
|
||||||
} while ((info = mpp_trie_get_info_next(trie, info)));
|
} while ((info = mpp_trie_get_info_next(trie, info)));
|
||||||
|
|
||||||
|
{
|
||||||
|
/* copy update flag to dst */
|
||||||
|
rk_s32 offset = kmpp_objdef_get_flag_base(src_impl->def);
|
||||||
|
rk_s32 size = kmpp_objdef_get_flag_size(src_impl->def);
|
||||||
|
rk_s32 i;
|
||||||
|
|
||||||
|
for (i = offset; i < offset + size; i += 4)
|
||||||
|
obj_dbg_update("obj %s %p update flag at %04x - %04x\n", src_impl->name,
|
||||||
|
dst, i, *((rk_u32 *)((rk_u8 *)src_impl->entry + i)));
|
||||||
|
|
||||||
|
memcpy(dst_impl->entry + offset, src_impl->entry + offset, size);
|
||||||
|
}
|
||||||
|
|
||||||
return rk_ok;
|
return rk_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1407,10 +1441,12 @@ rk_s32 kmpp_obj_update_entry(void *entry, KmppObj src)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
e = (KmppEntry *)mpp_trie_info_ctx(info);
|
e = (KmppEntry *)mpp_trie_info_ctx(info);
|
||||||
if (ENTRY_TEST_FLAG(e, src_impl->entry)) {
|
if (e->tbl.flag_offset && ENTRY_TEST_FLAG(e, src_impl->entry)) {
|
||||||
rk_s32 offset = e->tbl.elem_offset;
|
rk_s32 offset = e->tbl.elem_offset;
|
||||||
rk_s32 size = e->tbl.elem_size;
|
rk_s32 size = e->tbl.elem_size;
|
||||||
|
|
||||||
|
obj_dbg_update("obj %s %p -> %p update %s\n", src_impl->name,
|
||||||
|
src_impl, entry, mpp_trie_info_name(info));
|
||||||
memcpy(entry + offset, src_impl->entry + offset, size);
|
memcpy(entry + offset, src_impl->entry + offset, size);
|
||||||
}
|
}
|
||||||
} while ((info = mpp_trie_get_info_next(trie, info)));
|
} while ((info = mpp_trie_get_info_next(trie, info)));
|
||||||
@@ -1418,6 +1454,27 @@ rk_s32 kmpp_obj_update_entry(void *entry, KmppObj src)
|
|||||||
return rk_ok;
|
return rk_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rk_s32 kmpp_obj_copy_entry(KmppObj dst, KmppObj src)
|
||||||
|
{
|
||||||
|
KmppObjImpl *dst_impl = (KmppObjImpl *)dst;
|
||||||
|
KmppObjImpl *src_impl = (KmppObjImpl *)src;
|
||||||
|
|
||||||
|
if (kmpp_obj_check_f(src) || kmpp_obj_check_f(dst) || src_impl->def != dst_impl->def) {
|
||||||
|
mpp_loge_f("obj %p copy entry to %p failed invalid param\n", src, dst);
|
||||||
|
return rk_nok;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(dst_impl->entry, src_impl->entry, src_impl->def->entry_size);
|
||||||
|
{ /* NOTE: clear dst update flags */
|
||||||
|
rk_s32 offset = kmpp_objdef_get_flag_base(src_impl->def);
|
||||||
|
rk_s32 size = kmpp_objdef_get_flag_size(src_impl->def);
|
||||||
|
|
||||||
|
memset(dst_impl->entry + offset, 0, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return rk_ok;
|
||||||
|
}
|
||||||
|
|
||||||
static rk_s32 kmpp_obj_impl_run(rk_s32 (*run)(void *ctx), void *ctx)
|
static rk_s32 kmpp_obj_impl_run(rk_s32 (*run)(void *ctx), void *ctx)
|
||||||
{
|
{
|
||||||
return run(ctx);
|
return run(ctx);
|
||||||
|
Reference in New Issue
Block a user