aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-07-25 14:30:10 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-07-25 14:30:10 +0200
commit2bf97dc2927da8f051661d104d52fec41222c670 (patch)
tree846c67ac64bf2b1d1375eccfe5b6889093fa1007
parent948453d3d073de207274535376d7274e82f04bc6 (diff)
downloadkernel-2bf97dc2927da8f051661d104d52fec41222c670.tar.xz
kernel-2bf97dc2927da8f051661d104d52fec41222c670.zip
kapi: introduce driver names
-rw-r--r--arch/x86_64/arch/drivers/pit.cpp5
-rw-r--r--arch/x86_64/arch/drivers/pit.hpp2
-rw-r--r--kapi/kapi/devices/driver.hpp6
-rw-r--r--kernel/kapi/devices/driver.tests.cpp10
-rw-r--r--kernel/kapi/devices/driver_registry.cpp12
-rw-r--r--kernel/kapi/devices/driver_registry.tests.cpp6
-rw-r--r--kernel/kernel/drivers/storage/ram_disk.cpp5
-rw-r--r--kernel/kernel/drivers/storage/ram_disk.hpp2
-rw-r--r--kernel/kernel/test_support/devices/driver.cpp6
-rw-r--r--kernel/kernel/test_support/devices/driver.hpp3
10 files changed, 52 insertions, 5 deletions
diff --git a/arch/x86_64/arch/drivers/pit.cpp b/arch/x86_64/arch/drivers/pit.cpp
index 4ca2fef8..ea053319 100644
--- a/arch/x86_64/arch/drivers/pit.cpp
+++ b/arch/x86_64/arch/drivers/pit.cpp
@@ -69,6 +69,11 @@ namespace arch::drivers
return pit_names;
}
+ auto pit::name() const noexcept -> std::string_view
+ {
+ return "Intel 8253/8254 compatible PIT";
+ }
+
auto pit::handle_interrupt(std::uint32_t irq_number, kstd::weak_ptr<void> context) -> kapi::interrupts::status
{
auto data = static_pointer_cast<pit::data>(context.lock());
diff --git a/arch/x86_64/arch/drivers/pit.hpp b/arch/x86_64/arch/drivers/pit.hpp
index 0f5740b3..e99bdf81 100644
--- a/arch/x86_64/arch/drivers/pit.hpp
+++ b/arch/x86_64/arch/drivers/pit.hpp
@@ -29,6 +29,8 @@ namespace arch::drivers
auto handle_interrupt(std::uint32_t irq_number, kstd::weak_ptr<void> context) -> kapi::interrupts::status override;
+ [[nodiscard]] auto name() const noexcept -> std::string_view override;
+
protected:
auto query_interface(kapi::devices::interface_id interface) -> void * override;
diff --git a/kapi/kapi/devices/driver.hpp b/kapi/kapi/devices/driver.hpp
index b8646573..a2c2e396 100644
--- a/kapi/kapi/devices/driver.hpp
+++ b/kapi/kapi/devices/driver.hpp
@@ -9,6 +9,7 @@
#include <cstdint>
#include <optional>
+#include <string_view>
namespace kapi::devices
{
@@ -79,6 +80,11 @@ namespace kapi::devices
//! Drivers that want to claim an auto-populated device node in devfs must override this function.
[[nodiscard]] virtual auto claimed_major() const -> std::optional<std::uint8_t>;
+ //! Get the name of this driver.
+ //!
+ //! @return The static name of this driver.
+ [[nodiscard]] virtual auto name() const noexcept -> std::string_view = 0;
+
protected:
//! Return a pointer to the implementation of the given interface if this driver supports it.
virtual auto query_interface(interface_id interface) -> void *;
diff --git a/kernel/kapi/devices/driver.tests.cpp b/kernel/kapi/devices/driver.tests.cpp
index dcf26336..e65e48e0 100644
--- a/kernel/kapi/devices/driver.tests.cpp
+++ b/kernel/kapi/devices/driver.tests.cpp
@@ -157,6 +157,11 @@ namespace
return names;
}
+ [[nodiscard]] auto name() const noexcept -> std::string_view override
+ {
+ return "Generic BHT Test Controller";
+ }
+
protected:
auto query_interface(kapi::devices::interface_id interface) -> void * override
{
@@ -184,6 +189,11 @@ namespace
return names;
}
+ [[nodiscard]] auto name() const noexcept -> std::string_view override
+ {
+ return "Generic BHT Leaf Device";
+ }
+
protected:
auto query_interface(kapi::devices::interface_id interface) -> void * override
{
diff --git a/kernel/kapi/devices/driver_registry.cpp b/kernel/kapi/devices/driver_registry.cpp
index 2ba9a485..cb101d27 100644
--- a/kernel/kapi/devices/driver_registry.cpp
+++ b/kernel/kapi/devices/driver_registry.cpp
@@ -96,8 +96,8 @@ namespace kapi::devices
}
else if (match.error() != kstd::errc::not_supported)
{
- kstd::println(kstd::print_sink::stderr, "[OS:DRV] match() failed for device {}: {}", device->name(),
- match.error().message());
+ kstd::println(kstd::print_sink::stderr, "[OS:DRV] match() failed for device '{}' and driver '{}': {}",
+ device->name(), driver->name(), match.error().message());
}
}
@@ -112,14 +112,16 @@ namespace kapi::devices
if (probed)
{
device->set_state(state::bound);
- kstd::println("[OS:DRV] Bound device {} (priority {})", device->name(), candidate.priority);
+ kstd::println("[OS:DRV] Bound driver '{}' to device '{}' (priority {})", candidate.driver_handle->name(),
+ device->name(), candidate.priority);
return;
}
device->bind_driver(kstd::weak_ptr<driver>{});
- kstd::println(kstd::print_sink::stderr, "[OS:DRV] probe() failed for device {} (priority {}): {}", device->name(),
- candidate.priority, probed.error().message());
+ kstd::println(kstd::print_sink::stderr,
+ "[OS:DRV] probe() failed for device '{}' and driver '{}' (priority {}): {}", device->name(),
+ candidate.driver_handle->name(), candidate.priority, probed.error().message());
}
if (!candidates.empty())
diff --git a/kernel/kapi/devices/driver_registry.tests.cpp b/kernel/kapi/devices/driver_registry.tests.cpp
index e51b706e..d4d8a174 100644
--- a/kernel/kapi/devices/driver_registry.tests.cpp
+++ b/kernel/kapi/devices/driver_registry.tests.cpp
@@ -8,6 +8,7 @@
#include <catch2/catch_test_macros.hpp>
#include <cstdint>
+#include <string_view>
namespace
{
@@ -97,6 +98,11 @@ namespace
return m_probe_succeeds;
}
+ auto name() const noexcept -> std::string_view override
+ {
+ return "Driver Registry Test Device";
+ }
+
mutable unsigned probe_calls;
protected:
diff --git a/kernel/kernel/drivers/storage/ram_disk.cpp b/kernel/kernel/drivers/storage/ram_disk.cpp
index 52aedc82..97a6443b 100644
--- a/kernel/kernel/drivers/storage/ram_disk.cpp
+++ b/kernel/kernel/drivers/storage/ram_disk.cpp
@@ -146,6 +146,11 @@ namespace kernel::drivers::storage
return kernel::filesystem::block_major_numbers::ram_disk;
}
+ auto ram_disk::name() const noexcept -> std::string_view
+ {
+ return "Generic RAM Disk";
+ }
+
auto ram_disk::query_interface(kapi::devices::interface_id interface) -> void *
{
if (interface == kapi::boot_modules::boot_module_claim::id)
diff --git a/kernel/kernel/drivers/storage/ram_disk.hpp b/kernel/kernel/drivers/storage/ram_disk.hpp
index ac8d2879..2805466f 100644
--- a/kernel/kernel/drivers/storage/ram_disk.hpp
+++ b/kernel/kernel/drivers/storage/ram_disk.hpp
@@ -24,6 +24,8 @@ namespace kernel::drivers::storage
[[nodiscard]] auto claimed_major() const -> std::optional<std::uint8_t> override;
+ [[nodiscard]] auto name() const noexcept -> std::string_view override;
+
protected:
auto query_interface(kapi::devices::interface_id interface) -> void * override;
};
diff --git a/kernel/kernel/test_support/devices/driver.cpp b/kernel/kernel/test_support/devices/driver.cpp
index 878c199f..45166f26 100644
--- a/kernel/kernel/test_support/devices/driver.cpp
+++ b/kernel/kernel/test_support/devices/driver.cpp
@@ -7,6 +7,7 @@
#include <cstdint>
#include <optional>
+#include <string_view>
namespace kernel::tests::devices
{
@@ -27,6 +28,11 @@ namespace kernel::tests::devices
return m_major;
}
+ auto driver::name() const noexcept -> std::string_view
+ {
+ return "Generic BHT Test Device";
+ }
+
auto bind(kapi::devices::device & device, std::optional<std::uint8_t> major)
-> kstd::shared_ptr<kapi::devices::driver>
{
diff --git a/kernel/kernel/test_support/devices/driver.hpp b/kernel/kernel/test_support/devices/driver.hpp
index d95708e2..f63fd0cd 100644
--- a/kernel/kernel/test_support/devices/driver.hpp
+++ b/kernel/kernel/test_support/devices/driver.hpp
@@ -8,6 +8,7 @@
#include <cstdint>
#include <optional>
+#include <string_view>
namespace kernel::tests::devices
{
@@ -21,6 +22,8 @@ namespace kernel::tests::devices
[[nodiscard]] auto claimed_major() const -> std::optional<std::uint8_t> override;
+ [[nodiscard]] auto name() const noexcept -> std::string_view override;
+
private:
std::optional<std::uint8_t> m_major;
};