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