aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/os.zig19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/os.zig b/src/os.zig
index 0543b79..a41b812 100644
--- a/src/os.zig
+++ b/src/os.zig
@@ -99,22 +99,33 @@ pub fn devicesByKind(kind: hwinfo.DevKind, devices: []hwinfo.Dev) !usize {
return result.value;
}
+pub fn unlock(reg_addr: usize, writable: bool) !usize {
+ const result = ecall(100008, .{ reg_addr, writable });
+ if (result.error_code != 0) return SyscallError.Kernel;
+ return result.value;
+}
+
+pub fn lock(vaddr: usize) !void {
+ const result = ecall(100009, .{vaddr});
+ if (result.error_code != 0) return SyscallError.Kernel;
+}
+
pub fn join(channel: usize) !void {
- const result = ecall(100008, .{channel});
+ const result = ecall(100010, .{channel});
if (result.error_code != 0) return SyscallError.Kernel;
}
pub fn leave(channel: usize) void {
- _ = ecall(100009, .{channel});
+ _ = ecall(100011, .{channel});
}
pub fn pass(channel: usize, receiver: u16, identify: bool, bytes: []const u8) !void {
- const result = ecall(100010, .{ channel, receiver, identify, bytes.ptr, bytes.len });
+ const result = ecall(100012, .{ channel, receiver, identify, bytes.ptr, bytes.len });
if (result.error_code != 0) return SyscallError.Kernel;
}
pub fn receive(channel: usize, sender: ?*u16, buffer: []u8) !usize {
- const result = ecall(100011, .{ channel, @intFromPtr(sender), buffer.ptr, buffer.len });
+ const result = ecall(100013, .{ channel, @intFromPtr(sender), buffer.ptr, buffer.len });
if (result.error_code != 0) return SyscallError.Kernel;
return result.value;
}