use crate::{errors::IOResult, mips32::syscall, BasicKernelInterface, FileDescriptor};
#[derive(Debug)]
pub(crate) struct Mips32IO;
#[repr(usize)]
pub(crate) enum SyscallNumber {
Exit = 4246,
Read = 4003,
Write = 4004,
}
impl BasicKernelInterface for Mips32IO {
fn write(fd: FileDescriptor, buf: &[u8]) -> IOResult<usize> {
unsafe {
crate::linux::from_ret(syscall::syscall3(
SyscallNumber::Write as usize,
fd.into(),
buf.as_ptr() as usize,
buf.len(),
))
}
}
fn read(fd: FileDescriptor, buf: &mut [u8]) -> IOResult<usize> {
unsafe {
crate::linux::from_ret(syscall::syscall3(
SyscallNumber::Read as usize,
fd.into(),
buf.as_ptr() as usize,
buf.len(),
))
}
}
fn exit(code: usize) -> ! {
unsafe {
let _ = syscall::syscall1(SyscallNumber::Exit as usize, code);
panic!()
}
}
}