diff options
Diffstat (limited to 'src/kernel/svc.c')
-rw-r--r-- | src/kernel/svc.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/kernel/svc.c b/src/kernel/svc.c index 4aa156e..1e03262 100644 --- a/src/kernel/svc.c +++ b/src/kernel/svc.c @@ -41,24 +41,31 @@ void SVC_Handler(void) { switch (svc_number) { case -1: - case 0: - _exit(args[0]); + case 0: /* Task-related calls + * 0 - _exit + * 1 - fork + * 2 - getpid + * 3 - waitpid + */ + task_svc(args); break; - case 1: + + case 1: /* GPIO-related calls + * 0 - gpio_mode + * 1 - gpio_type + * 2 - gpio_pupd + * 3 - gpio_speed + * 4 - gpio_dout + */ gpio_svc(args); break; - case 2: + + case 2: /* Clock-related calls + * 0 - delay + * 1 - udelay + */ clock_svc(args); break; - case 3: - asm("\ - mrs r0, psp; \ - stmdb r0!, {r4-r11, r14}; \ - mov %0, r0; \ - " : "=r" (args[0])); - task_svc(args); - asm("mov r0, %0" :: "r" (args[0])); // TODO doesn't work, r0 overwritten on exc. return - break; default: break; } |