aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-08-01 19:37:02 +0200
committerHimbeer <himbeer@disroot.org>2024-08-01 19:37:02 +0200
commitd4726722a90e61e45c73dbcb575d22f2587ad3c6 (patch)
treebd7b465c3d5e4ed865d406025ca69db8d8134e14
parentfd79b936652e63279bc8f622be2d26a400b56faa (diff)
os: Add message passing syscalls (join, leave, pass, receive)
-rw-r--r--src/os.zig20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/os.zig b/src/os.zig
index f7e6ce6..8f5aa38 100644
--- a/src/os.zig
+++ b/src/os.zig
@@ -97,3 +97,23 @@ pub fn devicesByKind(kind: hwinfo.DevKind, devices: []hwinfo.Dev) !usize {
if (result.error_code != 0) return SyscallError.Kernel;
return result.value;
}
+
+pub fn join(channel: usize) !void {
+ const result = ecall(100008, .{channel});
+ if (result.error_code != 0) return SyscallError.Kernel;
+}
+
+pub fn leave(channel: usize) void {
+ _ = ecall(100009, .{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 });
+ if (result.error_code != 0) return SyscallError.Kernel;
+}
+
+pub fn receive(channel: usize, sender: ?*u16, buffer: []u8) !usize {
+ const result = ecall(100011, .{ channel, sender, buffer.ptr, buffer.len });
+ if (result.error_code != 0) return SyscallError.Kernel;
+ return result.value;
+}