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 std = @import("std");
|
||||||
const interrupts = @import("../arch/interrupts.zig").arch;
|
const interrupts = @import("../arch/interrupts.zig").arch;
|
||||||
const print = @import("print.zig").print;
|
const print = @import("print.zig").print;
|
||||||
|
const mem = @import("mem.zig");
|
||||||
|
const sched = @import("sched.zig");
|
||||||
|
|
||||||
pub const Arguments = struct {
|
pub const Arguments = struct {
|
||||||
arg0: usize,
|
arg0: usize,
|
||||||
@ -13,7 +15,7 @@ pub const Arguments = struct {
|
|||||||
|
|
||||||
const SystemCall = *const fn (frame: *interrupts.InterruptStackFrame, args: *Arguments, retval: *isize) anyerror!void;
|
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 {
|
pub fn invokeSyscall(number: usize, frame: *interrupts.InterruptStackFrame, args: *Arguments, retval: *isize) void {
|
||||||
if (number >= syscalls.len) {
|
if (number >= syscalls.len) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user