From d78b60f868f40cefe3ac958800ac828f2eafc81c Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Tue, 4 Jun 2024 23:32:33 +0200 Subject: Supervisor trap & claim MSI --- kernel/strap.s | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 kernel/strap.s (limited to 'kernel/strap.s') diff --git a/kernel/strap.s b/kernel/strap.s new file mode 100644 index 0000000..079c579 --- /dev/null +++ b/kernel/strap.s @@ -0,0 +1,81 @@ +.option norvc +.section .text + +.global ktrap + +.set FRAME_SIZE, 4 * 31 + +.global strap +strap: + addi sp, sp, -FRAME_SIZE + + sw x1, (0 * 4)(sp) + sw x2, (1 * 4)(sp) + sw x3, (2 * 4)(sp) + sw x4, (3 * 4)(sp) + sw x5, (4 * 4)(sp) + sw x6, (5 * 4)(sp) + sw x7, (6 * 4)(sp) + sw x8, (7 * 4)(sp) + sw x9, (8 * 4)(sp) + sw x10, (9 * 4)(sp) + sw x11, (10 * 4)(sp) + sw x12, (11 * 4)(sp) + sw x13, (12 * 4)(sp) + sw x14, (13 * 4)(sp) + sw x15, (14 * 4)(sp) + sw x16, (15 * 4)(sp) + sw x17, (16 * 4)(sp) + sw x18, (17 * 4)(sp) + sw x19, (18 * 4)(sp) + sw x20, (19 * 4)(sp) + sw x21, (20 * 4)(sp) + sw x22, (21 * 4)(sp) + sw x23, (22 * 4)(sp) + sw x24, (23 * 4)(sp) + sw x25, (24 * 4)(sp) + sw x26, (25 * 4)(sp) + sw x27, (26 * 4)(sp) + sw x28, (27 * 4)(sp) + sw x29, (28 * 4)(sp) + sw x30, (29 * 4)(sp) + sw x31, (30 * 4)(sp) + + csrr a0, scause + call ktrap + + lw x1, (0 * 4)(sp) + lw x2, (1 * 4)(sp) + lw x3, (2 * 4)(sp) + lw x4, (3 * 4)(sp) + lw x5, (4 * 4)(sp) + lw x6, (5 * 4)(sp) + lw x7, (6 * 4)(sp) + lw x8, (7 * 4)(sp) + lw x9, (8 * 4)(sp) + lw x10, (9 * 4)(sp) + lw x11, (10 * 4)(sp) + lw x12, (11 * 4)(sp) + lw x13, (12 * 4)(sp) + lw x14, (13 * 4)(sp) + lw x15, (14 * 4)(sp) + lw x16, (15 * 4)(sp) + lw x17, (16 * 4)(sp) + lw x18, (17 * 4)(sp) + lw x19, (18 * 4)(sp) + lw x20, (19 * 4)(sp) + lw x21, (20 * 4)(sp) + lw x22, (21 * 4)(sp) + lw x23, (22 * 4)(sp) + lw x24, (23 * 4)(sp) + lw x25, (24 * 4)(sp) + lw x26, (25 * 4)(sp) + lw x27, (26 * 4)(sp) + lw x28, (27 * 4)(sp) + lw x29, (28 * 4)(sp) + lw x30, (29 * 4)(sp) + lw x31, (30 * 4)(sp) + + addi sp, sp, FRAME_SIZE + + sret -- cgit