From f06d29ca9da724866ae99ee2225d53f382d32bcd Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Wed, 25 Nov 2020 12:23:11 -0700 Subject: Add priv.h/c to allow switching to user mode. Change some things with the MPU in main() to actually work. --- src/kern/priv.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/kern/priv.c (limited to 'src/kern/priv.c') diff --git a/src/kern/priv.c b/src/kern/priv.c new file mode 100644 index 0000000..9d64005 --- /dev/null +++ b/src/kern/priv.c @@ -0,0 +1,24 @@ +#include "kern/priv.h" + +void set_control_register(uint32_t reg) +{ + asm volatile("msr control, %0" : "=r"(reg) :); +} + +uint32_t get_control_register() +{ + uint32_t control; + asm volatile("mrs %0, control" : "=r"(control) :); + return control; +} + +void enter_user_mode() +{ + asm volatile ( + "mov r0, #1\n\t" + "msr control, r0\n\t" + ); + + // uint32_t creg = get_control_register(); + // set_control_register(creg | 1); +} -- cgit