diff options
author | Himbeer <himbeer@disroot.org> | 2024-05-26 12:50:49 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-05-26 12:50:49 +0200 |
commit | 906e1937bbe645522e1c59a98dfeca3bccc1bff8 (patch) | |
tree | 482b7e344766379fda163bcb5fea629b90a029a0 /src/kernel.zig | |
parent | daa8c4437cf889431264c924100d695f07e2da5e (diff) |
paging: Map PCI(e) controller before using it
Diffstat (limited to 'src/kernel.zig')
-rw-r--r-- | src/kernel.zig | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/kernel.zig b/src/kernel.zig index 3f71c01..e84361c 100644 --- a/src/kernel.zig +++ b/src/kernel.zig @@ -92,7 +92,7 @@ fn run(hart_id: usize) !noreturn { try kmem.mapKernel(); - instructions.setSatp(kmem.satp(0)); + instructions.satp.write(kmem.satp(0)); asm volatile ( \\ la sp, _stack_end @@ -129,10 +129,11 @@ fn pagedRun() !noreturn { try w.print("Hart : {d}\r\n", .{hart_data.hart_id}); + const kmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12); try w.print("Paging : Sv39\r\n", .{}); interrupts.init(); - interrupts.setEnabled(interrupts.Enable.all); + instructions.sie.write(interrupts.Enable.all); try w.print("Interrupts : All\r\n", .{}); try w.print("\r\n", .{}); @@ -167,9 +168,7 @@ fn pagedRun() !noreturn { try w.print("\r\n", .{}); - if (pci.controllerFromHwInfo()) |pci_controller| { - try w.print("\r\n", .{}); - + if (pci.controllerFromHwInfo(kmem)) |pci_controller| { for (0..256) |bus| { for (0..32) |device| { const cfg_space = pci_controller.cfgSpace(@intCast(bus), @intCast(device), 0); @@ -185,8 +184,11 @@ fn pagedRun() !noreturn { } try w.print("\r\n", .{}); - } else { - try w.print("PCI not present\r\n", .{}); + } else |err| { + switch (err) { + error.NoPciController => try w.print("PCI not present\r\n", .{}), + else => return err, + } } try w.print("Enter process demo\r\n", .{}); |