1pub const RKNN_FLAG_PRIOR_HIGH: u32 = 0;
4pub const RKNN_FLAG_PRIOR_MEDIUM: u32 = 1;
5pub const RKNN_FLAG_PRIOR_LOW: u32 = 2;
6pub const RKNN_FLAG_ASYNC_MASK: u32 = 4;
7pub const RKNN_FLAG_COLLECT_PERF_MASK: u32 = 8;
8pub const RKNN_FLAG_MEM_ALLOC_OUTSIDE: u32 = 16;
9pub const RKNN_FLAG_SHARE_WEIGHT_MEM: u32 = 32;
10pub const RKNN_FLAG_FENCE_IN_OUTSIDE: u32 = 64;
11pub const RKNN_FLAG_FENCE_OUT_OUTSIDE: u32 = 128;
12pub const RKNN_FLAG_COLLECT_MODEL_INFO_ONLY: u32 = 256;
13pub const RKNN_FLAG_INTERNAL_ALLOC_OUTSIDE: u32 = 512;
14pub const RKNN_FLAG_EXECUTE_FALLBACK_PRIOR_DEVICE_GPU: u32 = 1024;
15pub const RKNN_FLAG_ENABLE_SRAM: u32 = 2048;
16pub const RKNN_FLAG_SHARE_SRAM: u32 = 4096;
17pub const RKNN_FLAG_DISABLE_PROC_HIGH_PRIORITY: u32 = 8192;
18pub const RKNN_FLAG_DISABLE_FLUSH_INPUT_MEM_CACHE: u32 = 16384;
19pub const RKNN_FLAG_DISABLE_FLUSH_OUTPUT_MEM_CACHE: u32 = 32768;
20pub const RKNN_FLAG_MODEL_BUFFER_ZERO_COPY: u32 = 65536;
21pub const RKNN_MEM_FLAG_ALLOC_NO_CONTEXT: u32 = 131072;
22pub const RKNN_SUCC: u32 = 0;
23pub const RKNN_ERR_FAIL: i32 = -1;
24pub const RKNN_ERR_TIMEOUT: i32 = -2;
25pub const RKNN_ERR_DEVICE_UNAVAILABLE: i32 = -3;
26pub const RKNN_ERR_MALLOC_FAIL: i32 = -4;
27pub const RKNN_ERR_PARAM_INVALID: i32 = -5;
28pub const RKNN_ERR_MODEL_INVALID: i32 = -6;
29pub const RKNN_ERR_CTX_INVALID: i32 = -7;
30pub const RKNN_ERR_INPUT_INVALID: i32 = -8;
31pub const RKNN_ERR_OUTPUT_INVALID: i32 = -9;
32pub const RKNN_ERR_DEVICE_UNMATCH: i32 = -10;
33pub const RKNN_ERR_INCOMPATILE_PRE_COMPILE_MODEL: i32 = -11;
34pub const RKNN_ERR_INCOMPATILE_OPTIMIZATION_LEVEL_VERSION: i32 = -12;
35pub const RKNN_ERR_TARGET_PLATFORM_UNMATCH: i32 = -13;
36pub const RKNN_MAX_DIMS: u32 = 16;
37pub const RKNN_MAX_NUM_CHANNEL: u32 = 15;
38pub const RKNN_MAX_NAME_LEN: u32 = 256;
39pub const RKNN_MAX_DYNAMIC_SHAPE_NUM: u32 = 512;
40pub const RKNN_WARNING_SKIP_CUSTOM_OP_COMPUTE: i32 = -14;
41pub const RKNN_CUSTOM_OP_MAX_STR_LEN: u32 = 64;
42pub const RKNN_CUSTOM_OP_MAX_VALUE_LEN: u32 = 32;
43pub type rknn_context = u64;
44pub mod _rknn_query_cmd {
45 pub type Type = ::std::os::raw::c_uint;
46 pub const RKNN_QUERY_IN_OUT_NUM: Type = 0;
47 pub const RKNN_QUERY_INPUT_ATTR: Type = 1;
48 pub const RKNN_QUERY_OUTPUT_ATTR: Type = 2;
49 pub const RKNN_QUERY_PERF_DETAIL: Type = 3;
50 pub const RKNN_QUERY_PERF_RUN: Type = 4;
51 pub const RKNN_QUERY_SDK_VERSION: Type = 5;
52 pub const RKNN_QUERY_MEM_SIZE: Type = 6;
53 pub const RKNN_QUERY_CUSTOM_STRING: Type = 7;
54 pub const RKNN_QUERY_NATIVE_INPUT_ATTR: Type = 8;
55 pub const RKNN_QUERY_NATIVE_OUTPUT_ATTR: Type = 9;
56 pub const RKNN_QUERY_NATIVE_NC1HWC2_INPUT_ATTR: Type = 8;
57 pub const RKNN_QUERY_NATIVE_NC1HWC2_OUTPUT_ATTR: Type = 9;
58 pub const RKNN_QUERY_NATIVE_NHWC_INPUT_ATTR: Type = 10;
59 pub const RKNN_QUERY_NATIVE_NHWC_OUTPUT_ATTR: Type = 11;
60 pub const RKNN_QUERY_DEVICE_MEM_INFO: Type = 12;
61 pub const RKNN_QUERY_INPUT_DYNAMIC_RANGE: Type = 13;
62 pub const RKNN_QUERY_CURRENT_INPUT_ATTR: Type = 14;
63 pub const RKNN_QUERY_CURRENT_OUTPUT_ATTR: Type = 15;
64 pub const RKNN_QUERY_CURRENT_NATIVE_INPUT_ATTR: Type = 16;
65 pub const RKNN_QUERY_CURRENT_NATIVE_OUTPUT_ATTR: Type = 17;
66 pub const RKNN_QUERY_CMD_MAX: Type = 18;
67}
68pub use self::_rknn_query_cmd::Type as rknn_query_cmd;
69pub mod _rknn_tensor_type {
70 pub type Type = ::std::os::raw::c_uint;
71 pub const RKNN_TENSOR_FLOAT32: Type = 0;
72 pub const RKNN_TENSOR_FLOAT16: Type = 1;
73 pub const RKNN_TENSOR_INT8: Type = 2;
74 pub const RKNN_TENSOR_UINT8: Type = 3;
75 pub const RKNN_TENSOR_INT16: Type = 4;
76 pub const RKNN_TENSOR_UINT16: Type = 5;
77 pub const RKNN_TENSOR_INT32: Type = 6;
78 pub const RKNN_TENSOR_UINT32: Type = 7;
79 pub const RKNN_TENSOR_INT64: Type = 8;
80 pub const RKNN_TENSOR_BOOL: Type = 9;
81 pub const RKNN_TENSOR_INT4: Type = 10;
82 pub const RKNN_TENSOR_BFLOAT16: Type = 11;
83 pub const RKNN_TENSOR_TYPE_MAX: Type = 12;
84}
85pub use self::_rknn_tensor_type::Type as rknn_tensor_type;
86pub mod _rknn_tensor_qnt_type {
87 pub type Type = ::std::os::raw::c_uint;
88 pub const RKNN_TENSOR_QNT_NONE: Type = 0;
89 pub const RKNN_TENSOR_QNT_DFP: Type = 1;
90 pub const RKNN_TENSOR_QNT_AFFINE_ASYMMETRIC: Type = 2;
91 pub const RKNN_TENSOR_QNT_MAX: Type = 3;
92}
93pub use self::_rknn_tensor_qnt_type::Type as rknn_tensor_qnt_type;
94pub mod _rknn_tensor_format {
95 pub type Type = ::std::os::raw::c_uint;
96 pub const RKNN_TENSOR_NCHW: Type = 0;
97 pub const RKNN_TENSOR_NHWC: Type = 1;
98 pub const RKNN_TENSOR_NC1HWC2: Type = 2;
99 pub const RKNN_TENSOR_UNDEFINED: Type = 3;
100 pub const RKNN_TENSOR_FORMAT_MAX: Type = 4;
101}
102pub use self::_rknn_tensor_format::Type as rknn_tensor_format;
103pub mod _rknn_core_mask {
104 pub type Type = ::std::os::raw::c_uint;
105 pub const RKNN_NPU_CORE_AUTO: Type = 0;
106 pub const RKNN_NPU_CORE_0: Type = 1;
107 pub const RKNN_NPU_CORE_1: Type = 2;
108 pub const RKNN_NPU_CORE_2: Type = 4;
109 pub const RKNN_NPU_CORE_0_1: Type = 3;
110 pub const RKNN_NPU_CORE_0_1_2: Type = 7;
111 pub const RKNN_NPU_CORE_ALL: Type = 65535;
112 pub const RKNN_NPU_CORE_UNDEFINED: Type = 65536;
113}
114pub use self::_rknn_core_mask::Type as rknn_core_mask;
115#[repr(C)]
116#[derive(Debug, Copy, Clone)]
117pub struct _rknn_input_output_num {
118 pub n_input: u32,
119 pub n_output: u32,
120}
121pub type rknn_input_output_num = _rknn_input_output_num;
122#[repr(C)]
123#[derive(Debug, Copy, Clone)]
124pub struct _rknn_tensor_attr {
125 pub index: u32,
126 pub n_dims: u32,
127 pub dims: [u32; 16usize],
128 pub name: [::std::os::raw::c_char; 256usize],
129 pub n_elems: u32,
130 pub size: u32,
131 pub fmt: rknn_tensor_format,
132 pub type_: rknn_tensor_type,
133 pub qnt_type: rknn_tensor_qnt_type,
134 pub fl: i8,
135 pub zp: i32,
136 pub scale: f32,
137 pub w_stride: u32,
138 pub size_with_stride: u32,
139 pub pass_through: u8,
140 pub h_stride: u32,
141}
142pub type rknn_tensor_attr = _rknn_tensor_attr;
143#[repr(C)]
144#[derive(Debug, Copy, Clone)]
145pub struct _rknn_input_range {
146 pub index: u32,
147 pub shape_number: u32,
148 pub fmt: rknn_tensor_format,
149 pub name: [::std::os::raw::c_char; 256usize],
150 pub dyn_range: [[u32; 16usize]; 512usize],
151 pub n_dims: u32,
152}
153pub type rknn_input_range = _rknn_input_range;
154
155#[cfg_attr(
156 feature = "docs",
157 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
158)]
159#[cfg(any(feature = "rk35xx", feature = "rk3576"))]
160#[repr(C)]
161#[derive(Debug, Copy, Clone)]
162pub struct _rknn_perf_detail {
163 pub perf_data: *mut ::std::os::raw::c_char,
164 pub data_len: u64,
165}
166#[cfg_attr(
167 feature = "docs",
168 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
169)]
170#[cfg(any(feature = "rk35xx", feature = "rk3576"))]
171pub type rknn_perf_detail = _rknn_perf_detail;
172
173#[cfg_attr(
174 feature = "docs",
175 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
176)]
177#[cfg(any(feature = "rk35xx", feature = "rk3576"))]
178#[repr(C)]
179#[derive(Debug, Copy, Clone)]
180pub struct _rknn_perf_run {
181 pub run_duration: i64,
182}
183#[cfg_attr(
184 feature = "docs",
185 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
186)]
187#[cfg(any(feature = "rk35xx", feature = "rk3576"))]
188pub type rknn_perf_run = _rknn_perf_run;
189#[repr(C)]
190#[derive(Debug, Copy, Clone)]
191pub struct _rknn_sdk_version {
192 pub api_version: [::std::os::raw::c_char; 256usize],
193 pub drv_version: [::std::os::raw::c_char; 256usize],
194}
195pub type rknn_sdk_version = _rknn_sdk_version;
196#[repr(C)]
197#[derive(Debug, Copy, Clone)]
198pub struct _rknn_mem_size {
199 pub total_weight_size: u32,
200 pub total_internal_size: u32,
201 pub total_dma_allocated_size: u64,
202 pub total_sram_size: u32,
203 pub free_sram_size: u32,
204 pub reserved: [u32; 10usize],
205}
206pub type rknn_mem_size = _rknn_mem_size;
207#[repr(C)]
208#[derive(Debug, Copy, Clone)]
209pub struct _rknn_custom_string {
210 pub string: [::std::os::raw::c_char; 1024usize],
211}
212pub type rknn_custom_string = _rknn_custom_string;
213pub mod _rknn_tensor_mem_flags {
214 pub type Type = ::std::os::raw::c_uint;
215 pub const RKNN_TENSOR_MEMORY_FLAGS_ALLOC_INSIDE: Type = 1;
216 pub const RKNN_TENSOR_MEMORY_FLAGS_FROM_FD: Type = 2;
217 pub const RKNN_TENSOR_MEMORY_FLAGS_FROM_PHYS: Type = 3;
218 pub const RKNN_TENSOR_MEMORY_FLAGS_UNKNOWN: Type = 4;
219}
220pub use self::_rknn_tensor_mem_flags::Type as rknn_tensor_mem_flags;
221pub mod _rknn_mem_alloc_flags {
222 pub type Type = ::std::os::raw::c_uint;
223 pub const RKNN_FLAG_MEMORY_FLAGS_DEFAULT: Type = 0;
224 pub const RKNN_FLAG_MEMORY_CACHEABLE: Type = 1;
225 pub const RKNN_FLAG_MEMORY_NON_CACHEABLE: Type = 2;
226 pub const RKNN_FLAG_MEMORY_TRY_ALLOC_SRAM: Type = 4;
227}
228pub use self::_rknn_mem_alloc_flags::Type as rknn_mem_alloc_flags;
229pub mod _rknn_mem_sync_mode {
230 pub type Type = ::std::os::raw::c_uint;
231 pub const RKNN_MEMORY_SYNC_TO_DEVICE: Type = 1;
232 pub const RKNN_MEMORY_SYNC_FROM_DEVICE: Type = 2;
233 pub const RKNN_MEMORY_SYNC_BIDIRECTIONAL: Type = 3;
234}
235pub use self::_rknn_mem_sync_mode::Type as rknn_mem_sync_mode;
236#[repr(C)]
237#[derive(Debug, Copy, Clone)]
238pub struct _rknn_tensor_memory {
239 pub virt_addr: *mut ::std::os::raw::c_void,
240 pub phys_addr: u64,
241 pub fd: i32,
242 pub offset: i32,
243 pub size: u32,
244 pub flags: u32,
245 pub priv_data: *mut ::std::os::raw::c_void,
246}
247pub type rknn_tensor_mem = _rknn_tensor_memory;
248#[repr(C)]
249#[derive(Debug, Copy, Clone)]
250pub struct _rknn_input {
251 pub index: u32,
252 pub buf: *mut ::std::os::raw::c_void,
253 pub size: u32,
254 pub pass_through: u8,
255 pub type_: rknn_tensor_type,
256 pub fmt: rknn_tensor_format,
257}
258pub type rknn_input = _rknn_input;
259#[repr(C)]
260#[derive(Debug, Copy, Clone)]
261pub struct _rknn_output {
262 pub want_float: u8,
263 pub is_prealloc: u8,
264 pub index: u32,
265 pub buf: *mut ::std::os::raw::c_void,
266 pub size: u32,
267}
268pub type rknn_output = _rknn_output;
269#[repr(C)]
270#[derive(Debug, Copy, Clone)]
271pub struct _rknn_init_extend {
272 pub ctx: rknn_context,
273 pub real_model_offset: i32,
274 pub real_model_size: u32,
275 pub model_buffer_fd: i32,
276 pub model_buffer_flags: u32,
277 pub reserved: [u8; 112usize],
278}
279pub type rknn_init_extend = _rknn_init_extend;
280#[repr(C)]
281#[derive(Debug, Copy, Clone)]
282pub struct _rknn_run_extend {
283 pub frame_id: u64,
284 pub non_block: i32,
285 pub timeout_ms: i32,
286 pub fence_fd: i32,
287}
288pub type rknn_run_extend = _rknn_run_extend;
289#[repr(C)]
290#[derive(Debug, Copy, Clone)]
291pub struct _rknn_output_extend {
292 pub frame_id: u64,
293}
294pub type rknn_output_extend = _rknn_output_extend;
295
296pub mod functions {
297
298 use super::*;
299 unsafe extern "C" {
300 pub fn rknn_init(
301 context: *mut rknn_context,
302 model: *mut ::std::os::raw::c_void,
303 size: u32,
304 flag: u32,
305 extend: *mut rknn_init_extend,
306 ) -> ::std::os::raw::c_int;
307 }
308 #[cfg_attr(
309 feature = "docs",
310 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
311 )]
312 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
313 unsafe extern "C" {
314 pub fn rknn_dup_context(
315 context_in: *mut rknn_context,
316 context_out: *mut rknn_context,
317 ) -> ::std::os::raw::c_int;
318 }
319 unsafe extern "C" {
320 pub fn rknn_destroy(context: rknn_context) -> ::std::os::raw::c_int;
321 }
322 unsafe extern "C" {
323 pub fn rknn_query(
324 context: rknn_context,
325 cmd: rknn_query_cmd,
326 info: *mut ::std::os::raw::c_void,
327 size: u32,
328 ) -> ::std::os::raw::c_int;
329 }
330 #[cfg_attr(
331 feature = "docs",
332 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
333 )]
334 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
335 unsafe extern "C" {
336 pub fn rknn_inputs_set(
337 context: rknn_context,
338 n_inputs: u32,
339 inputs: *mut rknn_input,
340 ) -> ::std::os::raw::c_int;
341 }
342
343 #[cfg(feature = "rk3576")]
344 #[cfg_attr(feature = "docs", doc(cfg(feature = "rk3576")))]
345 unsafe extern "C" {
346 pub fn rknn_set_batch_core_num(
347 context: rknn_context,
348 core_num: ::std::os::raw::c_int,
349 ) -> ::std::os::raw::c_int;
350 }
351
352 #[cfg(feature = "rk3576")]
353 #[cfg_attr(feature = "docs", doc(cfg(feature = "rk3576")))]
354 unsafe extern "C" {
355 pub fn rknn_set_core_mask(
356 context: rknn_context,
357 core_mask: rknn_core_mask,
358 ) -> ::std::os::raw::c_int;
359 }
360 unsafe extern "C" {
361 pub fn rknn_run(
362 context: rknn_context,
363 extend: *mut rknn_run_extend,
364 ) -> ::std::os::raw::c_int;
365 }
366 #[cfg_attr(
367 feature = "docs",
368 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
369 )]
370 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
371 unsafe extern "C" {
372 pub fn rknn_outputs_get(
373 context: rknn_context,
374 n_outputs: u32,
375 outputs: *mut rknn_output,
376 extend: *mut rknn_output_extend,
377 ) -> ::std::os::raw::c_int;
378 }
379 #[cfg_attr(
380 feature = "docs",
381 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
382 )]
383 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
384 unsafe extern "C" {
385 pub fn rknn_outputs_release(
386 context: rknn_context,
387 n_ouputs: u32,
388 outputs: *mut rknn_output,
389 ) -> ::std::os::raw::c_int;
390 }
391
392 unsafe extern "C" {
393 pub fn rknn_create_mem_from_phys(
394 ctx: rknn_context,
395 phys_addr: u64,
396 virt_addr: *mut ::std::os::raw::c_void,
397 size: u32,
398 ) -> *mut rknn_tensor_mem;
399 }
400
401 #[cfg_attr(
402 feature = "docs",
403 doc(cfg(any(feature = "rk35xx", feature = "rk3576", feature = "rv110x")))
404 )]
405 #[cfg(any(feature = "rk35xx", feature = "rk3576", feature = "rv110x"))]
406 unsafe extern "C" {
407 pub fn rknn_create_mem_from_fd(
408 ctx: rknn_context,
409 fd: i32,
410 virt_addr: *mut ::std::os::raw::c_void,
411 size: u32,
412 offset: i32,
413 ) -> *mut rknn_tensor_mem;
414 }
415 unsafe extern "C" {
416 pub fn rknn_create_mem(ctx: rknn_context, size: u32) -> *mut rknn_tensor_mem;
417 }
418 unsafe extern "C" {
419 pub fn rknn_create_mem2(
420 ctx: rknn_context,
421 size: u64,
422 alloc_flags: u64,
423 ) -> *mut rknn_tensor_mem;
424 }
425 unsafe extern "C" {
426 pub fn rknn_destroy_mem(
427 ctx: rknn_context,
428 mem: *mut rknn_tensor_mem,
429 ) -> ::std::os::raw::c_int;
430 }
431 unsafe extern "C" {
432 pub fn rknn_set_weight_mem(
433 ctx: rknn_context,
434 mem: *mut rknn_tensor_mem,
435 ) -> ::std::os::raw::c_int;
436 }
437 unsafe extern "C" {
438 pub fn rknn_set_internal_mem(
439 ctx: rknn_context,
440 mem: *mut rknn_tensor_mem,
441 ) -> ::std::os::raw::c_int;
442 }
443
444 unsafe extern "C" {
445 pub fn rknn_set_io_mem(
446 ctx: rknn_context,
447 mem: *mut rknn_tensor_mem,
448 attr: *mut rknn_tensor_attr,
449 ) -> ::std::os::raw::c_int;
450 }
451 unsafe extern "C" {
452 pub fn rknn_set_input_shape(
453 ctx: rknn_context,
454 attr: *mut rknn_tensor_attr,
455 ) -> ::std::os::raw::c_int;
456 }
457 #[cfg_attr(
458 feature = "docs",
459 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
460 )]
461 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
462 unsafe extern "C" {
463 pub fn rknn_set_input_shapes(
464 ctx: rknn_context,
465 n_inputs: u32,
466 attr: *mut rknn_tensor_attr,
467 ) -> ::std::os::raw::c_int;
468 }
469 unsafe extern "C" {
470 pub fn rknn_mem_sync(
471 context: rknn_context,
472 mem: *mut rknn_tensor_mem,
473 mode: rknn_mem_sync_mode,
474 ) -> ::std::os::raw::c_int;
475 }
476}
477pub type rknn_matmul_ctx = rknn_context;
478pub mod _rknn_matmul_quant_type {
479 pub type Type = ::std::os::raw::c_uint;
480 pub const RKNN_QUANT_TYPE_PER_LAYER_SYM: Type = 0;
481 pub const RKNN_QUANT_TYPE_PER_LAYER_ASYM: Type = 1;
482 pub const RKNN_QUANT_TYPE_PER_CHANNEL_SYM: Type = 2;
483 pub const RKNN_QUANT_TYPE_PER_CHANNEL_ASYM: Type = 3;
484 pub const RKNN_QUANT_TYPE_PER_GROUP_SYM: Type = 4;
485 pub const RKNN_QUANT_TYPE_PER_GROUP_ASYM: Type = 5;
486}
487pub use self::_rknn_matmul_quant_type::Type as rknn_matmul_quant_type;
488#[repr(C)]
489#[derive(Debug, Copy, Clone)]
490pub struct _rknn_quant_params {
491 pub name: [::std::os::raw::c_char; 256usize],
492 pub scale: *mut f32,
493 pub scale_len: i32,
494 pub zp: *mut i32,
495 pub zp_len: i32,
496}
497pub type rknn_quant_params = _rknn_quant_params;
498pub mod _rknn_matmul_type {
499 pub type Type = ::std::os::raw::c_uint;
500 pub const RKNN_FLOAT16_MM_FLOAT16_TO_FLOAT32: Type = 1;
501 pub const RKNN_INT8_MM_INT8_TO_INT32: Type = 2;
502 pub const RKNN_INT8_MM_INT8_TO_INT8: Type = 3;
503 pub const RKNN_FLOAT16_MM_FLOAT16_TO_FLOAT16: Type = 4;
504 pub const RKNN_FLOAT16_MM_INT8_TO_FLOAT32: Type = 5;
505 pub const RKNN_FLOAT16_MM_INT8_TO_FLOAT16: Type = 6;
506 pub const RKNN_FLOAT16_MM_INT4_TO_FLOAT32: Type = 7;
507 pub const RKNN_FLOAT16_MM_INT4_TO_FLOAT16: Type = 8;
508 pub const RKNN_INT8_MM_INT8_TO_FLOAT32: Type = 9;
509 pub const RKNN_INT4_MM_INT4_TO_INT16: Type = 10;
510 pub const RKNN_INT8_MM_INT4_TO_INT32: Type = 11;
511 pub const RKNN_FLOAT16_MM_INT4_TO_BFLOAT16: Type = 12;
512 pub const RKNN_INT8_MM_INT4_TO_FLOAT16: Type = 15;
513}
514pub use self::_rknn_matmul_type::Type as rknn_matmul_type;
515#[repr(C)]
516#[derive(Debug, Copy, Clone)]
517pub struct _rknn_matmul_tensor_attr {
518 pub name: [::std::os::raw::c_char; 256usize],
519 pub n_dims: u32,
520 pub dims: [u32; 16usize],
521 pub size: u32,
522 pub type_: rknn_tensor_type,
523}
524pub type rknn_matmul_tensor_attr = _rknn_matmul_tensor_attr;
525#[repr(C)]
526#[derive(Debug, Copy, Clone)]
527pub struct _rknn_matmul_io_attr {
528 pub A: rknn_matmul_tensor_attr,
529 pub B: rknn_matmul_tensor_attr,
530 pub C: rknn_matmul_tensor_attr,
531}
532pub type rknn_matmul_io_attr = _rknn_matmul_io_attr;
533#[repr(C)]
534#[derive(Debug, Copy, Clone)]
535pub struct _rknn_matmul_shape {
536 pub M: i32,
537 pub K: i32,
538 pub N: i32,
539}
540pub type rknn_matmul_shape = _rknn_matmul_shape;
541pub mod rknn_matmul_layout {
542 pub type Type = ::std::os::raw::c_uint;
543 pub const RKNN_MM_LAYOUT_NORM: Type = 0;
544 pub const RKNN_MM_LAYOUT_NATIVE: Type = 1;
545 pub const RKNN_MM_LAYOUT_TP_NORM: Type = 2;
546}
547#[repr(C)]
548#[derive(Debug, Copy, Clone)]
549pub struct rknn_matmul_info_t {
550 pub M: i32,
551 pub K: i32,
552 pub N: i32,
553 pub type_: rknn_matmul_type,
554 pub B_layout: i16,
555 pub B_quant_type: i16,
556 pub AC_layout: i16,
557 pub AC_quant_type: i16,
558 pub iommu_domain_id: i32,
559 pub group_size: i16,
560 pub reserved: [i8; 34usize],
561}
562pub type rknn_matmul_info = rknn_matmul_info_t;
563
564pub mod functions_matmul {
565 use super::*;
566
567 #[cfg_attr(
568 feature = "docs",
569 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
570 )]
571 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
572 unsafe extern "C" {
573 pub fn rknn_matmul_create(
574 ctx: *mut rknn_matmul_ctx,
575 info: *mut rknn_matmul_info,
576 io_attr: *mut rknn_matmul_io_attr,
577 ) -> ::std::os::raw::c_int;
578 }
579
580 #[cfg_attr(
581 feature = "docs",
582 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
583 )]
584 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
585 unsafe extern "C" {
586 pub fn rknn_matmul_create_dynamic_shape(
587 ctx: *mut rknn_matmul_ctx,
588 info: *mut rknn_matmul_info,
589 shape_num: ::std::os::raw::c_int,
590 dynamic_shapes: *mut rknn_matmul_shape,
591 io_attrs: *mut rknn_matmul_io_attr,
592 ) -> ::std::os::raw::c_int;
593 }
594 #[cfg_attr(
595 feature = "docs",
596 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
597 )]
598 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
599 unsafe extern "C" {
600 pub fn rknn_matmul_set_io_mem(
601 ctx: rknn_matmul_ctx,
602 mem: *mut rknn_tensor_mem,
603 attr: *mut rknn_matmul_tensor_attr,
604 ) -> ::std::os::raw::c_int;
605 }
606 #[cfg(feature = "rk3576")]
607 #[cfg_attr(feature = "docs", doc(cfg(feature = "rk3576")))]
608 unsafe extern "C" {
609 pub fn rknn_matmul_set_core_mask(
610 context: rknn_matmul_ctx,
611 core_mask: rknn_core_mask,
612 ) -> ::std::os::raw::c_int;
613 }
614
615 #[cfg_attr(
616 feature = "docs",
617 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
618 )]
619 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
620 unsafe extern "C" {
621 pub fn rknn_matmul_set_quant_params(
622 context: rknn_matmul_ctx,
623 params: *mut rknn_quant_params,
624 ) -> ::std::os::raw::c_int;
625 }
626
627 #[cfg_attr(
628 feature = "docs",
629 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
630 )]
631 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
632 unsafe extern "C" {
633 pub fn rknn_matmul_get_quant_params(
634 ctx: rknn_matmul_ctx,
635 params: *mut rknn_quant_params,
636 scale: *mut f32,
637 ) -> ::std::os::raw::c_int;
638 }
639
640 #[cfg_attr(
641 feature = "docs",
642 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
643 )]
644 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
645 unsafe extern "C" {
646 pub fn rknn_matmul_set_dynamic_shape(
647 ctx: rknn_matmul_ctx,
648 shape: *mut rknn_matmul_shape,
649 ) -> ::std::os::raw::c_int;
650 }
651 #[cfg_attr(
652 feature = "docs",
653 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
654 )]
655 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
656 unsafe extern "C" {
657 pub fn rknn_matmul_run(ctx: rknn_matmul_ctx) -> ::std::os::raw::c_int;
658 }
659
660 #[cfg_attr(
661 feature = "docs",
662 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
663 )]
664 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
665 unsafe extern "C" {
666 pub fn rknn_matmul_destroy(ctx: rknn_matmul_ctx) -> ::std::os::raw::c_int;
667 }
668
669 #[cfg_attr(
670 feature = "docs",
671 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
672 )]
673 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
674 unsafe extern "C" {
675 pub fn rknn_B_normal_layout_to_native_layout(
676 B_input: *mut ::std::os::raw::c_void,
677 B_output: *mut ::std::os::raw::c_void,
678 K: ::std::os::raw::c_int,
679 N: ::std::os::raw::c_int,
680 info: *mut rknn_matmul_info,
681 ) -> ::std::os::raw::c_int;
682 }
683}
684pub type rknn_custom_op_interal_context = u64;
685pub mod _rknn_target_type {
686 pub type Type = ::std::os::raw::c_uint;
687 pub const RKNN_TARGET_TYPE_CPU: Type = 1;
688 pub const RKNN_TARGET_TYPE_GPU: Type = 2;
689 pub const RKNN_TARGET_TYPE_MAX: Type = 3;
690}
691pub use self::_rknn_target_type::Type as rknn_target_type;
692#[repr(C)]
693#[derive(Debug, Copy, Clone)]
694pub struct _rknn_gpu_op_context {
695 pub cl_context: *mut ::std::os::raw::c_void,
696 pub cl_command_queue: *mut ::std::os::raw::c_void,
697 pub cl_kernel: *mut ::std::os::raw::c_void,
698}
699pub type rknn_gpu_op_context = _rknn_gpu_op_context;
700#[repr(C)]
701#[derive(Debug, Copy, Clone)]
702pub struct _rknn_custom_op_context {
703 pub target: rknn_target_type,
704 pub internal_ctx: rknn_custom_op_interal_context,
705 pub gpu_ctx: rknn_gpu_op_context,
706 pub priv_data: *mut ::std::os::raw::c_void,
707}
708pub type rknn_custom_op_context = _rknn_custom_op_context;
709#[repr(C)]
710#[derive(Debug, Copy, Clone)]
711pub struct _rknn_custom_op_tensor {
712 pub attr: rknn_tensor_attr,
713 pub mem: rknn_tensor_mem,
714}
715pub type rknn_custom_op_tensor = _rknn_custom_op_tensor;
716#[repr(C)]
717#[derive(Debug, Copy, Clone)]
718pub struct _rknn_custom_op_attr {
719 pub name: [::std::os::raw::c_char; 256usize],
720 pub dtype: rknn_tensor_type,
721 pub n_elems: u32,
722 pub data: *mut ::std::os::raw::c_void,
723}
724pub type rknn_custom_op_attr = _rknn_custom_op_attr;
725#[repr(C)]
726#[derive(Debug, Copy, Clone)]
727pub struct _rknn_custom_op {
728 pub version: u32,
729 pub target: rknn_target_type,
730 pub op_type: [::std::os::raw::c_char; 256usize],
731 pub cl_kernel_name: [::std::os::raw::c_char; 256usize],
732 pub cl_kernel_source: *mut ::std::os::raw::c_char,
733 pub cl_source_size: u64,
734 pub cl_build_options: [::std::os::raw::c_char; 256usize],
735 #[doc = " The callback function sets that the users need to code"]
736 pub init: ::std::option::Option<
737 unsafe extern "C" fn(
738 op_ctx: *mut rknn_custom_op_context,
739 inputs: *mut rknn_custom_op_tensor,
740 n_inputs: u32,
741 outputs: *mut rknn_custom_op_tensor,
742 n_outputs: u32,
743 ) -> ::std::os::raw::c_int,
744 >,
745 pub prepare: ::std::option::Option<
746 unsafe extern "C" fn(
747 op_ctx: *mut rknn_custom_op_context,
748 inputs: *mut rknn_custom_op_tensor,
749 n_inputs: u32,
750 outputs: *mut rknn_custom_op_tensor,
751 n_outputs: u32,
752 ) -> ::std::os::raw::c_int,
753 >,
754 pub compute: ::std::option::Option<
755 unsafe extern "C" fn(
756 op_ctx: *mut rknn_custom_op_context,
757 inputs: *mut rknn_custom_op_tensor,
758 n_inputs: u32,
759 outputs: *mut rknn_custom_op_tensor,
760 n_outputs: u32,
761 ) -> ::std::os::raw::c_int,
762 >,
763 pub compute_native: ::std::option::Option<
764 unsafe extern "C" fn(
765 op_ctx: *mut rknn_custom_op_context,
766 inputs: *mut rknn_custom_op_tensor,
767 n_inputs: u32,
768 outputs: *mut rknn_custom_op_tensor,
769 n_outputs: u32,
770 ) -> ::std::os::raw::c_int,
771 >,
772 pub destroy: ::std::option::Option<
773 unsafe extern "C" fn(op_ctx: *mut rknn_custom_op_context) -> ::std::os::raw::c_int,
774 >,
775}
776pub type rknn_custom_op = _rknn_custom_op;
777
778pub mod functions_custom_ops {
779 use super::*;
780 #[cfg_attr(
781 feature = "docs",
782 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
783 )]
784 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
785 unsafe extern "C" {
786 pub fn rknn_register_custom_ops(
787 ctx: rknn_context,
788 op: *mut rknn_custom_op,
789 custom_op_num: u32,
790 ) -> ::std::os::raw::c_int;
791 }
792
793 #[cfg_attr(
794 feature = "docs",
795 doc(cfg(any(feature = "rk35xx", feature = "rk3576")))
796 )]
797 #[cfg(any(feature = "rk35xx", feature = "rk3576"))]
798 unsafe extern "C" {
799 pub fn rknn_custom_op_get_op_attr(
800 op_ctx: *mut rknn_custom_op_context,
801 attr_name: *const ::std::os::raw::c_char,
802 op_attr: *mut rknn_custom_op_attr,
803 );
804 }
805}