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
16package ohos.hdi.nnrt.v2_0;
17
18struct SharedBuffer {
19    FileDescriptor fd;
20    unsigned int bufferSize;
21    unsigned int offset;
22    unsigned int dataSize;
23};
24
25enum DeviceType: int {
26    OTHER,
27    CPU,
28    GPU,
29    ACCELERATOR
30};
31
32enum DeviceStatus: int {
33    AVAILABLE,
34    BUSY,
35    OFFLINE,
36    UNKNOWN
37};
38
39enum PerformanceMode: int {
40    PERFORMANCE_NONE,
41    PERFORMANCE_LOW,
42    PERFORMANCE_MEDIUM,
43    PERFORMANCE_HIGH,
44    PERFORMANCE_EXTREME
45};
46
47enum Priority: int {
48    PRIORITY_NONE,
49    PRIORITY_LOW,
50    PRIORITY_MEDIUM,
51    PRIORITY_HIGH
52};
53
54struct ModelConfig {
55    boolean enableFloat16;
56    enum PerformanceMode mode;
57    enum Priority priority;
58    Map<String, byte[]> extensions;
59};
60
61enum Format : byte {
62    FORMAT_NONE = -1,
63    FORMAT_NCHW = 0,
64    FORMAT_NHWC = 1
65};
66
67struct QuantParam {
68    int numBits;
69    int zeroPoint;
70    double scale;
71};
72
73enum DataType : byte {
74    DATA_TYPE_UNKNOWN = 0,
75    DATA_TYPE_BOOL = 30,
76    DATA_TYPE_INT8 = 32,
77    DATA_TYPE_INT16 = 33,
78    DATA_TYPE_INT32 = 34,
79    DATA_TYPE_INT64 = 35,
80    DATA_TYPE_UINT8 = 37,
81    DATA_TYPE_UINT16 = 38,
82    DATA_TYPE_UINT32 = 39,
83    DATA_TYPE_UINT64 = 40,
84    DATA_TYPE_FLOAT16 = 42,
85    DATA_TYPE_FLOAT32 = 43,
86    DATA_TYPE_FLOAT64 = 44,
87};
88
89struct IOTensor {
90    String name;
91    enum DataType dataType;
92    int[] dimensions;
93    enum Format format;
94    struct SharedBuffer data;
95};
96
97enum QuantType: byte {
98    QUANT_TYPE_NONE,
99    QUANT_TYPE_ALL,
100};
101
102enum NodeType : unsigned int {
103    NODE_TYPE_NONE = 0,
104    NODE_TYPE_ACTIVATION = 2,
105    NODE_TYPE_ADD_FUSION = 5,
106    NODE_TYPE_ARGMAX_FUSION = 11,
107    NODE_TYPE_AVGPOOL_FUSION = 17,
108    NODE_TYPE_BATCH_TO_SPACE_ND = 22,
109    NODE_TYPE_BIAS_ADD = 23,
110    NODE_TYPE_CAST = 28,
111    NODE_TYPE_CONCAT = 31,
112    NODE_TYPE_CONV2D_FUSION = 35,
113    NODE_TYPE_CONV2D_TRANSPOSE_FUSION = 36,
114    NODE_TYPE_DIV_FUSION = 47,
115    NODE_TYPE_ELTWISE = 52,
116    NODE_TYPE_EXPAND_DIMS = 56,
117    NODE_TYPE_FILL = 66,
118    NODE_TYPE_FULL_CONNECTION = 67,
119    NODE_TYPE_FUSED_BATCH_NORM = 68,
120    NODE_TYPE_GATHER = 69,
121    NODE_TYPE_LAYER_NORM_FUSION = 75,
122    NODE_TYPE_LESS_EQUAL = 78,
123    NODE_TYPE_MATMUL_FUSION = 89,
124    NODE_TYPE_MAXIMUM = 90,
125    NODE_TYPE_MAX_POOL_FUSION = 92,
126    NODE_TYPE_MUL_FUSION = 99,
127    NODE_TYPE_ONE_HOT = 105,
128    NODE_TYPE_PAD_FUSION = 107,
129    NODE_TYPE_POW_FUSION = 110,
130    NODE_TYPE_PRELU_FUSION = 112,
131    NODE_TYPE_QUANT_DTYPE_CAST = 113,
132    NODE_TYPE_REDUCE_FUSION = 118,
133    NODE_TYPE_RESHAPE = 119,
134    NODE_TYPE_RESIZE = 120,
135    NODE_TYPE_RSQRT = 126,
136    NODE_TYPE_SCALE_FUSION = 127,
137    NODE_TYPE_SHAPE = 130,
138    NODE_TYPE_SLICE_FUSION = 135,
139    NODE_TYPE_SOFTMAX = 138,
140    NODE_TYPE_SPACE_TO_BATCH_ND = 141,
141    NODE_TYPE_SPLIT = 145,
142    NODE_TYPE_SQRT = 146,
143    NODE_TYPE_SQUEEZE = 147,
144    NODE_TYPE_SQUARED_DIFFERENCE = 149,
145    NODE_TYPE_STACK = 150,
146    NODE_TYPE_STRIDED_SLICE = 151,
147    NODE_TYPE_SUB_FUSION = 152,
148    NODE_TYPE_TILE_FUSION = 160,
149    NODE_TYPE_TOPK_FUSION = 161,
150    NODE_TYPE_TRANSPOSE = 162,
151    NODE_TYPE_UNSQUEEZE = 165,
152};
153
154enum ResizeMethod : byte {
155    RESIZE_METHOD_UNKNOWN = -1,
156    RESIZE_METHOD_LINEAR = 0,
157    RESIZE_METHOD_NEAREST = 1,
158    RESIZE_METHOD_CUBIC = 2
159};
160
161enum CoordinateTransformMode : byte {
162    COORDINATE_TRANSFORM_MODE_ASYMMETRIC = 0,
163    COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS = 1,
164    COORDINATE_TRANSFORM_MODE_HALF_PIXEL = 2
165};
166
167enum NearestMode : byte {
168    NEAREST_MODE_NORMAL = 0,
169    NEAREST_MODE_ROUND_HALF_DOWN = 1,
170    NEAREST_MODE_ROUND_HALF_UP = 2,
171    NEAREST_MODE_FLOOR = 3,
172    NEAREST_MODE_CEIL = 4
173};
174
175enum ActivationType : byte {
176    ACTIVATION_TYPE_NO_ACTIVATION = 0,
177    ACTIVATION_TYPE_RELU = 1,
178    ACTIVATION_TYPE_SIGMOID = 2,
179    ACTIVATION_TYPE_RELU6 = 3,
180    ACTIVATION_TYPE_ELU = 4,
181    ACTIVATION_TYPE_LEAKY_RELU = 5,
182    ACTIVATION_TYPE_ABS = 6,
183    ACTIVATION_TYPE_RELU1 = 7,
184    ACTIVATION_TYPE_SOFTSIGN = 8,
185    ACTIVATION_TYPE_SOFTPLUS = 9,
186    ACTIVATION_TYPE_TANH = 10,
187    ACTIVATION_TYPE_SELU = 11,
188    ACTIVATION_TYPE_HSWISH = 12,
189    ACTIVATION_TYPE_HSIGMOID = 13,
190    ACTIVATION_TYPE_THRESHOLDRELU = 14,
191    ACTIVATION_TYPE_LINEAR = 15,
192    ACTIVATION_TYPE_HARD_TANH = 16,
193    ACTIVATION_TYPE_SIGN = 17,
194    ACTIVATION_TYPE_SWISH = 18,
195    ACTIVATION_TYPE_GELU = 19,
196    ACTIVATION_TYPE_UNKNOWN = 20
197};
198
199enum ReduceMode : byte {
200    REDUCE_MODE_MEAN = 0,
201    REDUCE_MODE_MAX = 1,
202    REDUCE_MODE_MIN = 2,
203    REDUCE_MODE_PROD = 3,
204    REDUCE_MODE_SUM = 4,
205    REDUCE_MODE_SUM_SQUARE = 5,
206    REDUCE_MODE_ASUM = 6,
207    REDUCE_MODE_ALL = 7
208};
209
210enum EltwiseMode : byte {
211    ELTWISE_MODE_PROD = 0,
212    ELTWISE_MODE_SUM = 1,
213    ELTWISE_MODE_MAXIMUM = 2,
214    ELTWISE_MODE_UNKNOWN = 3
215};
216
217enum PadMode : byte {
218    PAD_MODE_PAD = 0,
219    PAD_MODE_SAME = 1,
220    PAD_MODE_VALID = 2,
221};
222
223enum RoundMode : byte {
224    ROUND_MODE_FLOOR = 0,
225    ROUND_MODE_CEIL = 1
226};
227
228enum PaddingMode : byte {
229    PADDING_MODE_CONSTANT = 0,
230    PADDING_MODE_REFLECT = 1,
231    PADDING_MODE_SYMMETRIC = 2,
232    PADDING_MODE_RESERVED = 3
233};
234
235enum NNRT_ReturnCode : unsigned int {
236    NNRT_SUCCESS = 0,
237    NNRT_FAILED = 1,
238    NNRT_NULL_PTR = 2,
239    NNRT_INVALID_PARAMETER = 3,
240    NNRT_MEMORY_ERROR = 4,
241    NNRT_OUT_OF_MEMORY = 5,
242    NNRT_OPERATION_FORBIDDEN = 6,
243    NNRT_INVALID_FILE = 7,
244    NNRT_INVALID_PATH = 8,
245    NNRT_INSUFFICIENT_BUFFER = 9,
246    NNRT_NO_CHANGE = 10,
247    NNRT_NOT_SUPPORT = 11,
248    NNRT_SERVICE_ERROR = 12,
249    NNRT_DEVICE_ERROR = 13,
250    NNRT_DEVICE_BUSY = 14,
251    NNRT_CANCELLED = 15,
252    NNRT_PERMISSION_DENIED = 16,
253    NNRT_TIME_OUT = 17,
254    NNRT_INVALID_TENSOR = 18,
255    NNRT_INVALID_NODE = 19,
256    NNRT_INVALID_INPUT = 20,
257    NNRT_INVALID_OUTPUT = 21,
258    NNRT_INVALID_DATATYPE = 22,
259    NNRT_INVALID_FORMAT = 23,
260    NNRT_INVALID_TENSOR_NAME = 24,
261    NNRT_INVALID_SHAPE = 25,
262    NNRT_OUT_OF_DIMENTION_RANGES = 26,
263    NNRT_INVALID_BUFFER = 27,
264    NNRT_INVALID_BUFFER_SIZE = 28,
265    NNRT_INVALID_PERFORMANCE_MODE = 29,
266    NNRT_INVALID_PRIORITY = 30,
267    NNRT_INVALID_MODEL = 31,
268    NNRT_INVALID_MODEL_CACHE = 32,
269    NNRT_UNSUPPORTED_OP = 33
270};