aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/kapi/interrupts.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-09-30 11:43:54 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-09-30 11:43:54 +0200
commitee4096101da245a792cd4df68973585305d09087 (patch)
tree982df6acd03b7a13d24a9eae665d7905376e54b3 /arch/x86_64/kapi/interrupts.cpp
parent5bad38935238da045d9fd467eae9dfd958deea34 (diff)
parenta8f2e1a0edc37cd1c06447c42ff94f3370e8a6bc (diff)
downloadkernel-ee4096101da245a792cd4df68973585305d09087.tar.xz
kernel-ee4096101da245a792cd4df68973585305d09087.zip
Merge branch 'fmorgner/implement-interrupt-locking' into 'develop'
kapi/interrupts: implement irq_lock See merge request teachos/kernel!61
Diffstat (limited to 'arch/x86_64/kapi/interrupts.cpp')
-rw-r--r--arch/x86_64/kapi/interrupts.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/arch/x86_64/kapi/interrupts.cpp b/arch/x86_64/kapi/interrupts.cpp
index 85acc0fa..37745122 100644
--- a/arch/x86_64/kapi/interrupts.cpp
+++ b/arch/x86_64/kapi/interrupts.cpp
@@ -1,16 +1,26 @@
#include <kapi/interrupts.hpp>
+#include <arch/cpu/flags.hpp>
+
namespace kapi::interrupts
{
- auto enable() -> void
+ auto enabled() -> bool
{
- asm volatile("sti");
+ return arch::cpu::check_flags<arch::cpu::flags::interrupt>();
}
- 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