aboutsummaryrefslogtreecommitdiff
path: root/pk/mtrap.c
diff options
context:
space:
mode:
Diffstat (limited to 'pk/mtrap.c')
-rw-r--r--pk/mtrap.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/pk/mtrap.c b/pk/mtrap.c
index 3406c44..c09a16a 100644
--- a/pk/mtrap.c
+++ b/pk/mtrap.c
@@ -172,9 +172,16 @@ static uintptr_t mcall_send_ipi(uintptr_t recipient)
return 0;
}
+static uintptr_t mcall_shutdown()
+{
+ while (1)
+ write_csr(mtohost, 1);
+ return 0;
+}
+
uintptr_t mcall_trap(uintptr_t mcause, uintptr_t* regs)
{
- uintptr_t n = regs[10], arg0 = regs[11], retval;
+ uintptr_t n = regs[17], arg0 = regs[10], retval;
switch (n)
{
case MCALL_HART_ID:
@@ -192,6 +199,9 @@ uintptr_t mcall_trap(uintptr_t mcause, uintptr_t* regs)
case MCALL_SEND_IPI:
retval = mcall_send_ipi(arg0);
break;
+ case MCALL_SHUTDOWN:
+ retval = mcall_shutdown();
+ break;
default:
retval = -ENOSYS;
break;