1pub use strat9_syscall::{
4 call,
5 data::TimeSpec,
6 error::{self, Error},
7 number, 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 let mut ts = TimeSpec {
30 tv_sec: 0,
31 tv_nsec: 0,
32 };
33 call::clock_gettime(1 , &mut ts)?;
34 Ok((ts.tv_sec as u64)
35 .saturating_mul(1_000_000_000)
36 .saturating_add(ts.tv_nsec as u64))
37}
38
39pub fn nanosleep(req: &TimeSpec) -> Result<()> {
41 unsafe {
42 syscall2(number::SYS_NANOSLEEP, req as *const TimeSpec as usize, 0)?;
43 Ok(())
44 }
45}
46
47pub fn proc_yield() -> Result<()> {
49 call::sched_yield()?;
50 Ok(())
51}
52
53pub fn ipc_try_recv(port: u64, msg: &mut crate::IpcMessage) -> Result<()> {
55 call::ipc_try_recv(port as usize, msg)?;
56 Ok(())
57}
58
59pub fn debug_log(msg: &str) {
61 let _ = call::debug_log(msg.as_bytes());
62}
63
64pub fn exit(code: usize) -> ! {
66 call::exit(code)
67}