aboutsummaryrefslogtreecommitdiff
path: root/src/kernel.zig
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-05-26 12:50:49 +0200
committerHimbeer <himbeer@disroot.org>2024-05-26 12:50:49 +0200
commit906e1937bbe645522e1c59a98dfeca3bccc1bff8 (patch)
tree482b7e344766379fda163bcb5fea629b90a029a0 /src/kernel.zig
parentdaa8c4437cf889431264c924100d695f07e2da5e (diff)
paging: Map PCI(e) controller before using it
Diffstat (limited to 'src/kernel.zig')
-rw-r--r--src/kernel.zig16
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", .{});