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