xref: /rockchip-linux_mpp/kmpp/base/inc/kmpp_obj.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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