rknpu_sys/
lib.rs

1#![cfg_attr(docsrs, feature(doc_cfg))]
2
3//! # rknpu-sys
4//!
5//! Rockchip NPU FFI bindings
6
7/// Raw bindings from `bindgen`.
8#[cfg(feature = "raw")]
9#[cfg_attr(docsrs, doc(cfg(feature = "raw")))]
10pub mod bindings {
11    #![allow(unused_imports)]
12    #![allow(non_upper_case_globals)]
13    #![allow(non_camel_case_types)]
14    #![allow(non_snake_case)]
15    #[cfg(fallback)]
16    include!("bindings_docs.rs");
17    #[cfg(not(fallback))]
18    include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
19}
20
21#[cfg(not(feature = "raw"))]
22mod bindings {
23    #![allow(unused_imports)]
24    #![allow(dead_code)]
25    #![allow(non_upper_case_globals)]
26    #![allow(non_camel_case_types)]
27    #![allow(non_snake_case)]
28    #[cfg(fallback)]
29    include!("bindings_docs.rs");
30    #[cfg(not(fallback))]
31    include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
32}
33
34/// RKNN API
35#[cfg(feature = "rknn")]
36#[cfg_attr(docsrs, doc(cfg(feature = "rknn")))]
37pub mod rknn {
38    pub mod flag {
39        pub use crate::bindings::{
40            RKNN_FLAG_PRIOR_HIGH,
41            RKNN_FLAG_PRIOR_MEDIUM,
42            RKNN_FLAG_PRIOR_LOW,
43            RKNN_FLAG_ASYNC_MASK,
44            RKNN_FLAG_COLLECT_PERF_MASK,
45            RKNN_FLAG_MEM_ALLOC_OUTSIDE,
46            RKNN_FLAG_SHARE_WEIGHT_MEM,
47            RKNN_FLAG_FENCE_IN_OUTSIDE,
48            RKNN_FLAG_FENCE_OUT_OUTSIDE,
49            RKNN_FLAG_COLLECT_MODEL_INFO_ONLY,
50            RKNN_FLAG_INTERNAL_ALLOC_OUTSIDE,
51            RKNN_FLAG_EXECUTE_FALLBACK_PRIOR_DEVICE_GPU,
52            RKNN_FLAG_ENABLE_SRAM,
53            RKNN_FLAG_SHARE_SRAM,
54            RKNN_FLAG_DISABLE_PROC_HIGH_PRIORITY,
55            RKNN_FLAG_DISABLE_FLUSH_INPUT_MEM_CACHE,
56            RKNN_FLAG_DISABLE_FLUSH_OUTPUT_MEM_CACHE,
57            RKNN_FLAG_MODEL_BUFFER_ZERO_COPY,
58            RKNN_MEM_FLAG_ALLOC_NO_CONTEXT,
59        };
60    }
61    pub mod error {
62        pub use crate::bindings::{
63            RKNN_SUCC,
64            RKNN_ERR_FAIL,
65            RKNN_ERR_TIMEOUT,
66            RKNN_ERR_DEVICE_UNAVAILABLE,
67            RKNN_ERR_MALLOC_FAIL,
68            RKNN_ERR_PARAM_INVALID,
69            RKNN_ERR_MODEL_INVALID,
70            RKNN_ERR_CTX_INVALID,
71            RKNN_ERR_INPUT_INVALID,
72            RKNN_ERR_OUTPUT_INVALID,
73            RKNN_ERR_DEVICE_UNMATCH,
74            RKNN_ERR_INCOMPATILE_PRE_COMPILE_MODEL,
75            RKNN_ERR_INCOMPATILE_OPTIMIZATION_LEVEL_VERSION,
76            RKNN_ERR_TARGET_PLATFORM_UNMATCH,
77        };
78    }
79
80    pub mod limits {
81        pub use crate::bindings::{
82            RKNN_MAX_DIMS,
83            RKNN_MAX_NUM_CHANNEL,
84            RKNN_MAX_NAME_LEN,
85            RKNN_MAX_DYNAMIC_SHAPE_NUM,
86        };
87    }
88
89    pub use crate::bindings::{
90        rknn_context,
91        rknn_query_cmd,
92        rknn_tensor_type,
93        rknn_tensor_qnt_type,
94        rknn_tensor_format,
95        rknn_core_mask,
96        rknn_input_output_num,
97        rknn_tensor_attr,
98        rknn_input_range,
99        rknn_perf_detail,
100        rknn_perf_run,
101        rknn_sdk_version,
102        rknn_mem_size,
103        rknn_custom_string,
104        rknn_tensor_mem_flags,
105        rknn_mem_alloc_flags,
106        rknn_mem_sync_mode,
107        rknn_tensor_mem,
108        rknn_input,
109        rknn_output,
110        rknn_init_extend,
111        rknn_run_extend,
112        rknn_output_extend,
113    };
114
115    pub use crate::bindings::{
116        rknn_init,
117        rknn_destroy,
118        rknn_query,
119        rknn_inputs_set,
120        rknn_run,
121        rknn_outputs_get,
122        rknn_outputs_release,
123        rknn_create_mem,
124        rknn_destroy_mem,
125        rknn_set_io_mem,
126    };
127
128    /// Tensor data type name helper
129    ///
130    /// Reference: [rknn_api.h#L191](https://github.com/airockchip/rknn-toolkit2/blob/59a913d172e7f5ff03c9076e2ec7b1b1288ffd08/rknpu2/runtime/Linux/librknn_api/include/rknn_api.h#L191)
131    pub fn get_type_string(t: rknn_tensor_type) -> &'static str {
132        match t {
133            rknn_tensor_type::RKNN_TENSOR_FLOAT32 => "FP32",
134            rknn_tensor_type::RKNN_TENSOR_FLOAT16 => "FP16",
135            rknn_tensor_type::RKNN_TENSOR_INT8 => "INT8",
136            rknn_tensor_type::RKNN_TENSOR_UINT8 => "UINT8",
137            rknn_tensor_type::RKNN_TENSOR_INT16 => "INT16",
138            rknn_tensor_type::RKNN_TENSOR_UINT16 => "UINT16",
139            rknn_tensor_type::RKNN_TENSOR_INT32 => "INT32",
140            rknn_tensor_type::RKNN_TENSOR_UINT32 => "UINT32",
141            rknn_tensor_type::RKNN_TENSOR_INT64 => "INT64",
142            rknn_tensor_type::RKNN_TENSOR_BOOL => "BOOL",
143            rknn_tensor_type::RKNN_TENSOR_INT4 => "INT4",
144            rknn_tensor_type::RKNN_TENSOR_BFLOAT16 => "BF16",
145            _ => "UNKNOW",
146        }
147    }
148
149    /// Tensor quantization name helper
150    ///
151    /// Reference: [rknn_api.h#L221](https://github.com/airockchip/rknn-toolkit2/blob/59a913d172e7f5ff03c9076e2ec7b1b1288ffd08/rknpu2/runtime/Linux/librknn_api/include/rknn_api.h#L221)
152    pub fn get_qnt_type_string(t: rknn_tensor_qnt_type) -> &'static str {
153        match t {
154            rknn_tensor_qnt_type::RKNN_TENSOR_QNT_NONE => "NONE",
155            rknn_tensor_qnt_type::RKNN_TENSOR_QNT_DFP => "DFP",
156            rknn_tensor_qnt_type::RKNN_TENSOR_QNT_AFFINE_ASYMMETRIC => "AFFINE",
157            _ => "UNKNOW",
158        }
159    }
160}
161
162/// Matrix operation API
163#[cfg(feature = "matmul")]
164#[cfg_attr(docsrs, doc(cfg(feature = "matmul")))]
165pub mod matmul {}
166
167/// Custom operator API
168#[cfg(feature = "custom-op")]
169#[cfg_attr(docsrs, doc(cfg(feature = "custom-op")))]
170pub mod custom_op {}