cndrv/
lib.rs

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
35/// §4.3 Version Management
36mod version;
37
38/// §4.4 Device Management
39mod device;
40
41/// §4.5 Context Management
42mod context;
43
44/// §4.6 Memory Management
45mod memory;
46
47/// §4.7 Queue Management
48mod queue;
49
50/// §4.8 Notifier Management
51mod notifier;
52
53/// §4.9 Atomic Operation Management
54// mod atomic;
55
56/// §4.10 Module Management
57// mod module;
58
59/// §4.11 Execution Control Management
60// mod execution;
61
62/// §4.12 Virtual Memory Management
63// mod vmem;
64
65/// §4.13 Task Topo Management
66// mod task_topo;
67
68/// CNRTC
69mod cnrtc;
70
71pub trait AsRaw {
72    type Raw;
73    /// # Safety
74    ///
75    /// The caller must ensure that the returned item is dropped before the original item.
76    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}