aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-06-13 18:46:39 +0200
committerHimbeer <himbeer@disroot.org>2024-06-13 18:46:39 +0200
commitaea99ef7bb5b03f6bcf638d50c65922f151b305b (patch)
treea0f3effc682723b8837b5767971c3768071ca1c3 /src/lib
parent614c524f5042edbb91edfa4cc97709b3d05eeb88 (diff)
interrupts: Refactor sstatus retrieval
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/interrupts.zig29
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
\\