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_NNIE_H_ 171bd4fe43Sopenharmony_ci#define _HI_NNIE_H_ 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ci#include "hi_comm_svp.h" 201bd4fe43Sopenharmony_ci#include "hi_common.h" 211bd4fe43Sopenharmony_ci 221bd4fe43Sopenharmony_ci#ifdef __cplusplus 231bd4fe43Sopenharmony_ci#if __cplusplus 241bd4fe43Sopenharmony_ciextern "C" { 251bd4fe43Sopenharmony_ci#endif 261bd4fe43Sopenharmony_ci#endif 271bd4fe43Sopenharmony_ci 281bd4fe43Sopenharmony_ci/* SVP_NNIE Error Code */ 291bd4fe43Sopenharmony_citypedef enum hiEN_SVP_NNIE_ERR_CODE_E { 301bd4fe43Sopenharmony_ci ERR_SVP_NNIE_SYS_TIMEOUT = 0x40, /* SVP_NNIE process timeout */ 311bd4fe43Sopenharmony_ci ERR_SVP_NNIE_QUERY_TIMEOUT = 0x41, /* SVP_NNIE query timeout */ 321bd4fe43Sopenharmony_ci ERR_SVP_NNIE_CFG_ERR = 0x42, /* SVP_NNIE Configure error */ 331bd4fe43Sopenharmony_ci ERR_SVP_NNIE_OPEN_FILE = 0x43, /* SVP NNIE open file error */ 341bd4fe43Sopenharmony_ci ERR_SVP_NNIE_READ_FILE = 0x44, /* SVP NNIE read file error */ 351bd4fe43Sopenharmony_ci ERR_SVP_NNIE_WRITE_FILE = 0x45, /* SVP NNIE write file error */ 361bd4fe43Sopenharmony_ci 371bd4fe43Sopenharmony_ci ERR_SVP_NNIE_BUTT 381bd4fe43Sopenharmony_ci} EN_SVP_NNIE_ERR_CODE_E; 391bd4fe43Sopenharmony_ci/* Invalid device ID */ 401bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_INVALID_DEVID HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID) 411bd4fe43Sopenharmony_ci/* Invalid channel ID */ 421bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_INVALID_CHNID HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID) 431bd4fe43Sopenharmony_ci/* At least one parameter is illegal. For example, an illegal enumeration value exists. */ 441bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM) 451bd4fe43Sopenharmony_ci/* The channel exists. */ 461bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_EXIST HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST) 471bd4fe43Sopenharmony_ci/* The UN exists. */ 481bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_UNEXIST HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST) 491bd4fe43Sopenharmony_ci/* A null point is used. */ 501bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_NULL_PTR HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR) 511bd4fe43Sopenharmony_ci/* Try to enable or initialize the system, device, or channel before configuring attributes. */ 521bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_NOT_CONFIG HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG) 531bd4fe43Sopenharmony_ci/* The operation is not supported currently. */ 541bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_NOT_SURPPORT HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT) 551bd4fe43Sopenharmony_ci/* The operation, changing static attributes for example, is not permitted. */ 561bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_NOT_PERM HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM) 571bd4fe43Sopenharmony_ci/* A failure caused by the malloc memory occurs. */ 581bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_NOMEM HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM) 591bd4fe43Sopenharmony_ci/* A failure caused by the malloc buffer occurs. */ 601bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_NOBUF HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF) 611bd4fe43Sopenharmony_ci/* The buffer is empty. */ 621bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_BUF_EMPTY HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY) 631bd4fe43Sopenharmony_ci/* No buffer is provided for storing new data. */ 641bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_BUF_FULL HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL) 651bd4fe43Sopenharmony_ci/* The system is not ready because it may be not initialized or loaded. */ 661bd4fe43Sopenharmony_ci/* The error code is returned when a device file fails to be opened. */ 671bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_NOTREADY HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY) 681bd4fe43Sopenharmony_ci/* The source address or target address is incorrect during the operations */ 691bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_BADADDR HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_BADADDR) 701bd4fe43Sopenharmony_ci/* The resource is busy during the operations */ 711bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_BUSY HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY) 721bd4fe43Sopenharmony_ci/* SVP_NNIE process timeout */ 731bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_SYS_TIMEOUT HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_SYS_TIMEOUT) 741bd4fe43Sopenharmony_ci/* SVP_NNIE query timeout */ 751bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_QUERY_TIMEOUT HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_QUERY_TIMEOUT) 761bd4fe43Sopenharmony_ci/* SVP_NNIE configure error */ 771bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_CFG_ERR HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_CFG_ERR) 781bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_OPEN_FILE HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_OPEN_FILE) 791bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_READ_FILE HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_READ_FILE) 801bd4fe43Sopenharmony_ci#define HI_ERR_SVP_NNIE_WRITE_FILE HI_DEF_ERR(HI_ID_SVP_NNIE, EN_ERR_LEVEL_ERROR, ERR_SVP_NNIE_WRITE_FILE) 811bd4fe43Sopenharmony_ci 821bd4fe43Sopenharmony_ci/* macro */ 831bd4fe43Sopenharmony_ci#define SVP_NNIE_MAX_NET_SEG_NUM 8 /* NNIE max segment num that the net being cut into */ 841bd4fe43Sopenharmony_ci#define SVP_NNIE_MAX_INPUT_NUM 16 /* NNIE max input num in each seg */ 851bd4fe43Sopenharmony_ci#define SVP_NNIE_MAX_OUTPUT_NUM 16 /* NNIE max output num in each seg */ 861bd4fe43Sopenharmony_ci#define SVP_NNIE_MAX_ROI_LAYER_NUM_OF_SEG 2 /* NNIE max roi layer num in each seg */ 871bd4fe43Sopenharmony_ci#define SVP_NNIE_MAX_ROI_LAYER_NUM 4 /* NNIE max roi layer num */ 881bd4fe43Sopenharmony_ci#define SVP_NNIE_NODE_NAME_LEN 32 /* NNIE node name length */ 891bd4fe43Sopenharmony_ci 901bd4fe43Sopenharmony_ci/* NNIE core id */ 911bd4fe43Sopenharmony_citypedef enum hiSVP_NNIE_ID_E { 921bd4fe43Sopenharmony_ci SVP_NNIE_ID_0 = 0x0, 931bd4fe43Sopenharmony_ci 941bd4fe43Sopenharmony_ci SVP_NNIE_ID_BUTT 951bd4fe43Sopenharmony_ci} SVP_NNIE_ID_E; 961bd4fe43Sopenharmony_ci 971bd4fe43Sopenharmony_ci/* Run Mode */ 981bd4fe43Sopenharmony_citypedef enum hiSVP_NNIE_RUN_MODE_E { 991bd4fe43Sopenharmony_ci SVP_NNIE_RUN_MODE_CHIP = 0x0, /* on SOC chip running */ 1001bd4fe43Sopenharmony_ci SVP_NNIE_RUN_MODE_FUNC_SIM = 0x1, /* functional simultaion */ 1011bd4fe43Sopenharmony_ci 1021bd4fe43Sopenharmony_ci SVP_NNIE_RUN_MODE_BUTT 1031bd4fe43Sopenharmony_ci} SVP_NNIE_RUN_MODE_E; 1041bd4fe43Sopenharmony_ci 1051bd4fe43Sopenharmony_ci/* Network type */ 1061bd4fe43Sopenharmony_citypedef enum hiSVP_NNIE_NET_TYPE_E { 1071bd4fe43Sopenharmony_ci SVP_NNIE_NET_TYPE_CNN = 0x0, /* Non-ROI input cnn net */ 1081bd4fe43Sopenharmony_ci SVP_NNIE_NET_TYPE_ROI = 0x1, /* With ROI input cnn net */ 1091bd4fe43Sopenharmony_ci SVP_NNIE_NET_TYPE_RECURRENT = 0x2, /* RNN or LSTM net */ 1101bd4fe43Sopenharmony_ci 1111bd4fe43Sopenharmony_ci SVP_NNIE_NET_TYPE_BUTT 1121bd4fe43Sopenharmony_ci} SVP_NNIE_NET_TYPE_E; 1131bd4fe43Sopenharmony_ci 1141bd4fe43Sopenharmony_ci/* Node information */ 1151bd4fe43Sopenharmony_citypedef struct hiSVP_NNIE_NODE_S { 1161bd4fe43Sopenharmony_ci SVP_BLOB_TYPE_E enType; 1171bd4fe43Sopenharmony_ci union { 1181bd4fe43Sopenharmony_ci struct { 1191bd4fe43Sopenharmony_ci HI_U32 u32Width; 1201bd4fe43Sopenharmony_ci HI_U32 u32Height; 1211bd4fe43Sopenharmony_ci HI_U32 u32Chn; 1221bd4fe43Sopenharmony_ci } stWhc; 1231bd4fe43Sopenharmony_ci HI_U32 u32Dim; 1241bd4fe43Sopenharmony_ci } unShape; 1251bd4fe43Sopenharmony_ci HI_U32 u32NodeId; 1261bd4fe43Sopenharmony_ci HI_CHAR szName[SVP_NNIE_NODE_NAME_LEN]; /* Report layer bottom name or data layer bottom name */ 1271bd4fe43Sopenharmony_ci} SVP_NNIE_NODE_S; 1281bd4fe43Sopenharmony_ci 1291bd4fe43Sopenharmony_ci/* Roi/Psroi Pooling type */ 1301bd4fe43Sopenharmony_citypedef enum hiSVP_NNIE_ROIPOOL_TYPE_E { 1311bd4fe43Sopenharmony_ci SVP_NNIE_ROIPOOL_TYPE_NORMAL = 0x0, /* Roipooling */ 1321bd4fe43Sopenharmony_ci SVP_NNIE_ROIPOOL_TYPE_PS = 0x1, /* Position-Sensitive roipooling */ 1331bd4fe43Sopenharmony_ci 1341bd4fe43Sopenharmony_ci SVP_NNIE_ROIPOOL_TYPE_BUTT 1351bd4fe43Sopenharmony_ci} SVP_NNIE_ROIPOOL_TYPE_E; 1361bd4fe43Sopenharmony_ci 1371bd4fe43Sopenharmony_ci/* RoiPooling information */ 1381bd4fe43Sopenharmony_citypedef struct hiSVP_NNIE_ROIPOOL_INFO_S { 1391bd4fe43Sopenharmony_ci HI_U32 u32SrcHeight; /* ROI/PSROI Pooling src height */ 1401bd4fe43Sopenharmony_ci HI_U32 u32SrcWidth; /* ROI/PSROI Pooling src width */ 1411bd4fe43Sopenharmony_ci HI_U32 u32SrcMapNum; /* Input featrue map channel */ 1421bd4fe43Sopenharmony_ci 1431bd4fe43Sopenharmony_ci HI_U32 u32DstHeight; /* ROI/PSROI Pooling dst height */ 1441bd4fe43Sopenharmony_ci HI_U32 u32DstWidth; /* ROI/PSROI Pooling dst width */ 1451bd4fe43Sopenharmony_ci HI_U32 u32DstMapNum; /* Output featrue map channel */ 1461bd4fe43Sopenharmony_ci 1471bd4fe43Sopenharmony_ci HI_U32 u32DinWidthRamOffset; 1481bd4fe43Sopenharmony_ci HI_U32 u32DinHeightRamOffset; 1491bd4fe43Sopenharmony_ci HI_U32 u32TotalDinWidthRamOffset; 1501bd4fe43Sopenharmony_ci HI_U32 u32TotalDinHeightRamOffset; 1511bd4fe43Sopenharmony_ci 1521bd4fe43Sopenharmony_ci HI_U32 u32BlockMaxHeight; /* Block max height */ 1531bd4fe43Sopenharmony_ci HI_U32 u32BlockNum; /* Block number */ 1541bd4fe43Sopenharmony_ci HI_U32 u32BboxMaxNum; /* Bbox max number */ 1551bd4fe43Sopenharmony_ci HI_U32 u32SpatialScale; 1561bd4fe43Sopenharmony_ci 1571bd4fe43Sopenharmony_ci HI_BOOL bNormPPMode; /* whether use PingPang mode */ 1581bd4fe43Sopenharmony_ci HI_BOOL bTotalPPMode; /* whether use PingPang mode */ 1591bd4fe43Sopenharmony_ci HI_BOOL bHighPrec; /* whether use high precision mode */ 1601bd4fe43Sopenharmony_ci SVP_NNIE_ROIPOOL_TYPE_E enRoiPoolType; /* ROIPooling or PSROIPooling */ 1611bd4fe43Sopenharmony_ci HI_CHAR szName[SVP_NNIE_NODE_NAME_LEN]; /* Report layer bottom name or data layer bottom name */ 1621bd4fe43Sopenharmony_ci} SVP_NNIE_ROIPOOL_INFO_S; 1631bd4fe43Sopenharmony_ci 1641bd4fe43Sopenharmony_ci/* Segment information */ 1651bd4fe43Sopenharmony_citypedef struct hiSVP_NNIE_SEG_S { 1661bd4fe43Sopenharmony_ci SVP_NNIE_NET_TYPE_E enNetType; 1671bd4fe43Sopenharmony_ci HI_U16 u16SrcNum; 1681bd4fe43Sopenharmony_ci HI_U16 u16DstNum; 1691bd4fe43Sopenharmony_ci HI_U16 u16RoiPoolNum; 1701bd4fe43Sopenharmony_ci HI_U16 u16MaxStep; 1711bd4fe43Sopenharmony_ci 1721bd4fe43Sopenharmony_ci HI_U32 u32InstOffset; 1731bd4fe43Sopenharmony_ci HI_U32 u32InstLen; 1741bd4fe43Sopenharmony_ci 1751bd4fe43Sopenharmony_ci SVP_NNIE_NODE_S astSrcNode[SVP_NNIE_MAX_INPUT_NUM]; 1761bd4fe43Sopenharmony_ci SVP_NNIE_NODE_S astDstNode[SVP_NNIE_MAX_OUTPUT_NUM]; 1771bd4fe43Sopenharmony_ci HI_U32 au32RoiIdx[SVP_NNIE_MAX_ROI_LAYER_NUM_OF_SEG]; /* Roipooling info index */ 1781bd4fe43Sopenharmony_ci} SVP_NNIE_SEG_S; 1791bd4fe43Sopenharmony_ci 1801bd4fe43Sopenharmony_ci/* NNIE model */ 1811bd4fe43Sopenharmony_citypedef struct hiSVP_NNIE_MODEL_S { 1821bd4fe43Sopenharmony_ci SVP_NNIE_RUN_MODE_E enRunMode; 1831bd4fe43Sopenharmony_ci 1841bd4fe43Sopenharmony_ci HI_U32 u32TmpBufSize; /* temp buffer size */ 1851bd4fe43Sopenharmony_ci HI_U32 u32NetSegNum; 1861bd4fe43Sopenharmony_ci SVP_NNIE_SEG_S astSeg[SVP_NNIE_MAX_NET_SEG_NUM]; 1871bd4fe43Sopenharmony_ci SVP_NNIE_ROIPOOL_INFO_S astRoiInfo[SVP_NNIE_MAX_ROI_LAYER_NUM]; /* ROIPooling info */ 1881bd4fe43Sopenharmony_ci 1891bd4fe43Sopenharmony_ci SVP_MEM_INFO_S stBase; 1901bd4fe43Sopenharmony_ci} SVP_NNIE_MODEL_S; 1911bd4fe43Sopenharmony_ci 1921bd4fe43Sopenharmony_citypedef struct hiSVP_NNIE_FORWARD_CTRL_S { 1931bd4fe43Sopenharmony_ci HI_U32 u32SrcNum; /* input node num, [1, 16] */ 1941bd4fe43Sopenharmony_ci HI_U32 u32DstNum; /* output node num, [1, 16] */ 1951bd4fe43Sopenharmony_ci HI_U32 u32NetSegId; /* net segment index running on NNIE */ 1961bd4fe43Sopenharmony_ci SVP_NNIE_ID_E enNnieId; /* device target which running the seg */ 1971bd4fe43Sopenharmony_ci SVP_MEM_INFO_S stTmpBuf; /* auxiliary temp mem */ 1981bd4fe43Sopenharmony_ci SVP_MEM_INFO_S stTskBuf; /* auxiliary task mem */ 1991bd4fe43Sopenharmony_ci} SVP_NNIE_FORWARD_CTRL_S; 2001bd4fe43Sopenharmony_ci 2011bd4fe43Sopenharmony_citypedef struct hiSVP_NNIE_FORWARD_WITHBBOX_CTRL_S { 2021bd4fe43Sopenharmony_ci HI_U32 u32SrcNum; /* input node num, [1, 16] */ 2031bd4fe43Sopenharmony_ci HI_U32 u32DstNum; /* output node num, [1, 16] */ 2041bd4fe43Sopenharmony_ci HI_U32 u32ProposalNum; /* elment num of roi array */ 2051bd4fe43Sopenharmony_ci HI_U32 u32NetSegId; /* net segment index running on NNIE */ 2061bd4fe43Sopenharmony_ci SVP_NNIE_ID_E enNnieId; /* device target which running the seg */ 2071bd4fe43Sopenharmony_ci SVP_MEM_INFO_S stTmpBuf; /* auxiliary temp mem */ 2081bd4fe43Sopenharmony_ci SVP_MEM_INFO_S stTskBuf; /* auxiliary task mem */ 2091bd4fe43Sopenharmony_ci} SVP_NNIE_FORWARD_WITHBBOX_CTRL_S; 2101bd4fe43Sopenharmony_ci 2111bd4fe43Sopenharmony_ci#ifdef __cplusplus 2121bd4fe43Sopenharmony_ci#if __cplusplus 2131bd4fe43Sopenharmony_ci} 2141bd4fe43Sopenharmony_ci#endif 2151bd4fe43Sopenharmony_ci#endif 2161bd4fe43Sopenharmony_ci#endif /* _HI_NNIE_H_ */ 217