1pub use strat9_syscall::{
4 call,
5 data::TimeSpec,
6 error::{self, Error},
7 number, syscall0, syscall2,
8};
9
10pub type Result<T> = error::Result<T>;
11
12pub fn net_recv(buf: &mut [u8]) -> Result<usize> {
14 call::net_recv(buf)
15}
16
17pub fn net_send(buf: &[u8]) -> Result<usize> {
19 call::net_send(buf)
20}
21
22pub fn net_info(info_type: u64, buf: &mut [u8]) -> Result<usize> {
24 call::net_info(info_type as usize, buf.as_mut_ptr() as usize)
25}
26
27pub fn clock_gettime_ns() -> Result<u64> {
29 unsafe { syscall0(number::SYS_CLOCK_GETTIME).map(|v| v as u64) }
30}
31
32pub fn nanosleep(req: &TimeSpec) -> Result<()> {
34 unsafe {
35 syscall2(number::SYS_NANOSLEEP, req as *const TimeSpec as usize, 0)?;
36 Ok(())
37 }
38}
39
40pub fn proc_yield() -> Result<()> {
42 call::sched_yield()?;
43 Ok(())
44}
45
46pub fn ipc_try_recv(port: u64, msg: &mut crate::IpcMessage) -> Result<()> {
48 call::ipc_try_recv(port as usize, msg)?;
49 Ok(())
50}
51
52pub fn debug_log(msg: &str) {
54 let _ = call::debug_log(msg.as_bytes());
55}
56
57pub fn exit(code: usize) -> ! {
59 call::exit(code)
60}