42 lines
979 B
Rust
42 lines
979 B
Rust
use {
|
|
crate::{
|
|
ipc::buffer::{BufferTypes, IpcBuffer},
|
|
kmain::IPC_BUFFERS,
|
|
},
|
|
hbvm::value::Value,
|
|
};
|
|
|
|
pub fn make_ipc_buffer(registers: [Value; 256]) {
|
|
let r255 = registers[255];
|
|
let r254 = registers[254];
|
|
let r253 = registers[253];
|
|
|
|
let bounded = match unsafe { r254.u64 } {
|
|
0 => false,
|
|
1 => true,
|
|
_ => {
|
|
panic!("Bad");
|
|
}
|
|
};
|
|
|
|
let length = unsafe { r254.u64 };
|
|
|
|
let mut buffs = IPC_BUFFERS.lock();
|
|
match bounded {
|
|
false => {
|
|
let abc = IpcBuffer::new(false, 0);
|
|
buffs.push(abc);
|
|
}
|
|
true => {
|
|
let abc = IpcBuffer::new(true, length);
|
|
buffs.push(abc);
|
|
}
|
|
};
|
|
}
|
|
|
|
pub fn delete_ipc_buffer(registers: [Value; 256]) {
|
|
log::warn!("Unstable ecall");
|
|
//TODO: fully define out how to layout the ecall for deleting buffers
|
|
//and figure out what happens if there are still messages in the queue
|
|
}
|