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_RUNTIME_COMM_H__
171bd4fe43Sopenharmony_ci#define __HI_RUNTIME_COMM_H__
181bd4fe43Sopenharmony_ci#include "hi_type.h"
191bd4fe43Sopenharmony_ci
201bd4fe43Sopenharmony_ci#ifdef __cplusplus
211bd4fe43Sopenharmony_ci#if __cplusplus
221bd4fe43Sopenharmony_ciextern "C" {
231bd4fe43Sopenharmony_ci#endif
241bd4fe43Sopenharmony_ci#endif /* __cplusplus */
251bd4fe43Sopenharmony_ci
261bd4fe43Sopenharmony_ci#define MAX_NAME_LEN 64                 /* Model max name */
271bd4fe43Sopenharmony_ci#define FULL_NAME_LEN 130
281bd4fe43Sopenharmony_ci
291bd4fe43Sopenharmony_citypedef HI_VOID *HI_MW_PTR;                /* Handle define for model and tasks */
301bd4fe43Sopenharmony_ci
311bd4fe43Sopenharmony_ci#ifndef IN
321bd4fe43Sopenharmony_ci#define IN
331bd4fe43Sopenharmony_ci#endif
341bd4fe43Sopenharmony_ci
351bd4fe43Sopenharmony_ci#ifndef OUT
361bd4fe43Sopenharmony_ci#define OUT
371bd4fe43Sopenharmony_ci#endif
381bd4fe43Sopenharmony_ci
391bd4fe43Sopenharmony_ci#ifndef INOUT
401bd4fe43Sopenharmony_ci#define INOUT
411bd4fe43Sopenharmony_ci#endif
421bd4fe43Sopenharmony_ci
431bd4fe43Sopenharmony_ci/* Blob type */
441bd4fe43Sopenharmony_citypedef enum hiRUNTIME_BLOB_TYPE_E {
451bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_TYPE_S32       =  0x0,
461bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_TYPE_U8        =  0x1,
471bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_TYPE_YVU420SP  =  0x2,
481bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_TYPE_YVU422SP  =  0x3,
491bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_TYPE_VEC_S32   =  0x4,
501bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_TYPE_SEQ_S32   =  0x5,
511bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_TYPE_BUTT
521bd4fe43Sopenharmony_ci} HI_RUNTIME_BLOB_TYPE_E;
531bd4fe43Sopenharmony_ci
541bd4fe43Sopenharmony_citypedef enum hiRUNTIME_GROUP_PRIORITY_E {
551bd4fe43Sopenharmony_ci    HI_RUNTIME_GROUP_PRIORITY_HIGHEST = 0x0,
561bd4fe43Sopenharmony_ci    HI_RUNTIME_GROUP_PRIORITY_HIGH,
571bd4fe43Sopenharmony_ci    HI_RUNTIME_GROUP_PRIORITY_MEDIUM,
581bd4fe43Sopenharmony_ci    HI_RUNTIME_GROUP_PRIORITY_LOW,
591bd4fe43Sopenharmony_ci    HI_RUNTIME_GROUP_PRIORITY_LOWEST,
601bd4fe43Sopenharmony_ci    HI_RUNTIME_GROUP_PRIORITY_BUTT
611bd4fe43Sopenharmony_ci} HI_RUNTIME_GROUP_PRIORITY_E;
621bd4fe43Sopenharmony_ci
631bd4fe43Sopenharmony_ci/****************************** Blob struct ******************************
641bd4fe43Sopenharmony_ciIn Caffe, the blob contain shape info as the following order:
651bd4fe43Sopenharmony_ciImage\FeatureMap:               N       C       H       W
661bd4fe43Sopenharmony_ciRNN\LSTM(Recurrent) vector:     T       N       D
671bd4fe43Sopenharmony_ci
681bd4fe43Sopenharmony_ciThe relationship of the following blob struct with Caffe blob is as follows:
691bd4fe43Sopenharmony_ciImage\FeatureMap:               Num    Chn    Height   With
701bd4fe43Sopenharmony_ciRNN\LSTM(SEQ_S32) vector:       Step   Num     Dim
711bd4fe43Sopenharmony_ciThe stride, which measuring unit is byte, is always algined by the width or
721bd4fe43Sopenharmony_cidim direction.
731bd4fe43Sopenharmony_ci**************************************************************************/
741bd4fe43Sopenharmony_citypedef struct hiRUNTIME_BLOB_S {
751bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_TYPE_E enBlobType;  /* Blob type */
761bd4fe43Sopenharmony_ci    HI_U32 u32Stride;                /* Stride, a line bytes num */
771bd4fe43Sopenharmony_ci    HI_U64 u64VirAddr;               /* virtual addr */
781bd4fe43Sopenharmony_ci    HI_U64 u64PhyAddr;               /* physical addr */
791bd4fe43Sopenharmony_ci
801bd4fe43Sopenharmony_ci    HI_U32 u32Num;                   /* N: frame num or sequence num, correspond to caffe blob's n */
811bd4fe43Sopenharmony_ci    union {
821bd4fe43Sopenharmony_ci        struct {
831bd4fe43Sopenharmony_ci            HI_U32 u32Width;         /* W: frame width, correspond to caffe blob's w */
841bd4fe43Sopenharmony_ci            HI_U32 u32Height;        /* H: frame height, correspond to caffe blob's h */
851bd4fe43Sopenharmony_ci            HI_U32 u32Chn;           /* C: frame channel, correspond to caffe blob's c */
861bd4fe43Sopenharmony_ci        } stWhc;
871bd4fe43Sopenharmony_ci        struct {
881bd4fe43Sopenharmony_ci            HI_U32 u32Dim;           /* D: vecotr dimension */
891bd4fe43Sopenharmony_ci            HI_U64 u64VirAddrStep;   /* T: virtual adress of time steps array in each sequence */
901bd4fe43Sopenharmony_ci        } stSeq;
911bd4fe43Sopenharmony_ci    } unShape;
921bd4fe43Sopenharmony_ci} HI_RUNTIME_BLOB_S, *HI_RUNTIME_BLOB_PTR;
931bd4fe43Sopenharmony_ci
941bd4fe43Sopenharmony_citypedef struct hiRUNTIME_SRC_BLOB_ARRAY_S {
951bd4fe43Sopenharmony_ci    HI_U32 u32BlobNum;
961bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_S *pstBlobs;
971bd4fe43Sopenharmony_ci} HI_RUNTIME_BLOB_ARRAY_S, *HI_RUNTIME_BLOB_ARRAY_PTR;
981bd4fe43Sopenharmony_ci
991bd4fe43Sopenharmony_citypedef HI_RUNTIME_BLOB_ARRAY_S HI_RUNTIME_SRC_BLOB_ARRAY_S;
1001bd4fe43Sopenharmony_citypedef HI_RUNTIME_BLOB_ARRAY_S HI_RUNTIME_DST_BLOB_ARRAY_S;
1011bd4fe43Sopenharmony_citypedef HI_RUNTIME_BLOB_ARRAY_PTR HI_RUNTIME_SRC_BLOB_ARRAY_PTR;
1021bd4fe43Sopenharmony_citypedef HI_RUNTIME_BLOB_ARRAY_PTR HI_RUNTIME_DST_BLOB_ARRAY_PTR;
1031bd4fe43Sopenharmony_ci
1041bd4fe43Sopenharmony_citypedef struct hiRUNTIME_GROUP_BLOB_S {
1051bd4fe43Sopenharmony_ci    HI_RUNTIME_BLOB_PTR pstBlob;
1061bd4fe43Sopenharmony_ci    HI_CHAR acOwnerName[MAX_NAME_LEN + 1];
1071bd4fe43Sopenharmony_ci    HI_CHAR acBlobName[MAX_NAME_LEN + 1];
1081bd4fe43Sopenharmony_ci} HI_RUNTIME_GROUP_BLOB_S, *HI_RUNTIME_GROUP_BLOB_PTR;
1091bd4fe43Sopenharmony_ci
1101bd4fe43Sopenharmony_citypedef HI_RUNTIME_GROUP_BLOB_S HI_RUNTIME_GROUP_SRC_BLOB_S;
1111bd4fe43Sopenharmony_citypedef HI_RUNTIME_GROUP_BLOB_S HI_RUNTIME_GROUP_DST_BLOB_S;
1121bd4fe43Sopenharmony_ci
1131bd4fe43Sopenharmony_ci/* Mem information */
1141bd4fe43Sopenharmony_citypedef struct hiRUNTIME_MEM_S {
1151bd4fe43Sopenharmony_ci    HI_U64  u64PhyAddr; /* RW;The physical address of the memory */
1161bd4fe43Sopenharmony_ci    HI_U64  u64VirAddr; /* RW;The virtual address of the memory */
1171bd4fe43Sopenharmony_ci    HI_U32  u32Size;    /* RW;The size of memory */
1181bd4fe43Sopenharmony_ci} HI_RUNTIME_MEM_S, *HI_RUNTIME_MEM_PTR;
1191bd4fe43Sopenharmony_ci
1201bd4fe43Sopenharmony_citypedef HI_S32 (*HI_RUNTIME_AllocMem)(INOUT HI_RUNTIME_MEM_S *pstMemInfo);
1211bd4fe43Sopenharmony_citypedef HI_S32 (*HI_RUNTIME_FlushCache)(HI_RUNTIME_MEM_S *pstMemInfo);
1221bd4fe43Sopenharmony_citypedef HI_S32 (*HI_RUNTIME_FreeMem)(HI_RUNTIME_MEM_S *pstMemInfo);
1231bd4fe43Sopenharmony_ci
1241bd4fe43Sopenharmony_citypedef struct hiRUNTIME_MEM_CTRL_S {
1251bd4fe43Sopenharmony_ci    HI_RUNTIME_AllocMem allocMem;
1261bd4fe43Sopenharmony_ci    HI_RUNTIME_FlushCache flushMem;
1271bd4fe43Sopenharmony_ci    HI_RUNTIME_FreeMem freeMem;
1281bd4fe43Sopenharmony_ci} HI_RUNTIME_MEM_CTRL_S;
1291bd4fe43Sopenharmony_ci
1301bd4fe43Sopenharmony_citypedef struct hiRUNTIME_WK_MEM_S {
1311bd4fe43Sopenharmony_ci    HI_CHAR acModelName[MAX_NAME_LEN + 1];
1321bd4fe43Sopenharmony_ci    HI_RUNTIME_MEM_S stWKMemory;
1331bd4fe43Sopenharmony_ci} HI_RUNTIME_WK_INFO_S;
1341bd4fe43Sopenharmony_ci
1351bd4fe43Sopenharmony_citypedef struct hiRUNTIME_WK_MEM_ARRAY_S {
1361bd4fe43Sopenharmony_ci    HI_U32 u32WKNum;
1371bd4fe43Sopenharmony_ci    HI_RUNTIME_WK_INFO_S *pstAttrs;
1381bd4fe43Sopenharmony_ci} HI_RUNTIME_WK_INFO_ARRAY_S, *HI_RUNTIME_WK_INFO_ARRAY_PTR;
1391bd4fe43Sopenharmony_ci
1401bd4fe43Sopenharmony_citypedef struct hiRUNTIME_COP_ATTR_S {
1411bd4fe43Sopenharmony_ci    HI_CHAR acModelName[MAX_NAME_LEN + 1];
1421bd4fe43Sopenharmony_ci    HI_CHAR acCopName[MAX_NAME_LEN + 1];
1431bd4fe43Sopenharmony_ci    HI_U32 u32ConstParamSize;
1441bd4fe43Sopenharmony_ci    HI_VOID *pConstParam;
1451bd4fe43Sopenharmony_ci} HI_RUNTIME_COP_ATTR_S, *HI_RUNTIME_COP_ATTR_PTR;
1461bd4fe43Sopenharmony_ci
1471bd4fe43Sopenharmony_citypedef struct hiRUNTIME_COP_ATTR_ARRAY_S {
1481bd4fe43Sopenharmony_ci    HI_U32 u32CopNum;
1491bd4fe43Sopenharmony_ci    HI_RUNTIME_COP_ATTR_S *pstAttrs;
1501bd4fe43Sopenharmony_ci} HI_RUNTIME_COP_ATTR_ARRAY_S, *HI_RUNTIME_COP_ATTR_ARRAY_PTR;
1511bd4fe43Sopenharmony_ci
1521bd4fe43Sopenharmony_ci/* Forward callback event */
1531bd4fe43Sopenharmony_citypedef enum hiRUNTIME_FORWARD_STATUS_CALLBACK_E {
1541bd4fe43Sopenharmony_ci    HI_RUNTIME_FORWARD_STATUS_SUCC = 0x0,
1551bd4fe43Sopenharmony_ci    HI_RUNTIME_FORWARD_STATUS_FAIL,
1561bd4fe43Sopenharmony_ci    HI_RUNTIME_FORWARD_STATUS_ABORT,
1571bd4fe43Sopenharmony_ci    HI_RUNTIME_FORWARD_STATUS_BUTT
1581bd4fe43Sopenharmony_ci} HI_RUNTIME_FORWARD_STATUS_CALLBACK_E;
1591bd4fe43Sopenharmony_ci
1601bd4fe43Sopenharmony_citypedef HI_S32 (*HI_RUNTIME_Connector_Compute) (HI_RUNTIME_SRC_BLOB_ARRAY_S* pstConnectorSrc,
1611bd4fe43Sopenharmony_ci    HI_RUNTIME_DST_BLOB_ARRAY_S* pstConnectorDst, HI_U64 u64SrcId, HI_VOID* pParam);
1621bd4fe43Sopenharmony_ci
1631bd4fe43Sopenharmony_citypedef struct hiRUNTIME_CONNECTOR_ATTR_S {
1641bd4fe43Sopenharmony_ci    HI_CHAR acName[MAX_NAME_LEN + 1];
1651bd4fe43Sopenharmony_ci    HI_RUNTIME_Connector_Compute pConnectorFun;
1661bd4fe43Sopenharmony_ci    HI_VOID *pParam;
1671bd4fe43Sopenharmony_ci} HI_RUNTIME_CONNECTOR_ATTR_S;
1681bd4fe43Sopenharmony_ci
1691bd4fe43Sopenharmony_citypedef struct hiRUNTIME_CONNECTOR_ATTR_ARRAY_S {
1701bd4fe43Sopenharmony_ci    HI_U32 u32ConnectorNum;
1711bd4fe43Sopenharmony_ci    HI_RUNTIME_CONNECTOR_ATTR_S *pstAttrs;
1721bd4fe43Sopenharmony_ci} HI_RUNTIME_CONNECTOR_ATTR_ARRAY_S, *HI_RUNTIME_CONNECTOR_ATTR_ARRAY_PTR;
1731bd4fe43Sopenharmony_ci
1741bd4fe43Sopenharmony_citypedef struct hiRUNTIME_GROUP_INFO_S {
1751bd4fe43Sopenharmony_ci    HI_RUNTIME_WK_INFO_ARRAY_S stWKsInfo;
1761bd4fe43Sopenharmony_ci    HI_RUNTIME_COP_ATTR_ARRAY_S stCopsAttr;
1771bd4fe43Sopenharmony_ci    HI_RUNTIME_CONNECTOR_ATTR_ARRAY_S stConnectorsAttr;
1781bd4fe43Sopenharmony_ci} HI_RUNTIME_GROUP_INFO_S, *HI_RUNTIME_GROUP_INFO_PTR;
1791bd4fe43Sopenharmony_ci
1801bd4fe43Sopenharmony_ci/* handle info after LoadModelGroup */
1811bd4fe43Sopenharmony_citypedef HI_VOID *HI_RUNTIME_GROUP_HANDLE;
1821bd4fe43Sopenharmony_ci
1831bd4fe43Sopenharmony_ci/* the src blobs of group, all model inputs are inside */
1841bd4fe43Sopenharmony_citypedef struct hiRUNTIME_GROUP_BLOB_ARRAY_S {
1851bd4fe43Sopenharmony_ci    HI_U32 u32BlobNum;
1861bd4fe43Sopenharmony_ci    HI_RUNTIME_GROUP_BLOB_S *pstBlobs;
1871bd4fe43Sopenharmony_ci} HI_RUNTIME_GROUP_BLOB_ARRAY_S, *HI_RUNTIME_GROUP_BLOB_ARRAY_PTR;
1881bd4fe43Sopenharmony_ci
1891bd4fe43Sopenharmony_citypedef HI_RUNTIME_GROUP_BLOB_ARRAY_S HI_RUNTIME_GROUP_SRC_BLOB_ARRAY_S;
1901bd4fe43Sopenharmony_citypedef HI_RUNTIME_GROUP_BLOB_ARRAY_S HI_RUNTIME_GROUP_DST_BLOB_ARRAY_S;
1911bd4fe43Sopenharmony_citypedef HI_RUNTIME_GROUP_BLOB_ARRAY_S *HI_RUNTIME_GROUP_SRC_BLOB_ARRAY_PTR;
1921bd4fe43Sopenharmony_citypedef HI_RUNTIME_GROUP_BLOB_ARRAY_S *HI_RUNTIME_GROUP_DST_BLOB_ARRAY_PTR;
1931bd4fe43Sopenharmony_ci
1941bd4fe43Sopenharmony_ci/**
1951bd4fe43Sopenharmony_ci\brief forward result calback function.
1961bd4fe43Sopenharmony_ci\attention \n
1971bd4fe43Sopenharmony_cinone.
1981bd4fe43Sopenharmony_ci\param[out] enEvent:  Result message of forward.
1991bd4fe43Sopenharmony_ci\param[out] pstGroup: Group Handle
2001bd4fe43Sopenharmony_ci\param[out] u64SrcId: Frame ID
2011bd4fe43Sopenharmony_ci\param[out] pstDst:   Result blob
2021bd4fe43Sopenharmony_ci\see \n
2031bd4fe43Sopenharmony_cinone.
2041bd4fe43Sopenharmony_ci*/
2051bd4fe43Sopenharmony_citypedef HI_S32 (*HI_RUNTIME_Forward_Callback)(HI_RUNTIME_FORWARD_STATUS_CALLBACK_E enEvent,
2061bd4fe43Sopenharmony_ci    HI_RUNTIME_GROUP_HANDLE hGroupHandle, HI_U64 u64SrcId, HI_RUNTIME_GROUP_DST_BLOB_ARRAY_PTR pstDst);
2071bd4fe43Sopenharmony_ci
2081bd4fe43Sopenharmony_ci// errno message
2091bd4fe43Sopenharmony_cienum {
2101bd4fe43Sopenharmony_ci    HI_ERR_SVP_RUNTIME_BASE = (HI_S32)(0xFF000F00),
2111bd4fe43Sopenharmony_ci    HI_ERR_SVP_RUNTIME_ILLEGAL_STATE,
2121bd4fe43Sopenharmony_ci    HI_ERR_SVP_RUNTIME_MODEL_NOLOAD,
2131bd4fe43Sopenharmony_ci    HI_ERR_SVP_RUNTIME_NULL_PTR,
2141bd4fe43Sopenharmony_ci    HI_ERR_SVP_RUNTIME_INVALID_PARAM,
2151bd4fe43Sopenharmony_ci    HI_ERR_SVP_RUNTIME_SDK_ERROR,
2161bd4fe43Sopenharmony_ci    HI_ERR_SVP_RUNTIME_SDK_NOMEM,
2171bd4fe43Sopenharmony_ci};
2181bd4fe43Sopenharmony_ci
2191bd4fe43Sopenharmony_ci#ifndef hi_unsed
2201bd4fe43Sopenharmony_ci#define hi_unused(x)    ((hi_void)x)
2211bd4fe43Sopenharmony_ci#endif
2221bd4fe43Sopenharmony_ci
2231bd4fe43Sopenharmony_ci#ifdef __cplusplus
2241bd4fe43Sopenharmony_ci#if __cplusplus
2251bd4fe43Sopenharmony_ci}
2261bd4fe43Sopenharmony_ci#endif
2271bd4fe43Sopenharmony_ci#endif /* __cplusplus */
2281bd4fe43Sopenharmony_ci
2291bd4fe43Sopenharmony_ci#endif /* __HI_RUNTIME_COMM_H__ */
230