/* SPDX-License-Identifier: Apache-2.0 OR MIT */ /* * Copyright (c) 2020 Rockchip Electronics Co., Ltd. */ #define MODULE_TAG "mpp_cfg" #include #include "mpp_env.h" #include "mpp_cfg.h" #include "mpp_debug.h" static void show_cfg_entry_err(KmppEntry *node, ElemType type, const char *func, const char *name) { mpp_err("%s cfg %s expect %s input NOT %s\n", func, name, strof_elem_type(node->tbl.elem_type), strof_elem_type(type)); } MPP_RET check_cfg_entry(KmppEntry *node, const char *name, ElemType type, const char *func) { if (NULL == node) { mpp_err("%s: cfg %s is invalid\n", func, name); return MPP_NOK; } ElemType cfg_type = (ElemType)node->tbl.elem_type; RK_S32 cfg_size = node->tbl.elem_size; MPP_RET ret = MPP_OK; switch (type) { case ELEM_TYPE_st : case ELEM_TYPE_arr : { if (cfg_type != type) { show_cfg_entry_err(node, type, func, name); ret = MPP_NOK; } if (cfg_size <= 0) { mpp_err("%s: cfg %s found invalid size %d\n", func, name, cfg_size); ret = MPP_NOK; } } break; case ELEM_TYPE_ptr : { if (cfg_type != type) { show_cfg_entry_err(node, type, func, name); ret = MPP_NOK; } } break; case ELEM_TYPE_s8 : case ELEM_TYPE_u8 : { if (cfg_size != sizeof(RK_S8)) { show_cfg_entry_err(node, type, func, name); ret = MPP_NOK; } } break; case ELEM_TYPE_s16 : case ELEM_TYPE_u16 : { if (cfg_size != sizeof(RK_S16)) { show_cfg_entry_err(node, type, func, name); ret = MPP_NOK; } } break; case ELEM_TYPE_s32 : case ELEM_TYPE_u32 : { if (cfg_size != sizeof(RK_S32)) { show_cfg_entry_err(node, type, func, name); ret = MPP_NOK; } } break; case ELEM_TYPE_s64 : case ELEM_TYPE_u64 : { if (cfg_size != sizeof(RK_S64)) { show_cfg_entry_err(node, type, func, name); ret = MPP_NOK; } } break; default : { mpp_err("%s: cfg %s found invalid cfg type %d\n", func, name, type); ret = MPP_NOK; } break; } return ret; }