aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-03-24 17:44:21 +0100
committerFelix Morgner <felix.morgner@ost.ch>2026-03-27 07:02:35 +0100
commit42895684b631380c8aca94f82209297ac0c0e5f2 (patch)
treeefac91c2f9431ed66c7616da906dd93859127c1f
parent3888a111be2e6b2a53b10752de36d58f18fc8874 (diff)
downloadteachos-42895684b631380c8aca94f82209297ac0c0e5f2.tar.xz
teachos-42895684b631380c8aca94f82209297ac0c0e5f2.zip
kapi: extract interrupt enablement
-rw-r--r--arch/x86_64/include/arch/cpu/interrupts.hpp3
-rw-r--r--arch/x86_64/kapi/cpu.cpp12
-rw-r--r--arch/x86_64/src/cpu/interrupts.cpp10
-rw-r--r--kapi/include/kapi/cpu.hpp3
-rw-r--r--kapi/include/kapi/cpu/interrupts.hpp19
-rw-r--r--kernel/src/main.cpp1
6 files changed, 32 insertions, 16 deletions
diff --git a/arch/x86_64/include/arch/cpu/interrupts.hpp b/arch/x86_64/include/arch/cpu/interrupts.hpp
index 08ecd9c..b9adb6e 100644
--- a/arch/x86_64/include/arch/cpu/interrupts.hpp
+++ b/arch/x86_64/include/arch/cpu/interrupts.hpp
@@ -111,9 +111,6 @@ namespace arch::cpu
auto static read() -> interrupt_descriptor_table_register;
};
- auto enable_interrupts() -> void;
- auto disable_interrupts() -> void;
-
} // namespace arch::cpu
#endif \ No newline at end of file
diff --git a/arch/x86_64/kapi/cpu.cpp b/arch/x86_64/kapi/cpu.cpp
index 693d328..8ca3847 100644
--- a/arch/x86_64/kapi/cpu.cpp
+++ b/arch/x86_64/kapi/cpu.cpp
@@ -3,7 +3,6 @@
#include "kapi/system.hpp"
#include "arch/cpu/initialization.hpp"
-#include "arch/cpu/interrupts.hpp"
#include <atomic>
@@ -21,7 +20,6 @@ namespace kapi::cpu
arch::cpu::initialize_descriptors();
arch::cpu::initialize_legacy_interrupts();
- arch::cpu::enable_interrupts();
}
auto halt() -> void
@@ -30,4 +28,14 @@ namespace kapi::cpu
__builtin_unreachable();
}
+ auto enable_interrupts() -> void
+ {
+ asm volatile("sti");
+ }
+
+ auto disable_interrupts() -> void
+ {
+ asm volatile("cli");
+ }
+
} // namespace kapi::cpu
diff --git a/arch/x86_64/src/cpu/interrupts.cpp b/arch/x86_64/src/cpu/interrupts.cpp
index 6f66bbd..dc236e6 100644
--- a/arch/x86_64/src/cpu/interrupts.cpp
+++ b/arch/x86_64/src/cpu/interrupts.cpp
@@ -168,14 +168,4 @@ namespace arch::cpu
return idtr;
}
- auto enable_interrupts() -> void
- {
- asm volatile("sti");
- }
-
- auto disable_interrupts() -> void
- {
- asm volatile("cli");
- }
-
} // namespace arch::cpu \ No newline at end of file
diff --git a/kapi/include/kapi/cpu.hpp b/kapi/include/kapi/cpu.hpp
index 1dd7cfe..ade954c 100644
--- a/kapi/include/kapi/cpu.hpp
+++ b/kapi/include/kapi/cpu.hpp
@@ -1,7 +1,8 @@
#ifndef TEACHOS_KAPI_CPU_HPP
#define TEACHOS_KAPI_CPU_HPP
-#include "kapi/cpu/exception.hpp"
+#include "kapi/cpu/exception.hpp" // IWYU pragma: export
+#include "kapi/cpu/interrupts.hpp" // IWYU pragma: export
namespace kapi::cpu
{
diff --git a/kapi/include/kapi/cpu/interrupts.hpp b/kapi/include/kapi/cpu/interrupts.hpp
new file mode 100644
index 0000000..26a215e
--- /dev/null
+++ b/kapi/include/kapi/cpu/interrupts.hpp
@@ -0,0 +1,19 @@
+#ifndef TEACHOS_KAPI_CPU_INTERRUPTS_HPP
+#define TEACHOS_KAPI_CPU_INTERRUPTS_HPP
+
+// IWYU pragma: private, include "kapi/cpu.hpp"
+
+namespace kapi::cpu
+{
+
+ //! @qualifier platform-defined
+ //! Enable external interrupts.
+ auto enable_interrupts() -> void;
+
+ //! @qualifier platform-defined
+ //! Disable external interrupts.
+ auto disable_interrupts() -> void;
+
+} // namespace kapi::cpu
+
+#endif \ No newline at end of file
diff --git a/kernel/src/main.cpp b/kernel/src/main.cpp
index 0416ee9..6bd168c 100644
--- a/kernel/src/main.cpp
+++ b/kernel/src/main.cpp
@@ -94,6 +94,7 @@ auto main() -> int
kapi::cpu::init();
kernel::cpu::init();
+ kapi::cpu::enable_interrupts();
kapi::memory::init();
kernel::memory::init_heap(kapi::memory::heap_base);