Skip to main content

rknpu2_sys/
api.rs

1/* automatically generated by rust-bindgen 0.72.0 */
2
3pub 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}