summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit/AMD64/HalHardwareAPIC.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Private/HALKit/AMD64/HalHardwareAPIC.cpp')
-rw-r--r--Private/HALKit/AMD64/HalHardwareAPIC.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/Private/HALKit/AMD64/HalHardwareAPIC.cpp b/Private/HALKit/AMD64/HalHardwareAPIC.cpp
new file mode 100644
index 00000000..6d77a8b5
--- /dev/null
+++ b/Private/HALKit/AMD64/HalHardwareAPIC.cpp
@@ -0,0 +1,42 @@
+/*
+ * ========================================================
+ *
+ * HCore
+ * Copyright 2024 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");
+}
+} // namespace HCore