1use strat9_syscall::syscall1;
3
4pub use strat9_syscall::{
5 call,
6 data::TimeSpec,
7 error::{self, Error},
8 number, syscall2,
9};
10
11pub type Result<T> = error::Result<T>;
12
13pub fn net_recv(buf: &mut [u8]) -> Result<usize> {
15 call::net_recv(buf)
16}
17
18pub fn net_send(buf: &[u8]) -> Result<usize> {
20 call::net_send(buf)
21}
22
23pub fn net_info(info_type: u64, buf: &mut [u8]) -> Result<usize> {
25 call::net_info(info_type as usize, buf.as_mut_ptr() as usize)
26}
27
28pub fn clock_gettime_ns() -> Result<u64> {
30 let mut ts = TimeSpec {
31 tv_sec: 0,
32 tv_nsec: 0,
33 };
34 call::clock_gettime(1 , &mut ts)?;
35 Ok((ts.tv_sec as u64)
36 .saturating_mul(1_000_000_000)
37 .saturating_add(ts.tv_nsec as u64))
38}
39
40pub fn nanosleep(req: &TimeSpec) -> Result<()> {
42 unsafe {
43 syscall2(number::SYS_NANOSLEEP, req as *const TimeSpec as usize, 0)?;
44 Ok(())
45 }
46}
47
48pub fn proc_yield() -> Result<()> {
50 call::sched_yield()?;
51 Ok(())
52}
53
54pub fn ipc_try_recv(port: u64, msg: &mut crate::IpcMessage) -> Result<()> {
56 call::ipc_try_recv(port as usize, msg)?;
57 Ok(())
58}
59
60pub fn net_register() -> Result<()> {
64 unsafe { syscall1(strat9_abi::syscall::SYS_NET_REGISTER, 0)? };
65 Ok(())
66}
67
68pub fn debug_log(msg: &str) {
69 let _ = call::debug_log(msg.as_bytes());
70}
71
72pub fn exit(code: usize) -> ! {
74 call::exit(code)
75}