Skip to main content

os/syscall/
mod.rs

1const SYSCALL_DUP: usize = 24;
2const SYSCALL_CONNECT: usize = 29;
3const SYSCALL_LISTEN: usize = 30;
4const SYSCALL_ACCEPT: usize = 31;
5const SYSCALL_OPEN: usize = 56;
6const SYSCALL_CLOSE: usize = 57;
7const SYSCALL_PIPE: usize = 59;
8const SYSCALL_READ: usize = 63;
9const SYSCALL_WRITE: usize = 64;
10const SYSCALL_EXIT: usize = 93;
11const SYSCALL_SLEEP: usize = 101;
12const SYSCALL_YIELD: usize = 124;
13const SYSCALL_KILL: usize = 129;
14const SYSCALL_GET_TIME: usize = 169;
15const SYSCALL_GETPID: usize = 172;
16const SYSCALL_FORK: usize = 220;
17const SYSCALL_EXEC: usize = 221;
18const SYSCALL_WAITPID: usize = 260;
19const SYSCALL_THREAD_CREATE: usize = 1000;
20const SYSCALL_GETTID: usize = 1001;
21const SYSCALL_WAITTID: usize = 1002;
22const SYSCALL_MUTEX_CREATE: usize = 1010;
23const SYSCALL_MUTEX_LOCK: usize = 1011;
24const SYSCALL_MUTEX_UNLOCK: usize = 1012;
25const SYSCALL_SEMAPHORE_CREATE: usize = 1020;
26const SYSCALL_SEMAPHORE_UP: usize = 1021;
27const SYSCALL_SEMAPHORE_DOWN: usize = 1022;
28const SYSCALL_CONDVAR_CREATE: usize = 1030;
29const SYSCALL_CONDVAR_SIGNAL: usize = 1031;
30const SYSCALL_CONDVAR_WAIT: usize = 1032;
31const SYSCALL_FRAMEBUFFER: usize = 2000;
32const SYSCALL_FRAMEBUFFER_FLUSH: usize = 2001;
33const SYSCALL_EVENT_GET: usize = 3000;
34const SYSCALL_KEY_PRESSED: usize = 3001;
35
36mod fs;
37mod gui;
38mod input;
39mod net;
40mod process;
41mod sync;
42mod thread;
43
44use fs::*;
45use gui::*;
46use input::*;
47use net::*;
48use process::*;
49use sync::*;
50use thread::*;
51
52pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize {
53    match syscall_id {
54        SYSCALL_DUP => sys_dup(args[0]),
55        SYSCALL_CONNECT => sys_connect(args[0] as _, args[1] as _, args[2] as _),
56        SYSCALL_LISTEN => sys_listen(args[0] as _),
57        SYSCALL_ACCEPT => sys_accept(args[0] as _),
58        SYSCALL_OPEN => sys_open(args[0] as *const u8, args[1] as u32),
59        SYSCALL_CLOSE => sys_close(args[0]),
60        SYSCALL_PIPE => sys_pipe(args[0] as *mut usize),
61        SYSCALL_READ => sys_read(args[0], args[1] as *const u8, args[2]),
62        SYSCALL_WRITE => sys_write(args[0], args[1] as *const u8, args[2]),
63        SYSCALL_EXIT => sys_exit(args[0] as i32),
64        SYSCALL_SLEEP => sys_sleep(args[0]),
65        SYSCALL_YIELD => sys_yield(),
66        SYSCALL_KILL => sys_kill(args[0], args[1] as u32),
67        SYSCALL_GET_TIME => sys_get_time(),
68        SYSCALL_GETPID => sys_getpid(),
69        SYSCALL_FORK => sys_fork(),
70        SYSCALL_EXEC => sys_exec(args[0] as *const u8, args[1] as *const usize),
71        SYSCALL_WAITPID => sys_waitpid(args[0] as isize, args[1] as *mut i32),
72        SYSCALL_THREAD_CREATE => sys_thread_create(args[0], args[1]),
73        SYSCALL_GETTID => sys_gettid(),
74        SYSCALL_WAITTID => sys_waittid(args[0]) as isize,
75        SYSCALL_MUTEX_CREATE => sys_mutex_create(args[0] == 1),
76        SYSCALL_MUTEX_LOCK => sys_mutex_lock(args[0]),
77        SYSCALL_MUTEX_UNLOCK => sys_mutex_unlock(args[0]),
78        SYSCALL_SEMAPHORE_CREATE => sys_semaphore_create(args[0]),
79        SYSCALL_SEMAPHORE_UP => sys_semaphore_up(args[0]),
80        SYSCALL_SEMAPHORE_DOWN => sys_semaphore_down(args[0]),
81        SYSCALL_CONDVAR_CREATE => sys_condvar_create(),
82        SYSCALL_CONDVAR_SIGNAL => sys_condvar_signal(args[0]),
83        SYSCALL_CONDVAR_WAIT => sys_condvar_wait(args[0], args[1]),
84        SYSCALL_FRAMEBUFFER => sys_framebuffer(),
85        SYSCALL_FRAMEBUFFER_FLUSH => sys_framebuffer_flush(),
86        SYSCALL_EVENT_GET => sys_event_get(),
87        SYSCALL_KEY_PRESSED => sys_key_pressed(),
88        _ => panic!("Unsupported syscall_id: {}", syscall_id),
89    }
90}