summaryrefslogtreecommitdiffhomepage
path: root/HALKit/AMD64/HardwareAPIC.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'HALKit/AMD64/HardwareAPIC.cpp')
-rw-r--r--HALKit/AMD64/HardwareAPIC.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/HALKit/AMD64/HardwareAPIC.cpp b/HALKit/AMD64/HardwareAPIC.cpp
new file mode 100644
index 00000000..9c6f61fb
--- /dev/null
+++ b/HALKit/AMD64/HardwareAPIC.cpp
@@ -0,0 +1,46 @@
+/*
+ * ========================================================
+ *
+ * hCore
+ * Copyright Mahrouss Logic, all rights reserved.
+ *
+ * ========================================================
+ */
+
+#include <ArchKit/Arch.hpp>
+
+// bugs = 0
+
+namespace hCore
+{
+ // @brief wakes up thread.
+ // wakes up thread from hang.
+ void rt_wakeup_thread(HAL::StackFrame* stack)
+ {
+ __asm__ volatile ("cli");
+
+ stack->Rbp = stack->R15;
+ stack->Rsi = stack->Rbp;
+
+ __asm__ volatile ("sti");
+ }
+
+ static void __rt_hang_proc(void)
+ {
+ while (1)
+ ;
+ }
+
+ // @brief makes thread sleep.
+ // hooks and hangs thread to prevent code from executing.
+ void rt_hang_thread(HAL::StackFrame* stack)
+ {
+ __asm__ volatile ("cli");
+
+ stack->R15 = stack->Rbp;
+ stack->Rbp = (HAL::Reg)&__rt_hang_proc;
+ stack->Rsp = stack->Rbp;
+
+ __asm__ volatile ("sti");
+ }
+} \ No newline at end of file