diff options
Diffstat (limited to 'Private/HALKit/AMD64/HalHardwareAPIC.cpp')
| -rw-r--r-- | Private/HALKit/AMD64/HalHardwareAPIC.cpp | 42 |
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 |
