aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/kernel.zig16
-rw-r--r--src/lib/instructions.zig1
-rw-r--r--src/lib/interrupts.zig8
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) {