summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit/AMD64/HalHardwareAPIC.cpp
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-31 09:42:54 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-31 09:42:54 +0100
commitfc55f0d69d24fb4908cbd811681f2c3fac53614d (patch)
treeba09a2cdbb225df7ba1a9ec5a12bcbb90b673ead /Private/HALKit/AMD64/HalHardwareAPIC.cpp
parent7bed9287589293bd9d712d152539591dee0b28c0 (diff)
kernel: add GKit, improve AMD64 HAL.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
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