diff options
author | Himbeer <himbeer@disroot.org> | 2024-06-13 18:46:39 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-06-13 18:46:39 +0200 |
commit | aea99ef7bb5b03f6bcf638d50c65922f151b305b (patch) | |
tree | a0f3effc682723b8837b5767971c3768071ca1c3 /src/lib | |
parent | 614c524f5042edbb91edfa4cc97709b3d05eeb88 (diff) |
interrupts: Refactor sstatus retrieval
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/interrupts.zig | 29 |
1 files changed, 3 insertions, 26 deletions
diff --git a/src/lib/interrupts.zig b/src/lib/interrupts.zig index 1d98b06..3aec2ac 100644 --- a/src/lib/interrupts.zig +++ b/src/lib/interrupts.zig @@ -88,33 +88,11 @@ pub const SyncCause = enum(u63) { _, }; -pub const Sstatus = packed struct(usize) { - u_interrupts: u1, - s_interrupts: u1, - reserved0: u2, - u_interrupts_previous: u1, - s_interrupts_previous: u1, - reserved1: u2, - previous_privilege: u1, - reserved2: u4, - fs: u2, - xs: u2, - reserved3: u1, - sum: u1, - mxr: u1, - reserved4: u12, - u_xlen: u2, - reserved5: u29, - sd: u1, -}; - -export fn handleTrap(epc: usize, tval: usize, cause_bits: usize, status: Sstatus, frame: *trap.Frame) usize { - _ = &status; - _ = &frame; - +export fn handleTrap(epc: usize, tval: usize, cause_bits: usize, frame: *trap.Frame) usize { const console = Console.autoChoose().?; const w = console.writer(); + const status = instructions.sstatus.read(); const cause: Cause = @bitCast(cause_bits); if (cause.isAsync()) { @@ -247,8 +225,7 @@ export fn supervisorTrapVector() align(4) callconv(.Naked) noreturn { \\ csrr a0, sepc \\ csrr a1, stval \\ csrr a2, scause - \\ csrr a3, sstatus - \\ mv a4, t5 + \\ mv a3, t5 \\ la sp, _stvec_stack_end \\ call handleTrap \\ |