1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#ifndef OHOS_HDI_NNRT_V2_0_NNRTTYPES_H 17#define OHOS_HDI_NNRT_V2_0_NNRTTYPES_H 18 19#include <cstdbool> 20#include <cstdint> 21#include <map> 22#include <string> 23#include <vector> 24 25#ifndef HDI_BUFF_MAX_SIZE 26#define HDI_BUFF_MAX_SIZE (1024 * 200) 27#endif 28 29#ifndef HDI_CHECK_VALUE_RETURN 30#define HDI_CHECK_VALUE_RETURN(lv, compare, rv, ret) do { \ 31 if ((lv) compare (rv)) { \ 32 return ret; \ 33 } \ 34} while (false) 35#endif 36 37#ifndef HDI_CHECK_VALUE_RET_GOTO 38#define HDI_CHECK_VALUE_RET_GOTO(lv, compare, rv, ret, value, table) do { \ 39 if ((lv) compare (rv)) { \ 40 ret = value; \ 41 goto table; \ 42 } \ 43} while (false) 44#endif 45 46namespace OHOS { 47class MessageParcel; 48} 49 50namespace OHOS { 51namespace HDI { 52namespace Nnrt { 53namespace V2_0 { 54 55using namespace OHOS; 56 57struct SharedBuffer { 58 int fd; 59 uint32_t bufferSize; 60 uint32_t offset; 61 uint32_t dataSize; 62}; 63 64enum DeviceType : int32_t { 65 OTHER, 66 CPU, 67 GPU, 68 ACCELERATOR, 69}; 70 71enum DeviceStatus : int32_t { 72 AVAILABLE, 73 BUSY, 74 OFFLINE, 75 UNKNOWN, 76}; 77 78enum PerformanceMode : int32_t { 79 PERFORMANCE_NONE, 80 PERFORMANCE_LOW, 81 PERFORMANCE_MEDIUM, 82 PERFORMANCE_HIGH, 83 PERFORMANCE_EXTREME, 84}; 85 86enum Priority : int32_t { 87 PRIORITY_NONE, 88 PRIORITY_LOW, 89 PRIORITY_MEDIUM, 90 PRIORITY_HIGH, 91}; 92 93struct ModelConfig { 94 bool enableFloat16; 95 OHOS::HDI::Nnrt::V2_0::PerformanceMode mode; 96 OHOS::HDI::Nnrt::V2_0::Priority priority; 97 std::map<std::string, std::vector<int8_t>> extensions; 98}; 99 100enum Format : int8_t { 101 FORMAT_NONE = -1, 102 FORMAT_NCHW = 0, 103 FORMAT_NHWC = 1, 104}; 105 106struct QuantParam { 107 int32_t numBits; 108 int32_t zeroPoint; 109 double scale; 110} __attribute__ ((aligned(8))); 111 112enum DataType : int8_t { 113 DATA_TYPE_UNKNOWN = 0, 114 DATA_TYPE_BOOL = 30, 115 DATA_TYPE_INT8 = 32, 116 DATA_TYPE_INT16 = 33, 117 DATA_TYPE_INT32 = 34, 118 DATA_TYPE_INT64 = 35, 119 DATA_TYPE_UINT8 = 37, 120 DATA_TYPE_UINT16 = 38, 121 DATA_TYPE_UINT32 = 39, 122 DATA_TYPE_UINT64 = 40, 123 DATA_TYPE_FLOAT16 = 42, 124 DATA_TYPE_FLOAT32 = 43, 125 DATA_TYPE_FLOAT64 = 44, 126}; 127 128struct IOTensor { 129 std::string name; 130 OHOS::HDI::Nnrt::V2_0::DataType dataType; 131 std::vector<int32_t> dimensions; 132 OHOS::HDI::Nnrt::V2_0::Format format; 133 OHOS::HDI::Nnrt::V2_0::SharedBuffer data; 134}; 135 136enum QuantType : int8_t { 137 QUANT_TYPE_NONE, 138 QUANT_TYPE_ALL, 139}; 140 141enum NodeType : uint32_t { 142 NODE_TYPE_NONE = 0, 143 NODE_TYPE_ACTIVATION = 2, 144 NODE_TYPE_ADD_FUSION = 5, 145 NODE_TYPE_ARGMAX_FUSION = 11, 146 NODE_TYPE_AVGPOOL_FUSION = 17, 147 NODE_TYPE_BATCH_TO_SPACE_ND = 22, 148 NODE_TYPE_BIAS_ADD = 23, 149 NODE_TYPE_CAST = 28, 150 NODE_TYPE_CONCAT = 31, 151 NODE_TYPE_CONV2D_FUSION = 35, 152 NODE_TYPE_CONV2D_TRANSPOSE_FUSION = 36, 153 NODE_TYPE_DIV_FUSION = 47, 154 NODE_TYPE_ELTWISE = 52, 155 NODE_TYPE_EXPAND_DIMS = 56, 156 NODE_TYPE_FILL = 66, 157 NODE_TYPE_FULL_CONNECTION = 67, 158 NODE_TYPE_FUSED_BATCH_NORM = 68, 159 NODE_TYPE_GATHER = 69, 160 NODE_TYPE_LAYER_NORM_FUSION = 75, 161 NODE_TYPE_LESS_EQUAL = 78, 162 NODE_TYPE_MATMUL_FUSION = 89, 163 NODE_TYPE_MAXIMUM = 90, 164 NODE_TYPE_MAX_POOL_FUSION = 92, 165 NODE_TYPE_MUL_FUSION = 99, 166 NODE_TYPE_ONE_HOT = 105, 167 NODE_TYPE_PAD_FUSION = 107, 168 NODE_TYPE_POW_FUSION = 110, 169 NODE_TYPE_PRELU_FUSION = 112, 170 NODE_TYPE_QUANT_DTYPE_CAST = 113, 171 NODE_TYPE_REDUCE_FUSION = 118, 172 NODE_TYPE_RESHAPE = 119, 173 NODE_TYPE_RESIZE = 120, 174 NODE_TYPE_RSQRT = 126, 175 NODE_TYPE_SCALE_FUSION = 127, 176 NODE_TYPE_SHAPE = 130, 177 NODE_TYPE_SLICE_FUSION = 135, 178 NODE_TYPE_SOFTMAX = 138, 179 NODE_TYPE_SPACE_TO_BATCH_ND = 141, 180 NODE_TYPE_SPLIT = 145, 181 NODE_TYPE_SQRT = 146, 182 NODE_TYPE_SQUEEZE = 147, 183 NODE_TYPE_SQUARED_DIFFERENCE = 149, 184 NODE_TYPE_STACK = 150, 185 NODE_TYPE_STRIDED_SLICE = 151, 186 NODE_TYPE_SUB_FUSION = 152, 187 NODE_TYPE_TILE_FUSION = 160, 188 NODE_TYPE_TOPK_FUSION = 161, 189 NODE_TYPE_TRANSPOSE = 162, 190 NODE_TYPE_UNSQUEEZE = 165, 191}; 192 193enum ResizeMethod : int8_t { 194 RESIZE_METHOD_UNKNOWN = -1, 195 RESIZE_METHOD_LINEAR = 0, 196 RESIZE_METHOD_NEAREST = 1, 197 RESIZE_METHOD_CUBIC = 2, 198}; 199 200enum CoordinateTransformMode : int8_t { 201 COORDINATE_TRANSFORM_MODE_ASYMMETRIC = 0, 202 COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS = 1, 203 COORDINATE_TRANSFORM_MODE_HALF_PIXEL = 2, 204}; 205 206enum NearestMode : int8_t { 207 NEAREST_MODE_NORMAL = 0, 208 NEAREST_MODE_ROUND_HALF_DOWN = 1, 209 NEAREST_MODE_ROUND_HALF_UP = 2, 210 NEAREST_MODE_FLOOR = 3, 211 NEAREST_MODE_CEIL = 4, 212}; 213 214enum ActivationType : int8_t { 215 ACTIVATION_TYPE_NO_ACTIVATION = 0, 216 ACTIVATION_TYPE_RELU = 1, 217 ACTIVATION_TYPE_SIGMOID = 2, 218 ACTIVATION_TYPE_RELU6 = 3, 219 ACTIVATION_TYPE_ELU = 4, 220 ACTIVATION_TYPE_LEAKY_RELU = 5, 221 ACTIVATION_TYPE_ABS = 6, 222 ACTIVATION_TYPE_RELU1 = 7, 223 ACTIVATION_TYPE_SOFTSIGN = 8, 224 ACTIVATION_TYPE_SOFTPLUS = 9, 225 ACTIVATION_TYPE_TANH = 10, 226 ACTIVATION_TYPE_SELU = 11, 227 ACTIVATION_TYPE_HSWISH = 12, 228 ACTIVATION_TYPE_HSIGMOID = 13, 229 ACTIVATION_TYPE_THRESHOLDRELU = 14, 230 ACTIVATION_TYPE_LINEAR = 15, 231 ACTIVATION_TYPE_HARD_TANH = 16, 232 ACTIVATION_TYPE_SIGN = 17, 233 ACTIVATION_TYPE_SWISH = 18, 234 ACTIVATION_TYPE_GELU = 19, 235 ACTIVATION_TYPE_UNKNOWN = 20, 236}; 237 238enum ReduceMode : int8_t { 239 REDUCE_MODE_MEAN = 0, 240 REDUCE_MODE_MAX = 1, 241 REDUCE_MODE_MIN = 2, 242 REDUCE_MODE_PROD = 3, 243 REDUCE_MODE_SUM = 4, 244 REDUCE_MODE_SUM_SQUARE = 5, 245 REDUCE_MODE_ASUM = 6, 246 REDUCE_MODE_ALL = 7, 247}; 248 249enum EltwiseMode : int8_t { 250 ELTWISE_MODE_PROD = 0, 251 ELTWISE_MODE_SUM = 1, 252 ELTWISE_MODE_MAXIMUM = 2, 253 ELTWISE_MODE_UNKNOWN = 3, 254}; 255 256enum PadMode : int8_t { 257 PAD_MODE_PAD = 0, 258 PAD_MODE_SAME = 1, 259 PAD_MODE_VALID = 2, 260}; 261 262enum RoundMode : int8_t { 263 ROUND_MODE_FLOOR = 0, 264 ROUND_MODE_CEIL = 1, 265}; 266 267enum PaddingMode : int8_t { 268 PADDING_MODE_CONSTANT = 0, 269 PADDING_MODE_REFLECT = 1, 270 PADDING_MODE_SYMMETRIC = 2, 271 PADDING_MODE_RESERVED = 3, 272}; 273 274enum NNRT_ReturnCode : uint32_t { 275 NNRT_SUCCESS = 0, 276 NNRT_FAILED = 1, 277 NNRT_NULL_PTR = 2, 278 NNRT_INVALID_PARAMETER = 3, 279 NNRT_MEMORY_ERROR = 4, 280 NNRT_OUT_OF_MEMORY = 5, 281 NNRT_OPERATION_FORBIDDEN = 6, 282 NNRT_INVALID_FILE = 7, 283 NNRT_INVALID_PATH = 8, 284 NNRT_INSUFFICIENT_BUFFER = 9, 285 NNRT_NO_CHANGE = 10, 286 NNRT_NOT_SUPPORT = 11, 287 NNRT_SERVICE_ERROR = 12, 288 NNRT_DEVICE_ERROR = 13, 289 NNRT_DEVICE_BUSY = 14, 290 NNRT_CANCELLED = 15, 291 NNRT_PERMISSION_DENIED = 16, 292 NNRT_TIME_OUT = 17, 293 NNRT_INVALID_TENSOR = 18, 294 NNRT_INVALID_NODE = 19, 295 NNRT_INVALID_INPUT = 20, 296 NNRT_INVALID_OUTPUT = 21, 297 NNRT_INVALID_DATATYPE = 22, 298 NNRT_INVALID_FORMAT = 23, 299 NNRT_INVALID_TENSOR_NAME = 24, 300 NNRT_INVALID_SHAPE = 25, 301 NNRT_OUT_OF_DIMENTION_RANGES = 26, 302 NNRT_INVALID_BUFFER = 27, 303 NNRT_INVALID_BUFFER_SIZE = 28, 304 NNRT_INVALID_PERFORMANCE_MODE = 29, 305 NNRT_INVALID_PRIORITY = 30, 306 NNRT_INVALID_MODEL = 31, 307 NNRT_INVALID_MODEL_CACHE = 32, 308 NNRT_UNSUPPORTED_OP = 33, 309}; 310 311bool SharedBufferBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Nnrt::V2_0::SharedBuffer& dataBlock); 312 313bool SharedBufferBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Nnrt::V2_0::SharedBuffer& dataBlock); 314 315bool ModelConfigBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Nnrt::V2_0::ModelConfig& dataBlock); 316 317bool ModelConfigBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Nnrt::V2_0::ModelConfig& dataBlock); 318 319bool QuantParamBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Nnrt::V2_0::QuantParam& dataBlock); 320 321bool QuantParamBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Nnrt::V2_0::QuantParam& dataBlock); 322 323bool IOTensorBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Nnrt::V2_0::IOTensor& dataBlock); 324 325bool IOTensorBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Nnrt::V2_0::IOTensor& dataBlock); 326 327 328} // V2_0 329} // Nnrt 330} // HDI 331} // OHOS 332 333#endif // OHOS_HDI_NNRT_V2_0_NNRTTYPES_H 334 335