aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-07-31 14:44:14 +0200
committerHimbeer <himbeer@disroot.org>2024-07-31 14:44:14 +0200
commit846736deea196786386cf1c0ac9a54c667102386 (patch)
treed7a313813efdc3d83ff05fb3e5645e042ee77314
parent15a7f9f2ff67f79ee334c88259ce20fcd69b4e2d (diff)
root: Add devicesByKind syscall
-rw-r--r--src/hwinfo.zig27
-rw-r--r--src/root.zig7
2 files changed, 34 insertions, 0 deletions
diff --git a/src/hwinfo.zig b/src/hwinfo.zig
new file mode 100644
index 0000000..0a6909e
--- /dev/null
+++ b/src/hwinfo.zig
@@ -0,0 +1,27 @@
+// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org>
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+pub const DevKind = enum(u32) {
+ cpus,
+ plic,
+ pcie,
+ pci,
+ _,
+};
+
+pub const Dev = extern struct {
+ kind: DevKind,
+ reg: Reg,
+ value: u64,
+};
+
+pub const Reg = extern struct {
+ addr: u64,
+ len: u64,
+
+ pub fn slice(self: Reg, comptime T: type) []volatile T {
+ const ptr: [*]volatile T = @ptrFromInt(self.addr);
+ return ptr[0 .. self.len / @sizeOf(T)];
+ }
+};
diff --git a/src/root.zig b/src/root.zig
index 43be54b..a8cc12c 100644
--- a/src/root.zig
+++ b/src/root.zig
@@ -3,6 +3,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
const std = @import("std");
+pub const hwinfo = @import("hwinfo.zig");
pub const max_args = 6;
@@ -85,3 +86,9 @@ pub fn rawUserinit() []const u8 {
const result = ecall(100007, .{&ptr});
return ptr[0..result.value];
}
+
+pub fn devicesByKind(kind: hwinfo.DevKind, devices: []hwinfo.Dev) !usize {
+ const result = ecall(100008, .{ kind, devices.ptr, devices.len });
+ if (result.error_code != 0) return SyscallError.Kernel;
+ return result.value;
+}