diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-25 14:30:10 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-25 14:30:10 +0200 |
| commit | 2bf97dc2927da8f051661d104d52fec41222c670 (patch) | |
| tree | 846c67ac64bf2b1d1375eccfe5b6889093fa1007 | |
| parent | 948453d3d073de207274535376d7274e82f04bc6 (diff) | |
| download | kernel-2bf97dc2927da8f051661d104d52fec41222c670.tar.xz kernel-2bf97dc2927da8f051661d104d52fec41222c670.zip | |
kapi: introduce driver names
| -rw-r--r-- | arch/x86_64/arch/drivers/pit.cpp | 5 | ||||
| -rw-r--r-- | arch/x86_64/arch/drivers/pit.hpp | 2 | ||||
| -rw-r--r-- | kapi/kapi/devices/driver.hpp | 6 | ||||
| -rw-r--r-- | kernel/kapi/devices/driver.tests.cpp | 10 | ||||
| -rw-r--r-- | kernel/kapi/devices/driver_registry.cpp | 12 | ||||
| -rw-r--r-- | kernel/kapi/devices/driver_registry.tests.cpp | 6 | ||||
| -rw-r--r-- | kernel/kernel/drivers/storage/ram_disk.cpp | 5 | ||||
| -rw-r--r-- | kernel/kernel/drivers/storage/ram_disk.hpp | 2 | ||||
| -rw-r--r-- | kernel/kernel/test_support/devices/driver.cpp | 6 | ||||
| -rw-r--r-- | kernel/kernel/test_support/devices/driver.hpp | 3 |
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; }; |
