aboutsummaryrefslogtreecommitdiff
path: root/src/kern/priv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kern/priv.c')
-rw-r--r--src/kern/priv.c24
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);
+}