bottleros/Kernel/interruptions/systemCallsDispatcher.c

69 lines
1.7 KiB
C

#include <stdint.h>
#include "systemCalls.h"
#include "memManager.h"
void exitProcess();
// void setFn(uint64_t, uint64_t, uint64_t);
char * processes();
// int enqueueProcess(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t);
char openPipe(int *, char *);
char nice(int, char);
#include "semLib.h"
#include "schedulerLib.h"
uint64_t systemCallsDispatcher(uint64_t rdi, uint64_t rsi, uint64_t rdx, uint64_t rcx, uint64_t r8, uint64_t r9) {
switch (rdi) {
case 0:
return write(rsi, rdx, rcx);
case 1:
return read(rsi, rdx, rcx);
case 2:
return getTime(rsi, rdx, rcx);
case 3:
return enqueueProcess(rsi, rdx, rcx, r8, r9);
case 4:
exitProcess();
break;
case 5:
// setFn(rsi, rdx, rcx);
break;
case 6:
return (uint64_t) processes();
case 7:
return (uint64_t) getSems();
case 8:
return pvPortMalloc((size_t) rsi);
case 9:
vPortFree((void *) rsi);
break;
case 10:
return (uint64_t) openPipe(rsi, rdx);
case 11:
return nice(rsi, rdx);
case 12:
sleep(rsi);
break;
case 13:
semWait((sem_t *) rsi);
break;
case 14:
semPost((sem_t *) rsi);
break;
case 15:
return semOpen(rsi, rdx);
case 16:
kill(rsi);
break;
case 17:
return getPid();
case 18:
return semClose((sem_t *) rsi);
case 19:
return block(rsi);
case 20:
return unblock(rsi);
default:
return -1;
}
return 1;
}