UnnamedOS
syscall.c
Go to the documentation of this file.
1 
13 #include <common.h>
14 #include <interrupts/syscall.h>
15 #include <interrupts/isr.h>
16 #include <tasks/schedule.h>
17 #include <syscall.h>
18 
29 static void syscall_exit(uint32_t return_value, uint32_t ecx,
30  uint32_t edx, uint32_t esi, uint32_t edi, cpu_state_t** cpu) {
32  task_pid_t next_task = schedule_get_next_task();
33  if (current_task == next_task) {
34  println("%4aThe last task cannot exit%a");
35  }
40  task_stop(current_task);
41  *cpu = schedule_switch_task(next_task);
42 }
43 
48 static uint32_t syscall_getpid() {
50 }
51 
53 void syscall_init() {
54  isr_register_syscall(SYSCALL_EXIT, syscall_exit);
55  isr_register_syscall(SYSCALL_GETPID, syscall_getpid);
56  isr_register_syscall(SYSCALL_IO_PUTCHAR, io_putchar);
57  isr_register_syscall(SYSCALL_IO_ATTR, io_attr);
58 }
59 
static uint32_t syscall_getpid()
Returns the current task&#39;s PID.
Definition: syscall.c:48
task_pid_t schedule_get_current_task()
Returns the current task&#39;s PID.
Definition: schedule.c:74
The CPU&#39;s state when an interrupt occurs.
Definition: isr.h:58
task_pid_t schedule_get_next_task()
Returns the next running task&#39;s PID.
Definition: schedule.c:82
uint32_t task_pid_t
unique process ID
Definition: task.h:17
void isr_register_syscall(size_t id, void *syscall)
Registers a syscall handler to call whenever a specified syscall is requested.
Definition: isr.c:80
void task_stop(task_pid_t pid)
Stops a task.
Definition: task.c:153
static task_pid_t current_task
the currently running task pid
Definition: schedule.c:18
void syscall_init()
Initializes the syscall interface.
Definition: syscall.c:53
static void syscall_exit(uint32_t return_value, uint32_t ecx, uint32_t edx, uint32_t esi, uint32_t edi, cpu_state_t **cpu)
Exits the current task.
Definition: syscall.c:29
cpu_state_t * schedule_switch_task(task_pid_t next_task)
Switches to a given task.
Definition: schedule.c:47