31 lines
851 B
Zig
31 lines
851 B
Zig
const std = @import("std");
|
|
const interrupts = @import("../arch/interrupts.zig").arch;
|
|
const print = @import("print.zig").print;
|
|
const mem = @import("mem.zig");
|
|
const sched = @import("sched.zig");
|
|
|
|
pub const Arguments = struct {
|
|
arg0: usize,
|
|
arg1: usize,
|
|
arg2: usize,
|
|
arg3: usize,
|
|
arg4: usize,
|
|
arg5: usize,
|
|
};
|
|
|
|
const SystemCall = *const fn (frame: *interrupts.InterruptStackFrame, args: *Arguments, retval: *isize) anyerror!void;
|
|
|
|
const syscalls = [_]SystemCall{ print, mem.allocFrame, mem.lockFrame, mem.freeFrame, sched.yield };
|
|
|
|
pub fn invokeSyscall(number: usize, frame: *interrupts.InterruptStackFrame, args: *Arguments, retval: *isize) void {
|
|
if (number >= syscalls.len) {
|
|
retval.* = -1;
|
|
return;
|
|
}
|
|
|
|
syscalls[number](frame, args, retval) catch {
|
|
retval.* = -1;
|
|
return;
|
|
};
|
|
}
|