aboutsummaryrefslogtreecommitdiff
path: root/src/lib/syscall.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r--src/lib/syscall.zig34
1 files changed, 14 insertions, 20 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig
index 9eb5199..3c01879 100644
--- a/src/lib/syscall.zig
+++ b/src/lib/syscall.zig
@@ -15,12 +15,6 @@ pub const Error = error{
UnknownSyscall,
};
-fn setUserMemoryAccess(enable: bool) void {
- var sstatus = instructions.sstatus.read();
- sstatus.supervisor_user_memory_access = @bitCast(enable);
- instructions.sstatus.write(sstatus);
-}
-
pub fn handler(proc: *process.Info, trap_frame: *trap.Frame) !void {
switch (trap_frame.general_purpose_registers[17]) {
100000 => uprint(trap_frame),
@@ -54,8 +48,8 @@ fn uprint(trap_frame: *const trap.Frame) void {
// open(path_c: [*:0]const u8, data: usize) Result(usize) // fixme: Kernel panic if null pointer
fn open(proc: *process.Info, trap_frame: *trap.Frame) void {
- setUserMemoryAccess(true);
- defer setUserMemoryAccess(false);
+ paging.setUserMemoryAccess(true);
+ defer paging.setUserMemoryAccess(false);
const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]);
const data = trap_frame.general_purpose_registers[11];
@@ -80,8 +74,8 @@ fn close(proc: *process.Info, trap_frame: *const trap.Frame) void {
// writeFn: ?vfs.Stream.WriteFn,
// ) Result(void)
fn provideStream(proc: *const process.Info, trap_frame: *trap.Frame) void {
- setUserMemoryAccess(true);
- defer setUserMemoryAccess(false);
+ paging.setUserMemoryAccess(true);
+ defer paging.setUserMemoryAccess(false);
const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]);
const readFn: ?vfs.Stream.ReadFn = @ptrFromInt(trap_frame.general_purpose_registers[11]);
@@ -103,8 +97,8 @@ fn provideStream(proc: *const process.Info, trap_frame: *trap.Frame) void {
// closeFn: ?vfs.File.CloseFn,
// ) Result(void)
fn provideFile(proc: *const process.Info, trap_frame: *trap.Frame) void {
- setUserMemoryAccess(true);
- defer setUserMemoryAccess(false);
+ paging.setUserMemoryAccess(true);
+ defer paging.setUserMemoryAccess(false);
const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]);
const openFn: vfs.File.OpenFn = @ptrFromInt(trap_frame.general_purpose_registers[11]);
@@ -127,8 +121,8 @@ fn provideFile(proc: *const process.Info, trap_frame: *trap.Frame) void {
// callback: vfs.Hook.Callback,
// ) Result(void)
fn provideHook(proc: *const process.Info, trap_frame: *trap.Frame) void {
- setUserMemoryAccess(true);
- defer setUserMemoryAccess(false);
+ paging.setUserMemoryAccess(true);
+ defer paging.setUserMemoryAccess(false);
const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]);
const callback: vfs.Hook.Callback = @ptrFromInt(trap_frame.general_purpose_registers[11]);
@@ -157,8 +151,8 @@ fn mkdir(trap_frame: *trap.Frame) void {
// removeFn: vfs.DirHook.RemoveFn,
// ) Result(void)
fn provideDirHook(proc: *const process.Info, trap_frame: *trap.Frame) void {
- setUserMemoryAccess(true);
- defer setUserMemoryAccess(false);
+ paging.setUserMemoryAccess(true);
+ defer paging.setUserMemoryAccess(false);
const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]);
const provideFn: vfs.DirHook.ProvideFn = @ptrFromInt(trap_frame.general_purpose_registers[11]);
@@ -184,8 +178,8 @@ fn remove(trap_frame: *const trap.Frame) void {
// read(handle: usize, buffer: [*]u8, len: usize) Result(usize)
fn read(proc: *process.Info, trap_frame: *trap.Frame) void {
- setUserMemoryAccess(true);
- defer setUserMemoryAccess(false);
+ paging.setUserMemoryAccess(true);
+ defer paging.setUserMemoryAccess(false);
const handle = trap_frame.general_purpose_registers[10];
const buffer: [*]u8 = @ptrFromInt(trap_frame.general_purpose_registers[11]);
@@ -200,8 +194,8 @@ fn read(proc: *process.Info, trap_frame: *trap.Frame) void {
// write(handle: usize, bytes: [*]const u8, len: usize) Result(usize)
fn write(proc: *process.Info, trap_frame: *trap.Frame) void {
- setUserMemoryAccess(true);
- defer setUserMemoryAccess(false);
+ paging.setUserMemoryAccess(true);
+ defer paging.setUserMemoryAccess(false);
const handle = trap_frame.general_purpose_registers[10];
const bytes: [*]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[11]);