xref: /rockchip-linux_mpp/kmpp/base/inc/kmpp_obj_func.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 #include "kmpp_obj_macro.h"
7*437bfbebSnyanmisaka 
8*437bfbebSnyanmisaka #ifndef KMPP_OBJ_NAME
9*437bfbebSnyanmisaka #error "KMPP_OBJ_NAME must be defined on using kmpp_obj_func.h"
10*437bfbebSnyanmisaka #endif
11*437bfbebSnyanmisaka 
12*437bfbebSnyanmisaka #ifndef KMPP_OBJ_INTF_TYPE
13*437bfbebSnyanmisaka #error "KMPP_OBJ_INTF_TYPE must be defined on using kmpp_obj_func.h"
14*437bfbebSnyanmisaka #endif
15*437bfbebSnyanmisaka 
16*437bfbebSnyanmisaka #include "rk_type.h"
17*437bfbebSnyanmisaka 
18*437bfbebSnyanmisaka /* always define object common function */
19*437bfbebSnyanmisaka #define KMPP_OBJ_FUNC_DEFINE(prefix) \
20*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, size)(void); \
21*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, get)(KMPP_OBJ_INTF_TYPE *p); \
22*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, assign)(KMPP_OBJ_INTF_TYPE *p, void *buf, rk_s32 size); \
23*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, put)(KMPP_OBJ_INTF_TYPE p); \
24*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, dump)(KMPP_OBJ_INTF_TYPE p, const char *caller); \
25*437bfbebSnyanmisaka     KmppObjDef CONCAT_US(prefix, objdef)(void);
26*437bfbebSnyanmisaka 
27*437bfbebSnyanmisaka #ifdef __cplusplus
28*437bfbebSnyanmisaka extern "C" {
29*437bfbebSnyanmisaka #endif
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka KMPP_OBJ_FUNC_DEFINE(KMPP_OBJ_NAME)
32*437bfbebSnyanmisaka 
33*437bfbebSnyanmisaka #ifdef __cplusplus
34*437bfbebSnyanmisaka }
35*437bfbebSnyanmisaka #endif
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka #undef KMPP_OBJ_FUNC_DEFINE
38*437bfbebSnyanmisaka 
39*437bfbebSnyanmisaka /* entry and hook access functions */
40*437bfbebSnyanmisaka #ifdef KMPP_OBJ_ENTRY_TABLE
41*437bfbebSnyanmisaka /* disable all hierarchy macro in header */
42*437bfbebSnyanmisaka #define CFG_DEF_START(...)
43*437bfbebSnyanmisaka #define CFG_DEF_END(...)
44*437bfbebSnyanmisaka #define STRUCT_START(...)
45*437bfbebSnyanmisaka #define STRUCT_END(...)
46*437bfbebSnyanmisaka 
47*437bfbebSnyanmisaka #define ENTRY_DECLARE(prefix, ftype, type, name, flag, ...) \
48*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, set, __VA_ARGS__)(KMPP_OBJ_INTF_TYPE p, type val); \
49*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, get, __VA_ARGS__)(KMPP_OBJ_INTF_TYPE p, type* val); \
50*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, test, __VA_ARGS__)(KMPP_OBJ_INTF_TYPE p);
51*437bfbebSnyanmisaka 
52*437bfbebSnyanmisaka #define STRCT_DECLARE(prefix, ftype, type, name, flag, ...) \
53*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, set, __VA_ARGS__)(KMPP_OBJ_INTF_TYPE p, type* val); \
54*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, get, __VA_ARGS__)(KMPP_OBJ_INTF_TYPE p, type* val); \
55*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, test, __VA_ARGS__)(KMPP_OBJ_INTF_TYPE p);
56*437bfbebSnyanmisaka 
57*437bfbebSnyanmisaka #define ALIAS_DECLARE(prefix, ftype, type, name, flag, ...)
58*437bfbebSnyanmisaka 
59*437bfbebSnyanmisaka #ifdef __cplusplus
60*437bfbebSnyanmisaka extern "C" {
61*437bfbebSnyanmisaka #endif
62*437bfbebSnyanmisaka 
63*437bfbebSnyanmisaka KMPP_OBJ_ENTRY_TABLE(KMPP_OBJ_NAME, ENTRY_DECLARE, STRCT_DECLARE,
64*437bfbebSnyanmisaka                      ENTRY_DECLARE, STRCT_DECLARE, ALIAS_DECLARE)
65*437bfbebSnyanmisaka 
66*437bfbebSnyanmisaka #ifdef __cplusplus
67*437bfbebSnyanmisaka }
68*437bfbebSnyanmisaka #endif
69*437bfbebSnyanmisaka 
70*437bfbebSnyanmisaka #undef ENTRY_DECLARE
71*437bfbebSnyanmisaka #undef ENTRY_TO_ALIAS
72*437bfbebSnyanmisaka #undef STRCT_DECLARE
73*437bfbebSnyanmisaka 
74*437bfbebSnyanmisaka #undef CFG_DEF_START
75*437bfbebSnyanmisaka #undef CFG_DEF_END
76*437bfbebSnyanmisaka #undef STRUCT_START
77*437bfbebSnyanmisaka #undef STRUCT_END
78*437bfbebSnyanmisaka 
79*437bfbebSnyanmisaka #endif /* KMPP_OBJ_ENTRY_TABLE */
80*437bfbebSnyanmisaka 
81*437bfbebSnyanmisaka #ifdef KMPP_OBJ_FUNC_IOCTL
82*437bfbebSnyanmisaka 
83*437bfbebSnyanmisaka #define IOCTL_CTX(prefix, func, ...) \
84*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, func)(KMPP_OBJ_INTF_TYPE ctx);
85*437bfbebSnyanmisaka 
86*437bfbebSnyanmisaka #define IOCTL_IN_(prefix, func, in_type, ...) \
87*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, func)(KMPP_OBJ_INTF_TYPE ctx, in_type in);
88*437bfbebSnyanmisaka 
89*437bfbebSnyanmisaka #define IOCTL_OUT(prefix, func, out_type, ...) \
90*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, func)(KMPP_OBJ_INTF_TYPE ctx, out_type *out);
91*437bfbebSnyanmisaka 
92*437bfbebSnyanmisaka #define IOCTL_IO_(prefix, func, in_type, out_type, ...) \
93*437bfbebSnyanmisaka     rk_s32 CONCAT_US(prefix, func)(KMPP_OBJ_INTF_TYPE ctx, in_type in, out_type *out);
94*437bfbebSnyanmisaka 
95*437bfbebSnyanmisaka #ifdef __cplusplus
96*437bfbebSnyanmisaka extern "C" {
97*437bfbebSnyanmisaka #endif
98*437bfbebSnyanmisaka 
99*437bfbebSnyanmisaka KMPP_OBJ_FUNC_IOCTL(KMPP_OBJ_NAME, IOCTL_CTX, IOCTL_IN_, IOCTL_OUT, IOCTL_IO_)
100*437bfbebSnyanmisaka 
101*437bfbebSnyanmisaka #ifdef __cplusplus
102*437bfbebSnyanmisaka }
103*437bfbebSnyanmisaka #endif
104*437bfbebSnyanmisaka 
105*437bfbebSnyanmisaka #undef IOCTL_CTX
106*437bfbebSnyanmisaka #undef IOCTL_IN_
107*437bfbebSnyanmisaka #undef IOCTL_OUT
108*437bfbebSnyanmisaka #undef IOCTL_IO_
109*437bfbebSnyanmisaka 
110*437bfbebSnyanmisaka #endif /* KMPP_OBJ_FUNC_IOCTL */
111*437bfbebSnyanmisaka 
112*437bfbebSnyanmisaka #undef KMPP_OBJ_NAME
113*437bfbebSnyanmisaka #undef KMPP_OBJ_INTF_TYPE
114*437bfbebSnyanmisaka #undef KMPP_OBJ_ENTRY_TABLE
115*437bfbebSnyanmisaka #undef KMPP_OBJ_FUNC_IOCTL
116