summaryrefslogtreecommitdiff
path: root/kernel/strap.s
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2024-06-04 23:32:33 +0200
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2024-06-04 23:32:33 +0200
commitd78b60f868f40cefe3ac958800ac828f2eafc81c (patch)
tree29309397c2e77f2598a1f282bfc9d4436d697263 /kernel/strap.s
parentf95c522b0ae30dd3c4d9c4449de98d3b5c6e9a65 (diff)
Supervisor trap & claim MSIHEADmain
Diffstat (limited to 'kernel/strap.s')
-rw-r--r--kernel/strap.s81
1 files changed, 81 insertions, 0 deletions
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