core: Add memory and scheduler related system calls
This commit is contained in:
parent
671a9b5887
commit
3ce8cfb726
26
core/src/sys/mem.zig
Normal file
26
core/src/sys/mem.zig
Normal file
@ -0,0 +1,26 @@
|
||||
const interrupts = @import("../arch/interrupts.zig").arch;
|
||||
const sys = @import("syscall.zig");
|
||||
const pmm = @import("../pmm.zig");
|
||||
|
||||
pub fn allocFrame(_: *interrupts.InterruptStackFrame, _: *sys.Arguments, retval: *isize) anyerror!void {
|
||||
const allocator = pmm.lockGlobalAllocator();
|
||||
defer pmm.unlockGlobalAllocator();
|
||||
|
||||
const frame = try pmm.allocFrame(allocator);
|
||||
|
||||
retval.* = @bitCast(frame.address);
|
||||
}
|
||||
|
||||
pub fn freeFrame(_: *interrupts.InterruptStackFrame, args: *sys.Arguments, _: *isize) anyerror!void {
|
||||
const allocator = pmm.lockGlobalAllocator();
|
||||
defer pmm.unlockGlobalAllocator();
|
||||
|
||||
try pmm.freeFrame(allocator, args.arg0);
|
||||
}
|
||||
|
||||
pub fn lockFrame(_: *interrupts.InterruptStackFrame, args: *sys.Arguments, _: *isize) anyerror!void {
|
||||
const allocator = pmm.lockGlobalAllocator();
|
||||
defer pmm.unlockGlobalAllocator();
|
||||
|
||||
try pmm.lockFrame(allocator, args.arg0);
|
||||
}
|
7
core/src/sys/sched.zig
Normal file
7
core/src/sys/sched.zig
Normal file
@ -0,0 +1,7 @@
|
||||
const interrupts = @import("../arch/interrupts.zig").arch;
|
||||
const sys = @import("syscall.zig");
|
||||
const thread = @import("../thread.zig");
|
||||
|
||||
pub fn yield(regs: *interrupts.InterruptStackFrame, _: *sys.Arguments, _: *isize) anyerror!void {
|
||||
thread.scheduleNewTask(regs);
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
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,
|
||||
@ -13,7 +15,7 @@ pub const Arguments = struct {
|
||||
|
||||
const SystemCall = *const fn (frame: *interrupts.InterruptStackFrame, args: *Arguments, retval: *isize) anyerror!void;
|
||||
|
||||
const syscalls = [_]SystemCall{print};
|
||||
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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user