Skip to main content

abi_definitions/task/
thread.rs

1use core::ffi::c_int;
2use core::ptr::null_mut;
3use core::{ffi::c_void, time::Duration};
4
5use abi_context as context;
6
7pub type XilaThreadIdentifier = usize;
8
9#[unsafe(no_mangle)]
10pub extern "C" fn xila_get_current_thread_identifier() -> usize {
11    context::get_instance()
12        .get_current_task_identifier()
13        .into_inner() as usize
14}
15
16#[unsafe(no_mangle)]
17pub extern "C" fn xila_thread_sleep(duration: u64) {
18    if let Some(task) = context::get_instance().try_get_current_task_identifier() {
19        context::get_instance().request_sleep(task, Duration::from_millis(duration));
20    }
21}
22
23#[unsafe(no_mangle)]
24pub extern "C" fn xila_thread_sleep_exact(duration: u32) {
25    xila_thread_sleep(duration as u64);
26}
27
28#[unsafe(no_mangle)]
29pub extern "C" fn xila_thread_join(_thread: usize) -> u32 {
30    todo!()
31}
32
33#[unsafe(no_mangle)]
34pub extern "C" fn xila_thread_detach(_thread: usize) -> u32 {
35    todo!()
36}
37
38#[unsafe(no_mangle)]
39pub extern "C" fn xila_thread_exit() {
40    unreachable!("Thread exit is not supported in this environment");
41}
42
43#[unsafe(no_mangle)]
44pub extern "C" fn xila_thread_get_stack_boundary() -> *mut u8 {
45    null_mut()
46}
47
48#[unsafe(no_mangle)]
49pub extern "C" fn xila_thread_create(
50    _function: extern "C" fn(*mut c_void) -> *mut c_void,
51    _argument: *mut u8,
52    _stack_size: usize,
53    _thread_identifier: *mut XilaThreadIdentifier,
54) -> u32 {
55    todo!()
56}
57
58#[unsafe(no_mangle)]
59pub extern "C" fn xila_thread_begin_blocking_operation() {}
60
61#[unsafe(no_mangle)]
62pub extern "C" fn xila_thread_end_blocking_operation() {}
63
64#[unsafe(no_mangle)]
65pub extern "C" fn xila_thread_wake_up(_thread: XilaThreadIdentifier) -> u32 {
66    todo!()
67}
68
69#[unsafe(no_mangle)]
70pub extern "C" fn xila_thread_yield() -> c_int {
71    xila_thread_sleep(0);
72    0
73}