Update Red Bear driver substrate

Red Bear OS Team
This commit is contained in:
2026-04-16 12:43:10 +01:00
parent 6c432dd7be
commit a4833b69c5
23 changed files with 982 additions and 169 deletions
@@ -1,6 +1,6 @@
use std::collections::HashMap;
use std::mem;
use std::os::raw::c_int;
use std::os::raw::{c_int, c_ulong};
use std::ptr;
use std::sync::atomic::{AtomicBool, AtomicPtr, AtomicU64, Ordering};
use std::sync::{Arc, Mutex, OnceLock};
@@ -117,8 +117,8 @@ fn join_all_handles(entry: &TimerEntry) {
#[no_mangle]
pub extern "C" fn setup_timer(
timer: *mut TimerList,
function: extern "C" fn(*mut u8),
data: *mut u8,
function: extern "C" fn(c_ulong),
data: c_ulong,
) {
if timer.is_null() {
return;
@@ -131,13 +131,13 @@ pub extern "C" fn setup_timer(
TimerList {
expires: AtomicU64::new(0),
function: AtomicPtr::new(function_ptr),
data: AtomicPtr::new(data),
data: AtomicPtr::new(data as usize as *mut u8),
active: AtomicBool::new(false),
},
);
}
reset_timer_entry(timer, function_ptr, data);
reset_timer_entry(timer, function_ptr, data as usize as *mut u8);
}
#[no_mangle]
@@ -185,8 +185,8 @@ pub extern "C" fn mod_timer(timer: *mut TimerList, expires: u64) -> i32 {
}
let function =
unsafe { std::mem::transmute::<usize, extern "C" fn(*mut u8)>(function_addr) };
function(data_addr as *mut u8);
unsafe { std::mem::transmute::<usize, extern "C" fn(c_ulong)>(function_addr) };
function(data_addr as c_ulong);
if entry_for_thread.generation.load(Ordering::Acquire) == generation {
entry_for_thread.active.store(false, Ordering::Release);