diff options
Diffstat (limited to 'src/kern/priv.c')
-rw-r--r-- | src/kern/priv.c | 24 |
1 files changed, 24 insertions, 0 deletions
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); +} |