11bd4fe43Sopenharmony_ci/*
21bd4fe43Sopenharmony_ci * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
61bd4fe43Sopenharmony_ci *
71bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
131bd4fe43Sopenharmony_ci * limitations under the License.
141bd4fe43Sopenharmony_ci */
151bd4fe43Sopenharmony_ci
161bd4fe43Sopenharmony_ci#ifndef __HI_PLUGIN_TYPE_H__
171bd4fe43Sopenharmony_ci#define __HI_PLUGIN_TYPE_H__
181bd4fe43Sopenharmony_ci
191bd4fe43Sopenharmony_ci#include "hi_type.h"
201bd4fe43Sopenharmony_ci
211bd4fe43Sopenharmony_ci#if defined(_MSC_VER)
221bd4fe43Sopenharmony_ci#define EXPORT __declspec(dllexport)
231bd4fe43Sopenharmony_ci#elif defined(__GNUC__)
241bd4fe43Sopenharmony_ci#define EXPORT __attribute__((visibility("default")))
251bd4fe43Sopenharmony_ci#else
261bd4fe43Sopenharmony_ci#define EXPORT
271bd4fe43Sopenharmony_ci#pragma warning cant export dynamic symbos
281bd4fe43Sopenharmony_ci#endif
291bd4fe43Sopenharmony_ci
301bd4fe43Sopenharmony_ci#ifdef __cplusplus
311bd4fe43Sopenharmony_ci#if __cplusplus
321bd4fe43Sopenharmony_ciextern "C" {
331bd4fe43Sopenharmony_ci#endif
341bd4fe43Sopenharmony_ci#endif /* __cplusplus */
351bd4fe43Sopenharmony_ci
361bd4fe43Sopenharmony_cienum {
371bd4fe43Sopenharmony_ci    MAX_OPERAND_NAME_LEN = 64,
381bd4fe43Sopenharmony_ci};
391bd4fe43Sopenharmony_ci
401bd4fe43Sopenharmony_citypedef struct hiNodePlugin_Shape_S {
411bd4fe43Sopenharmony_ci    HI_S32 s32H;
421bd4fe43Sopenharmony_ci    HI_S32 s32W;
431bd4fe43Sopenharmony_ci    HI_S32 s32C;
441bd4fe43Sopenharmony_ci} HI_NodePlugin_Shape_S;
451bd4fe43Sopenharmony_ci
461bd4fe43Sopenharmony_citypedef enum hiNodePlugin_ElemType_E {
471bd4fe43Sopenharmony_ci    ELEM_TYPE_U8,
481bd4fe43Sopenharmony_ci    ELEM_TYPE_U16,
491bd4fe43Sopenharmony_ci    ELEM_TYPE_U32
501bd4fe43Sopenharmony_ci} HI_NodePlugin_ElemType_E;
511bd4fe43Sopenharmony_ci
521bd4fe43Sopenharmony_citypedef struct hiNodePlugin_Operand_S {
531bd4fe43Sopenharmony_ci    HI_U64 u64Offset;  // addr
541bd4fe43Sopenharmony_ci    HI_CHAR mName[MAX_OPERAND_NAME_LEN + 1];
551bd4fe43Sopenharmony_ci    HI_NodePlugin_ElemType_E enElemType;
561bd4fe43Sopenharmony_ci    HI_U32 u32Num;
571bd4fe43Sopenharmony_ci    HI_U32 u32Stride;
581bd4fe43Sopenharmony_ci    HI_NodePlugin_Shape_S stShape;
591bd4fe43Sopenharmony_ci} HI_NodePlugin_Operand_S;
601bd4fe43Sopenharmony_ci
611bd4fe43Sopenharmony_citypedef struct HiNodeParam {
621bd4fe43Sopenharmony_ci    HI_VOID *pParam;
631bd4fe43Sopenharmony_ci    HI_U32 u32Size;
641bd4fe43Sopenharmony_ci} HI_NodePlugin_NodeParam_S;
651bd4fe43Sopenharmony_ci
661bd4fe43Sopenharmony_citypedef HI_S32 (*NodePluginCompute)(const HI_NodePlugin_Operand_S *, HI_U32, HI_NodePlugin_Operand_S *,
671bd4fe43Sopenharmony_ci    HI_U32, HI_NodePlugin_NodeParam_S *, HI_NodePlugin_NodeParam_S *);
681bd4fe43Sopenharmony_ci
691bd4fe43Sopenharmony_citypedef HI_S32 (*NodePluginGetType)(HI_CHAR pszNodeType[]);
701bd4fe43Sopenharmony_ci
711bd4fe43Sopenharmony_ciEXPORT HI_S32 HI_NodePlugin_Compute(const HI_NodePlugin_Operand_S *pstInputs, HI_U32 u32InputNum,
721bd4fe43Sopenharmony_ci                                    HI_NodePlugin_Operand_S *pstOutputs,
731bd4fe43Sopenharmony_ci                                    HI_U32 u32Outputs, HI_NodePlugin_NodeParam_S *pstHyperParam,
741bd4fe43Sopenharmony_ci                                    HI_NodePlugin_NodeParam_S *pstTrainingParam);
751bd4fe43Sopenharmony_ci
761bd4fe43Sopenharmony_ciEXPORT HI_S32 HI_NodePlugin_getNodeType(HI_CHAR pszNodeType[]);
771bd4fe43Sopenharmony_ci
781bd4fe43Sopenharmony_ci#ifdef __cplusplus
791bd4fe43Sopenharmony_ci#if __cplusplus
801bd4fe43Sopenharmony_ci}
811bd4fe43Sopenharmony_ci#endif
821bd4fe43Sopenharmony_ci#endif /* __cplusplus */
831bd4fe43Sopenharmony_ci
841bd4fe43Sopenharmony_ci#endif
85