1#[cxx::bridge]
6pub mod ffi {
7 #[namespace = "pxl::runtime"]
8 #[repr(u32)]
9 #[derive(Debug)]
10 enum ArgType {
11 Constant,
12 DeviceMemory,
13 NDArray,
14 }
15 #[namespace = "pxl::runtime"]
16 #[derive(Debug)]
17 struct ArgInfo_t {
18 arg_type: ArgType,
19 address: *const c_void,
20 total_size: usize,
21 }
22
23 #[namespace = "pxl"]
24 #[repr(u32)]
25 #[derive(Debug)]
26 enum PxlResult {
27 Success,
28 Failure,
29 }
30
31 #[namespace = "pxl"]
32 #[repr(u32)]
33 #[derive(Debug)]
34 enum DeviceAttr {
35 CxlEnabled,
36 GaiaEnabled,
37 NumClusterPerSub,
38 NumMuPerCluster,
39 NumThreadPerMu,
40 TotalSubCount,
41 CxlMemoryCapacity,
42 IoMemoryCapacity,
43 }
44
45 #[namespace = "pxl"]
46 #[repr(u32)]
47 #[derive(Debug)]
48 enum MemType {
49 CxlMem,
50 IoMem,
51 HostMem,
52 }
53
54 #[namespace = "pxl"]
55 #[derive(Debug)]
56 struct MemInfo_t {
57 r#type: MemType,
58 size: usize,
59 }
60
61 #[namespace = "pxl"]
62 #[repr(u32)]
63 #[derive(Debug)]
64 enum ExecuteStatus {
65 Idle,
66 Running,
67 IssueDone,
68 ExecuteDone,
69 Fail,
70 Error,
71 }
72
73 #[namespace = "pxl"]
74 #[derive(Debug, Clone)]
75 struct KernelError_t {
76 beginIndex: u32,
77 endIndex: u32,
78 }
79 unsafe extern "C++" {
80 #[namespace = "pxl"]
81 include!("pxl/pxl.hpp");
82 include!("pxl_wrapper.hpp");
83
84 #[namespace = "pxl"]
86 pub type c_void;
87 #[namespace = "pxl"]
88 pub type PxlResult;
89 #[namespace = "pxl"]
90 pub type DeviceAttr;
91 #[namespace = "pxl"]
92 pub type MemType;
93 #[namespace = "pxl"]
94 pub type MemInfo_t;
95 #[namespace = "pxl"]
96 pub type ExecuteStatus;
97 #[namespace = "pxl"]
98 pub type KernelError_t;
99 #[namespace = "pxl"]
100 pub type ArgType;
101 #[namespace = "pxl"]
102 pub type ArgInfo_t;
103
104 #[namespace = "pxl::kernel"]
105 pub type Module;
106 #[namespace = "pxl::kernel"]
107 pub type Function;
108
109 #[namespace = "pxl::runtime"]
110 pub type Map;
111 #[namespace = "pxl::runtime"]
112 pub type Stream;
113 #[namespace = "pxl::runtime"]
114 pub type Context;
115 #[namespace = "pxl::runtime"]
116 pub type Job;
117
118 #[namespace = "pxl::kernel"]
120 pub unsafe fn createModule(filename: *const c_char) -> *mut Module;
121
122 #[namespace = "pxl::kernel"]
123 pub unsafe fn destroyModule(module: *mut Module);
124
125 #[namespace = "pxl::kernel"]
126 pub unsafe fn createFunction(
127 self: Pin<&mut Module>,
128 muFuncName: *const c_char,
129 ) -> *mut Function;
130
131 #[namespace = "pxl::kernel"]
132 pub unsafe fn destroyFunction(self: Pin<&mut Module>, function: *mut Function);
133
134 #[namespace = "pxl::runtime"]
136 pub fn getNumDevice() -> u32;
137 #[namespace = "pxl::runtime"]
138 pub fn createContext(device_id: u32) -> *mut Context;
139 #[namespace = "pxl::runtime"]
140 pub unsafe fn destroyContext(context: *mut Context);
141 #[namespace = "pxl::runtime"]
142 pub unsafe fn createStream() -> *mut Stream;
143 #[namespace = "pxl::runtime"]
144 pub unsafe fn destroyStream(stream: *mut Stream);
145
146 #[namespace = "pxl::runtime"]
148 pub fn deviceId(self: &Context) -> u32;
149
150 #[namespace = "pxl::runtime"]
151 pub fn createJob(self: Pin<&mut Context>) -> *mut Job;
152 #[namespace = "pxl::runtime"]
153 pub unsafe fn create_job_with_sub(context: *mut Context, num_sub: u32) -> *mut Job;
154 #[namespace = "pxl::runtime"]
155 pub unsafe fn destroyJob(self: Pin<&mut Context>, job: *mut Job) -> PxlResult;
156
157 #[namespace = "pxl::runtime"]
158 pub fn stream(self: &Context) -> *mut Stream;
159
160 #[namespace = "pxl::runtime"]
161 pub fn availableSubCount(self: &Context) -> u32;
162 #[namespace = "pxl::runtime"]
163 pub fn availableMemSize(self: &Context) -> u64;
164 #[namespace = "pxl::runtime"]
165 pub fn availableIoMemSize(self: &Context) -> u64;
166
167 #[namespace = "pxl::runtime"]
168 pub fn getAttribute(self: &Context, attr: DeviceAttr, value: &mut u64) -> PxlResult;
169
170 #[namespace = "pxl::runtime"]
171 pub fn memAlloc(self: Pin<&mut Context>, size: usize) -> *mut c_void;
172 #[namespace = "pxl::runtime"]
173 pub fn memCalloc(self: Pin<&mut Context>, num: usize, size: usize) -> *mut c_void;
174 #[namespace = "pxl::runtime"]
175 pub fn ioMemAlloc(self: Pin<&mut Context>, size: usize) -> *mut c_void;
176 #[namespace = "pxl::runtime"]
177 pub unsafe fn memFree(self: Pin<&mut Context>, ptr: *const c_void);
178
179 #[namespace = "pxl::runtime"]
180 pub unsafe fn copyToDevice(
181 self: Pin<&mut Context>,
182 device_ptr: *const c_void,
183 host_ptr: *const c_void,
184 size: usize,
185 ) -> PxlResult;
186 #[namespace = "pxl::runtime"]
187 pub unsafe fn copyFromDevice(
188 self: Pin<&mut Context>,
189 host_ptr: *const c_void,
190 device_ptr: *const c_void,
191 size: usize,
192 ) -> PxlResult;
193 #[namespace = "pxl::runtime"]
194 pub unsafe fn syncToDevice(
195 self: Pin<&mut Context>,
196 device_ptr: *const c_void,
197 size: usize,
198 ) -> PxlResult;
199 #[namespace = "pxl::runtime"]
200 pub unsafe fn syncFromDevice(
201 self: Pin<&mut Context>,
202 device_ptr: *const c_void,
203 size: usize,
204 ) -> PxlResult;
205 #[namespace = "pxl::runtime"]
206 pub unsafe fn getMemInfo(self: Pin<&mut Context>, host_ptr: *const c_void) -> MemInfo_t;
207
208 #[namespace = "pxl::runtime"]
210 pub unsafe fn load(self: Pin<&mut Job>, filename: *const c_char) -> PxlResult;
211 #[namespace = "pxl::runtime"]
212 pub fn isLoaded(self: &Job) -> bool;
213 #[namespace = "pxl::runtime"]
214 pub fn subAlloc(self: Pin<&mut Job>) -> PxlResult;
215 #[namespace = "pxl::runtime"]
216 pub fn subFree(self: Pin<&mut Job>);
217 #[namespace = "pxl::runtime"]
218 pub unsafe fn buildMap(
219 self: Pin<&mut Job>,
220 function: *const Function,
221 count: u32,
222 ) -> *mut Map;
223
224 #[namespace = "pxl::runtime"]
226 pub fn synchronize(self: Pin<&mut Map>) -> PxlResult;
227 #[namespace = "pxl::runtime"]
228 pub unsafe fn setStream(self: Pin<&mut Map>, stream: *mut Stream);
229 #[namespace = "pxl::runtime"]
230 pub unsafe fn setBatchSize(self: Pin<&mut Map>, batch_size: &u32);
231 #[namespace = "pxl::runtime"]
232 pub fn setClusterBitmap(self: Pin<&mut Map>, cluster_bitmap: &u32);
233 #[namespace = "pxl::runtime"]
234 pub fn streamId(self: &Map) -> u32;
235 #[namespace = "pxl::runtime"]
236 pub fn getExecuteStatus(self: &Map) -> ExecuteStatus;
237
238 #[namespace = "pxl::runtime"]
240 pub fn streamId(self: &Stream) -> u32;
241
242 #[namespace = "pxl::runtime"]
245 pub unsafe fn job_load_module(job: *mut Job, module: *mut Module) -> PxlResult; #[namespace = "pxl::runtime"]
247 pub unsafe fn job_get_sub_id_list(
248 job: *mut Job,
249 sub_ids: *mut u32,
250 max_size: usize,
251 ) -> usize;
252 #[namespace = "pxl::runtime"]
253 pub unsafe fn job_sub_alloc_with_num(job: *mut Job, num_sub: u32) -> PxlResult;
254 #[namespace = "pxl::runtime"]
255 pub unsafe fn job_sub_free_with_num(job: *mut Job, num_sub: u32);
256 #[namespace = "pxl::runtime"]
257 pub unsafe fn job_build_map_with_func_name(
258 job: *mut Job,
259 mu_func_name: *const c_char,
260 test_count: u32,
261 ) -> *mut Map;
262 #[namespace = "pxl::runtime"]
263 pub unsafe fn job_build_map_with_count(job: *mut Job, test_count: u32) -> *mut Map;
264 #[namespace = "pxl::runtime"]
265 pub unsafe fn destroy_map(map: *mut Map);
266 #[namespace = "pxl::runtime"]
267 pub unsafe fn map_execute(
268 map: *mut Map,
269 args: *mut ArgInfo_t,
270 num_args: usize,
271 ) -> PxlResult;
272 #[namespace = "pxl::runtime"]
273 pub unsafe fn check_callback_interface(
274 callback_ptr: *mut c_void,
275 user_data: *mut c_void,
276 ) -> bool;
277 #[namespace = "pxl::runtime"]
278 pub unsafe fn map_set_completion_callback(
279 map: *mut Map,
280 callback_ptr: *mut c_void,
281 user_data: *mut c_void,
282 );
283 #[namespace = "pxl::runtime"]
284 pub unsafe fn map_set_error_callback(
285 map: *mut Map,
286 callback_ptr: *mut c_void,
287 user_data: *mut c_void,
288 );
289 #[namespace = "pxl::runtime"]
290 pub unsafe fn map_set_message_callback(
291 map: *mut Map,
292 callback_ptr: *mut c_void,
293 user_data: *mut c_void,
294 );
295 #[namespace = "pxl::runtime"]
296 pub unsafe fn map_set_default_stream(map: *mut Map);
297 #[namespace = "pxl::runtime"]
298 pub unsafe fn map_get_kernel_error(
299 map: *mut Map,
300 error_count: *mut usize,
301 ) -> *const KernelError_t;
302 }
303}
304
305pub use ffi::*;