diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/kernel.zig | 16 | ||||
-rw-r--r-- | src/lib/instructions.zig | 1 | ||||
-rw-r--r-- | src/lib/interrupts.zig | 8 |
3 files changed, 13 insertions, 12 deletions
diff --git a/src/kernel.zig b/src/kernel.zig index 47d1f05..de18ee1 100644 --- a/src/kernel.zig +++ b/src/kernel.zig @@ -44,6 +44,14 @@ pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, ret_ @setCold(true); + var sstatus = instructions.sstatus.read(); + sstatus.user_interrupt_enable = 0; + sstatus.supervisor_interrupt_enable = 0; + instructions.sstatus.write(sstatus); + + instructions.sie.write(interrupts.Enable.none); + instructions.sip.write(interrupts.Enable.none); + const console = Console.autoChoose() orelse while (true) asm volatile ("wfi"); const w = console.writer(); @@ -53,9 +61,7 @@ pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, ret_ w.print("{s}\r\n", .{msg}) catch while (true) asm volatile ("wfi"); w.print("= !! ========== !! =\r\n", .{}) catch while (true) asm volatile ("wfi"); - while (true) { - asm volatile ("wfi"); - } + while (true) asm volatile ("wfi"); } export fn _start() callconv(.Naked) noreturn { @@ -191,8 +197,4 @@ fn pagedRun() !noreturn { try w.print("Enter process demo\r\n", .{}); try process.demo(allocator); - - while (true) { - asm volatile ("wfi"); - } } diff --git a/src/lib/instructions.zig b/src/lib/instructions.zig index d072113..94c0059 100644 --- a/src/lib/instructions.zig +++ b/src/lib/instructions.zig @@ -86,6 +86,7 @@ pub fn stackPointer() usize { pub const satp = Csr(paging.Satp, "satp"); pub const sstatus = Csr(Sstatus, "sstatus"); pub const sie = Csr(interrupts.Enable, "sie"); +pub const sip = Csr(interrupts.Enable, "sip"); pub const sscratch = Csr(usize, "sscratch"); pub const sepc = Csr(usize, "sepc"); diff --git a/src/lib/interrupts.zig b/src/lib/interrupts.zig index c715816..8c6b930 100644 --- a/src/lib/interrupts.zig +++ b/src/lib/interrupts.zig @@ -43,17 +43,15 @@ pub const Enable = packed struct(usize) { s_external: u1, reserved2: u54, - pub const all = .{ + pub const none = std.mem.zeroInit(Enable, .{}); + pub const all = std.mem.zeroInit(Enable, .{ .u_software = 1, .s_software = 1, - .reserved0 = 0, .u_timer = 1, .s_timer = 1, - .reserved1 = 0, .u_external = 1, .s_external = 1, - .reserved2 = 0, - }; + }); }; pub const Cause = packed struct(usize) { |