Mercurial > lcfOS
diff kernel/syscall.c3 @ 292:534b94b40aa8
Fixup reorganize
author | Windel Bouwman |
---|---|
date | Wed, 27 Nov 2013 08:06:42 +0100 |
parents | c9781c73e7e2 |
children | 158068af716c |
line wrap: on
line diff
--- a/kernel/syscall.c3 Sun Nov 24 11:24:15 2013 +0100 +++ b/kernel/syscall.c3 Wed Nov 27 08:06:42 2013 +0100 @@ -1,9 +1,60 @@ module syscall; +/* + This module handles all the system calls from user space. +*/ + +enum { + SendMsg = 1, + ReceiveMsg = 2, + +} syscall_t; // System call handlers. System calls are made from user space. +func void handle_system_call(int callId, int a, int b, int c, int d) +{ + // Main entry, check what to do here + switch(callId) + { + case SendMsg: + handle_send_msg(); + proc = process.byId(a); + if (not proc) + { + panic(); + } -func void handle_system_call() -{ + proc.setMessage(); + scheduler.current.setState(Sleep); + break; + case ReceiveMsg: + break; + case Reboot: + arch.reboot(); + break; + default: + return NO_SUCH_CALL; + } + + return OK; } +// Handle send message syscall +func void handle_send_msg() +{ + p = process.byId(msg.to_id); + scheduler.attempt(p); +} + +func handle_recv_msg() +{ + // Block until we have a message + currentProc->setState(Sleep); + scheduler.executeNext(); +} + +func handle_reboot() +{ + reboot(); +} +