You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
riscv-pke/kernel/machine/mtrap_vector.S

42 lines
951 B

#include "util/load_store.S"
#
# M-mode trap entry point
#
.globl mtrapvec
.align 4
mtrapvec:
# mscratch -> g_itrframe (cf. kernel/machine/minit.c line 94)
# swap a0 and mscratch, so that a0 points to interrupt frame,
# i.e., [a0] = &g_itrframe
csrrw a0, mscratch, a0
# save the registers in g_itrframe
addi t6, a0, 0
store_all_registers
# save the original content of a0 in g_itrframe
csrr t0, mscratch
sd t0, 72(a0)
# switch stack (to use stack0) for the rest of machine mode
# trap handling.
la sp, stack0
li a3, 4096
csrr a4, mhartid
addi a4, a4, 1
mul a3, a3, a4
add sp, sp, a3
# pointing mscratch back to g_itrframe
csrw mscratch, a0
# call machine mode trap handling function
call handle_mtrap
# restore all registers, come back to the status before entering
# machine mode handling.
csrr t6, mscratch
restore_all_registers
mret