1#![doc = include_str!("../README.md")]
2#![cfg(detected_neuware)]
3#![deny(warnings)]
4
5#[macro_use]
6#[allow(unused, non_upper_case_globals, non_camel_case_types, non_snake_case)]
7pub mod bindings {
8 include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
9
10 #[macro_export]
11 macro_rules! cndrv {
12 ($f:expr) => {{
13 #[allow(unused_imports)]
14 use $crate::bindings::*;
15 #[allow(unused_unsafe)]
16 let err = unsafe { $f };
17 assert_eq!(err, CNresult::CN_SUCCESS);
18 }};
19 }
20
21 #[macro_export]
22 macro_rules! cnrtc {
23 ($f:expr) => {{
24 #[allow(unused_imports)]
25 use $crate::bindings::*;
26 #[allow(unused_unsafe)]
27 let err = unsafe { $f };
28 assert_eq!(err, cnrtcStatus::CNRTC_SUCCESS);
29 }};
30 }
31}
32
33mod spore;
34
35mod version;
37
38mod device;
40
41mod context;
43
44mod memory;
46
47mod queue;
49
50mod notifier;
52
53mod cnrtc;
70
71pub trait AsRaw {
72 type Raw;
73 unsafe fn as_raw(&self) -> Self::Raw;
77}
78
79#[inline(always)]
80pub fn init() {
81 cndrv!(cnInit(0));
82}
83
84pub use cnrtc::CnrtcBinary;
85pub use context::{Context, CurrentCtx};
86pub use device::Device;
87pub use memory::{
88 memcpy_d2d, memcpy_d2h, memcpy_h2d, DevByte, DevMem, DevMemSpore, HostMem, HostMemSpore,
89};
90pub use notifier::{Notifier, NotifierSpore};
91pub use queue::{Queue, QueueSpore};
92pub use spore::{ContextResource, ContextSpore, RawContainer};
93pub use version::{driver_version, library_version, Version};
94
95struct Blob<P> {
96 ptr: P,
97 len: usize,
98}