diff options
author | Himbeer <himbeer@disroot.org> | 2024-06-30 18:57:43 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-06-30 18:57:43 +0200 |
commit | 8f9e790c9d4d336a8c6ec405f395f6f8f3de1012 (patch) | |
tree | f9cf7002d0cd0d103dc141b86eae0e7bf0d65d32 /src/lib | |
parent | 741349424774d6128f4da0f9bff85203200415c3 (diff) |
syscall: Add stubs for VFS interaction
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/syscall.zig | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index 642d0c4..0e0c1f1 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -10,13 +10,32 @@ pub const Error = error{ UnknownSyscall, }; +pub const Status = enum(usize) { + success, +}; + +pub const ReadFn = *const fn (context: u16, buffer: []u8) Result(usize); +pub const WriteFn = *const fn (context: u16, bytes: []const u8) Result(usize); + +pub fn Result(comptime T: type) type { + return struct { + status: Status, + value: T, + }; +} + pub fn handle(trap_frame: *const trap.Frame) !void { switch (trap_frame.general_purpose_registers[17]) { 100000 => uprint(trap_frame), + 100001 => open(trap_frame), + 100002 => close(trap_frame), + 100003 => provide(trap_frame), + 100004 => remove(trap_frame), else => return Error.UnknownSyscall, } } +// uprint(str_addr: usize, len: usize) void fn uprint(trap_frame: *const trap.Frame) void { const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12); @@ -28,3 +47,43 @@ fn uprint(trap_frame: *const trap.Frame) void { const w = @import("Console.zig").autoChoose().?.writer(); w.print("User message: {s}\r\n", .{str}) catch unreachable; } + +// open(path: *const [:0]u8) Result(usize) +fn open(trap_frame: *const trap.Frame) void { + const path: *const [:0]u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); + + _ = path; + unreachable; +} + +// close(rd: usize) void +fn close(trap_frame: *const trap.Frame) void { + const rd = trap_frame.general_purpose_registers[10]; + + _ = rd; + unreachable; +} + +// provide( +// path: *const [:0]u8, +// readFn: fn (context: u16, buffer: []u8) Result(usize), +// writeFn: fn (context: u16, bytes: []const u8) Result(usize) +// ) Result(usize) +fn provide(trap_frame: *const trap.Frame) void { + const path: *const [:0]u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); + const readFn: ReadFn = @ptrFromInt(trap_frame.general_purpose_registers[11]); + const writeFn: WriteFn = @ptrFromInt(trap_frame.general_purpose_registers[12]); + + _ = path; + _ = readFn; + _ = writeFn; + unreachable; +} + +// remove(path: *const [:0]u8) Result(usize) +fn remove(trap_frame: *const trap.Frame) void { + const path: *const [:0]u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); + + _ = path; + unreachable; +} |