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