aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-06 18:43:28 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-06 18:43:28 +0200
commitf50815110789a0f8f6e5ca66ffd49b26578791a9 (patch)
tree992b3c344e69fab4dc56872566bc7323e8892913 /kernel/kapi
parent8d08b3b905d211e989848e1abf3a8ff2535836c8 (diff)
downloadteachos-f50815110789a0f8f6e5ca66ffd49b26578791a9.tar.xz
teachos-f50815110789a0f8f6e5ca66ffd49b26578791a9.zip
kernel: generalize CPU discovery
Diffstat (limited to 'kernel/kapi')
-rw-r--r--kernel/kapi/devices.cpp11
-rw-r--r--kernel/kapi/platform.cpp32
2 files changed, 35 insertions, 8 deletions
diff --git a/kernel/kapi/devices.cpp b/kernel/kapi/devices.cpp
index b2911b0..dad1fe4 100644
--- a/kernel/kapi/devices.cpp
+++ b/kernel/kapi/devices.cpp
@@ -1,6 +1,5 @@
#include "kapi/devices.hpp"
-#include "kapi/acpi.hpp"
#include "kapi/system.hpp"
#include "kernel/devices/cpu.hpp"
@@ -38,13 +37,9 @@ namespace kapi::devices
register_device(bus);
bus.init();
- auto madt = kapi::acpi::get_table("APIC");
- if (madt)
- {
- auto cpu_major = allocate_major_number();
- auto cpu = kstd::make_unique<kernel::devices::cpu>(cpu_major);
- bus.add_child(std::move(cpu));
- }
+ auto cpu_major = allocate_major_number();
+ auto cpu = kstd::make_unique<kernel::devices::cpu>(cpu_major);
+ bus.add_child(std::move(cpu));
}
auto get_root_bus() -> bus &
diff --git a/kernel/kapi/platform.cpp b/kernel/kapi/platform.cpp
new file mode 100644
index 0000000..deb72de
--- /dev/null
+++ b/kernel/kapi/platform.cpp
@@ -0,0 +1,32 @@
+#include "kapi/platform.hpp"
+
+#include "kapi/devices.hpp"
+
+#include "kernel/devices/cpu.hpp"
+
+#include <kstd/memory>
+
+#include <cstdint>
+#include <utility>
+
+namespace kapi::platform
+{
+
+ auto cpu_detected(kapi::devices::bus & bus, std::uint64_t hardware_id, bool is_bsp) -> bool
+ {
+ auto static const core_major = kapi::devices::allocate_major_number();
+ auto static const interrupt_controller_major = kapi::devices::allocate_major_number();
+ auto static core_index = 0uz;
+
+ auto core = kstd::make_unique<kernel::devices::cpu::core>(core_major, core_index, hardware_id, is_bsp);
+ auto lapic = kapi::platform::create_core_interrupt_controller(interrupt_controller_major, core_index, hardware_id);
+
+ core->add_child(std::move(lapic));
+ bus.add_child(std::move(core));
+
+ ++core_index;
+
+ return true;
+ }
+
+} // namespace kapi::platform \ No newline at end of file