safa_abi/
syscalls.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2#[repr(u16)]
3pub enum SyscallTable {
4    SysExit = 0,
5    SysYield = 1,
6
7    SysOpen = 2,
8    SysDirIterOpen = 8,
9    SysClose = 5,
10    SysDirIterClose = 9,
11    SysDirIterNext = 10,
12    SysWrite = 3,
13    SysRead = 4,
14    SysCreate = 6,
15    SysCreateDir = 7,
16    SysSync = 16,
17    SysTruncate = 17,
18    SysCtl = 12,
19    // TODO: remove in favor of FAttrs
20    SysFSize = 22,
21    SysFAttrs = 24,
22    SysGetDirEntry = 23,
23
24    SysCHDir = 14,
25    SysGetCWD = 15,
26    SysSbrk = 18,
27
28    SysPSpawn = 19,
29    SysWait = 11,
30
31    SysShutdown = 20,
32    SysReboot = 21,
33}
34
35impl SyscallTable {
36    // update when a new Syscall Num is added
37    const MAX: u16 = Self::SysReboot as u16;
38}
39
40impl TryFrom<u16> for SyscallTable {
41    type Error = ();
42    fn try_from(value: u16) -> Result<Self, Self::Error> {
43        if value <= Self::MAX {
44            Ok(unsafe { core::mem::transmute(value) })
45        } else {
46            Err(())
47        }
48    }
49}