aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/kapi/interrupts.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/arch/x86_64/kapi/interrupts.cpp b/arch/x86_64/kapi/interrupts.cpp
index 85acc0fa..8d863bad 100644
--- a/arch/x86_64/kapi/interrupts.cpp
+++ b/arch/x86_64/kapi/interrupts.cpp
@@ -3,14 +3,27 @@
namespace kapi::interrupts
{
- auto enable() -> void
+ auto enabled() -> bool
{
- asm volatile("sti");
+ auto value = false;
+ asm volatile("pushfq\n"
+ "pop %0\n"
+ "and $0x200, %0"
+ : "=r"(value));
+ return value;
}
- auto disable() -> void
+ auto enabled(bool value) -> void
{
- asm volatile("cli");
+ // NOLINTNEXTLINE(bugprone-branch-clone)
+ if (value)
+ {
+ asm volatile("sti");
+ }
+ else
+ {
+ asm volatile("cli");
+ }
}
-} // namespace kapi::interrupts \ No newline at end of file
+} // namespace kapi::interrupts