astryon/system/init/boot.zig

26 lines
671 B
Zig

const system = @import("system");
const vm = system.vm;
const syscalls = system.syscalls;
const buffer = system.ring_buffer;
pub fn setupKernelRingBuffer(base: u64) !void {
const phys = vm.PhysFrame{ .address = try syscalls.allocFrame() };
const data: [*]u8 = @ptrCast(phys.virtualPointer(u8, base));
try syscalls.setEventQueue(syscalls.getThreadId(), phys.address);
const event_queue = buffer.RingBuffer.init(data, vm.PAGE_SIZE, true);
system.ipc.setKernelBuffer(event_queue);
}
pub fn discoverThreadLimit() u64 {
var pid: u64 = 1;
while (true) {
_ = syscalls.getPriority(pid) catch return (pid - 1);
pid += 1;
}
}