1/* 2 * Copyright (c) 2022 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_V1_0_NNRTTYPES_H 17#define OHOS_HDI_NNRT_V1_0_NNRTTYPES_H 18 19#include <cstdbool> 20#include <cstdint> 21#include <string> 22#include <vector> 23 24#ifndef HDI_BUFF_MAX_SIZE 25#define HDI_BUFF_MAX_SIZE (1024 * 200) 26#endif 27 28#ifndef HDI_CHECK_VALUE_RETURN 29#define HDI_CHECK_VALUE_RETURN(lv, compare, rv, ret) do { \ 30 if ((lv) compare (rv)) { \ 31 return ret; \ 32 } \ 33} while (false) 34#endif 35 36#ifndef HDI_CHECK_VALUE_RET_GOTO 37#define HDI_CHECK_VALUE_RET_GOTO(lv, compare, rv, ret, value, table) do { \ 38 if ((lv) compare (rv)) { \ 39 ret = value; \ 40 goto table; \ 41 } \ 42} while (false) 43#endif 44 45namespace OHOS { 46class MessageParcel; 47} 48 49namespace OHOS { 50namespace HDI { 51namespace Nnrt { 52namespace V1_0 { 53 54using namespace OHOS; 55 56struct SharedBuffer { 57 int fd; 58 uint32_t bufferSize; 59 uint32_t offset; 60 uint32_t dataSize; 61}; 62 63enum DeviceType : int32_t { 64 OTHER, 65 CPU, 66 GPU, 67 ACCELERATOR, 68}; 69 70enum DeviceStatus : int32_t { 71 AVAILABLE, 72 BUSY, 73 OFFLINE, 74 UNKNOWN, 75}; 76 77enum PerformanceMode : int32_t { 78 PERFORMANCE_NONE, 79 PERFORMANCE_LOW, 80 PERFORMANCE_MEDIUM, 81 PERFORMANCE_HIGH, 82 PERFORMANCE_EXTREME, 83}; 84 85enum Priority : int32_t { 86 PRIORITY_NONE, 87 PRIORITY_LOW, 88 PRIORITY_MEDIUM, 89 PRIORITY_HIGH, 90}; 91 92struct ModelConfig { 93 bool enableFloat16; 94 OHOS::HDI::Nnrt::V1_0::PerformanceMode mode; 95 OHOS::HDI::Nnrt::V1_0::Priority priority; 96} __attribute__ ((aligned(8))); 97 98enum Format : int8_t { 99 FORMAT_NONE = -1, 100 FORMAT_NCHW = 0, 101 FORMAT_NHWC = 1, 102}; 103 104struct QuantParam { 105 int32_t numBits; 106 int32_t zeroPoint; 107 double scale; 108} __attribute__ ((aligned(8))); 109 110enum DataType : int8_t { 111 DATA_TYPE_UNKNOWN = 0, 112 DATA_TYPE_BOOL = 30, 113 DATA_TYPE_INT8 = 32, 114 DATA_TYPE_INT16 = 33, 115 DATA_TYPE_INT32 = 34, 116 DATA_TYPE_INT64 = 35, 117 DATA_TYPE_UINT8 = 37, 118 DATA_TYPE_UINT16 = 38, 119 DATA_TYPE_UINT32 = 39, 120 DATA_TYPE_UINT64 = 40, 121 DATA_TYPE_FLOAT16 = 42, 122 DATA_TYPE_FLOAT32 = 43, 123 DATA_TYPE_FLOAT64 = 44, 124}; 125 126struct IOTensor { 127 std::string name; 128 OHOS::HDI::Nnrt::V1_0::DataType dataType; 129 std::vector<int32_t> dimensions; 130 OHOS::HDI::Nnrt::V1_0::Format format; 131 OHOS::HDI::Nnrt::V1_0::SharedBuffer data; 132}; 133 134enum QuantType : int8_t { 135 QUANT_TYPE_NONE, 136 QUANT_TYPE_ALL, 137}; 138 139enum NodeType : uint32_t { 140 NODE_TYPE_NONE = 0, 141 NODE_TYPE_ACTIVATION = 2, 142 NODE_TYPE_ADD_FUSION = 5, 143 NODE_TYPE_ARGMAX_FUSION = 11, 144 NODE_TYPE_AVGPOOL_FUSION = 17, 145 NODE_TYPE_BATCH_TO_SPACE_ND = 22, 146 NODE_TYPE_BIAS_ADD = 23, 147 NODE_TYPE_CAST = 28, 148 NODE_TYPE_CONCAT = 31, 149 NODE_TYPE_CONV2D_FUSION = 35, 150 NODE_TYPE_CONV2D_TRANSPOSE_FUSION = 36, 151 NODE_TYPE_DIV_FUSION = 47, 152 NODE_TYPE_ELTWISE = 52, 153 NODE_TYPE_EXPAND_DIMS = 56, 154 NODE_TYPE_FILL = 66, 155 NODE_TYPE_FULL_CONNECTION = 67, 156 NODE_TYPE_FUSED_BATCH_NORM = 68, 157 NODE_TYPE_GATHER = 69, 158 NODE_TYPE_LAYER_NORM_FUSION = 75, 159 NODE_TYPE_LESS_EQUAL = 78, 160 NODE_TYPE_MATMUL_FUSION = 89, 161 NODE_TYPE_MAXIMUM = 90, 162 NODE_TYPE_MAX_POOL_FUSION = 92, 163 NODE_TYPE_MUL_FUSION = 99, 164 NODE_TYPE_ONE_HOT = 105, 165 NODE_TYPE_PAD_FUSION = 107, 166 NODE_TYPE_POW_FUSION = 110, 167 NODE_TYPE_PRELU_FUSION = 112, 168 NODE_TYPE_QUANT_DTYPE_CAST = 113, 169 NODE_TYPE_REDUCE_FUSION = 118, 170 NODE_TYPE_RESHAPE = 119, 171 NODE_TYPE_RESIZE = 120, 172 NODE_TYPE_RSQRT = 126, 173 NODE_TYPE_SCALE_FUSION = 127, 174 NODE_TYPE_SHAPE = 130, 175 NODE_TYPE_SLICE_FUSION = 135, 176 NODE_TYPE_SOFTMAX = 138, 177 NODE_TYPE_SPACE_TO_BATCH_ND = 141, 178 NODE_TYPE_SPLIT = 145, 179 NODE_TYPE_SQRT = 146, 180 NODE_TYPE_SQUEEZE = 147, 181 NODE_TYPE_SQUARED_DIFFERENCE = 149, 182 NODE_TYPE_STACK = 150, 183 NODE_TYPE_STRIDED_SLICE = 151, 184 NODE_TYPE_SUB_FUSION = 152, 185 NODE_TYPE_TILE_FUSION = 160, 186 NODE_TYPE_TOPK_FUSION = 161, 187 NODE_TYPE_TRANSPOSE = 162, 188 NODE_TYPE_UNSQUEEZE = 165, 189}; 190 191enum ResizeMethod : int8_t { 192 RESIZE_METHOD_UNKNOWN = -1, 193 RESIZE_METHOD_LINEAR = 0, 194 RESIZE_METHOD_NEAREST = 1, 195 RESIZE_METHOD_CUBIC = 2, 196}; 197 198enum CoordinateTransformMode : int8_t { 199 COORDINATE_TRANSFORM_MODE_ASYMMETRIC = 0, 200 COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS = 1, 201 COORDINATE_TRANSFORM_MODE_HALF_PIXEL = 2, 202}; 203 204enum NearestMode : int8_t { 205 NEAREST_MODE_NORMAL = 0, 206 NEAREST_MODE_ROUND_HALF_DOWN = 1, 207 NEAREST_MODE_ROUND_HALF_UP = 2, 208 NEAREST_MODE_FLOOR = 3, 209 NEAREST_MODE_CEIL = 4, 210}; 211 212enum ActivationType : int8_t { 213 ACTIVATION_TYPE_NO_ACTIVATION = 0, 214 ACTIVATION_TYPE_RELU = 1, 215 ACTIVATION_TYPE_SIGMOID = 2, 216 ACTIVATION_TYPE_RELU6 = 3, 217 ACTIVATION_TYPE_ELU = 4, 218 ACTIVATION_TYPE_LEAKY_RELU = 5, 219 ACTIVATION_TYPE_ABS = 6, 220 ACTIVATION_TYPE_RELU1 = 7, 221 ACTIVATION_TYPE_SOFTSIGN = 8, 222 ACTIVATION_TYPE_SOFTPLUS = 9, 223 ACTIVATION_TYPE_TANH = 10, 224 ACTIVATION_TYPE_SELU = 11, 225 ACTIVATION_TYPE_HSWISH = 12, 226 ACTIVATION_TYPE_HSIGMOID = 13, 227 ACTIVATION_TYPE_THRESHOLDRELU = 14, 228 ACTIVATION_TYPE_LINEAR = 15, 229 ACTIVATION_TYPE_HARD_TANH = 16, 230 ACTIVATION_TYPE_SIGN = 17, 231 ACTIVATION_TYPE_SWISH = 18, 232 ACTIVATION_TYPE_GELU = 19, 233 ACTIVATION_TYPE_UNKNOWN = 20, 234}; 235 236enum ReduceMode : int8_t { 237 REDUCE_MODE_MEAN = 0, 238 REDUCE_MODE_MAX = 1, 239 REDUCE_MODE_MIN = 2, 240 REDUCE_MODE_PROD = 3, 241 REDUCE_MODE_SUM = 4, 242 REDUCE_MODE_SUM_SQUARE = 5, 243 REDUCE_MODE_ASUM = 6, 244 REDUCE_MODE_ALL = 7, 245}; 246 247enum EltwiseMode : int8_t { 248 ELTWISE_MODE_PROD = 0, 249 ELTWISE_MODE_SUM = 1, 250 ELTWISE_MODE_MAXIMUM = 2, 251 ELTWISE_MODE_UNKNOWN = 3, 252}; 253 254enum PadMode : int8_t { 255 PAD_MODE_PAD = 0, 256 PAD_MODE_SAME = 1, 257 PAD_MODE_VALID = 2, 258}; 259 260enum RoundMode : int8_t { 261 ROUND_MODE_FLOOR = 0, 262 ROUND_MODE_CEIL = 1, 263}; 264 265enum PaddingMode : int8_t { 266 PADDING_MODE_CONSTANT = 0, 267 PADDING_MODE_REFLECT = 1, 268 PADDING_MODE_SYMMETRIC = 2, 269 PADDING_MODE_RESERVED = 3, 270}; 271 272bool SharedBufferBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Nnrt::V1_0::SharedBuffer& dataBlock); 273 274bool SharedBufferBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Nnrt::V1_0::SharedBuffer& dataBlock); 275 276bool ModelConfigBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Nnrt::V1_0::ModelConfig& dataBlock); 277 278bool ModelConfigBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Nnrt::V1_0::ModelConfig& dataBlock); 279 280bool QuantParamBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Nnrt::V1_0::QuantParam& dataBlock); 281 282bool QuantParamBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Nnrt::V1_0::QuantParam& dataBlock); 283 284bool IOTensorBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Nnrt::V1_0::IOTensor& dataBlock); 285 286bool IOTensorBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Nnrt::V1_0::IOTensor& dataBlock); 287 288 289} // V1_0 290} // Nnrt 291} // HDI 292} // OHOS 293 294#endif // OHOS_HDI_NNRT_V1_0_NNRTTYPES_H 295 296