Files
aster-core/kernel/syscall.c
T
2026-07-12 05:44:42 +02:00

59 lines
1.2 KiB
C

/*
* AsterOS Kernel
* Autor: Pavel Kalaš
* Rok: 2026
*
*/
/*
* Tento modul je vstupni brana pro systemova volani.
* Obsahuje dispatcher, ktery podle ID vola konkretni kernelovou sluzbu,
* a implementuje zakladni syscall operace pro zapis, alokaci a procesy.
*/
#include "memory.h"
#include "printk.h"
#include "process.h"
#include "syscall.h"
void syscall_init(void) {
}
u64 syscall_dispatch(u64 id, u64 a1, u64 a2, u64 a3, u64 a4) {
(void)a3;
(void)a4;
switch (id) {
case SYSCALL_WRITE:
return aster_write((const char *)a1);
case SYSCALL_ALLOC:
return (u64)aster_alloc((usize)a1);
case SYSCALL_PROCESS_CREATE:
return (u64)aster_process_create((void (*)(void))a1, (const char *)a2, (u8)a3);
default:
return (u64)-1;
}
}
u64 aster_write(const char *text) {
if (!text) {
return (u64)-1;
}
printk("%s", text);
return 0;
}
void *aster_alloc(usize size) {
return kmalloc(size);
}
i64 aster_process_create(void (*entry)(void), const char *name, u8 priority) {
process_t *p = process_create(name, entry, priority);
if (!p) {
return -1;
}
return p->pid;
}