aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kapi')
-rw-r--r--kernel/kapi/boot_modules/device.cpp5
-rw-r--r--kernel/kapi/devices/bus.cpp6
-rw-r--r--kernel/kapi/devices/device.cpp10
-rw-r--r--kernel/kapi/devices/driver.cpp3
-rw-r--r--kernel/kapi/devices/driver.tests.cpp29
-rw-r--r--kernel/kapi/devices/driver_registry.tests.cpp12
-rw-r--r--kernel/kapi/devices/facet_registry.cpp6
-rw-r--r--kernel/kapi/devices/facet_registry.tests.cpp10
8 files changed, 42 insertions, 39 deletions
diff --git a/kernel/kapi/boot_modules/device.cpp b/kernel/kapi/boot_modules/device.cpp
index dac24906..4bfce5f1 100644
--- a/kernel/kapi/boot_modules/device.cpp
+++ b/kernel/kapi/boot_modules/device.cpp
@@ -5,6 +5,7 @@
#include <kapi/devices.hpp>
#include <kstd/format.hpp>
+#include <kstd/memory.hpp>
#include <cstddef>
#include <string_view>
@@ -27,11 +28,11 @@ namespace kapi::boot_modules
return m_module;
}
- auto device::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto device::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == boot_module_signature::id)
{
- return static_cast<boot_module_signature *>(this);
+ return kstd::make_observer<boot_module_signature>(this);
}
return kapi::devices::device::query_facet(facet);
diff --git a/kernel/kapi/devices/bus.cpp b/kernel/kapi/devices/bus.cpp
index 300151d5..d956c3b8 100644
--- a/kernel/kapi/devices/bus.cpp
+++ b/kernel/kapi/devices/bus.cpp
@@ -84,15 +84,15 @@ namespace kapi::devices
return m_devices;
}
- auto bus::query_facet(kapi::capabilities::facet_id facet) -> void *
+ auto bus::query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void>
{
if (facet == bus::id)
{
- return this;
+ return kstd::observer_ptr(this);
}
else if (facet == bus_protocol::id)
{
- return m_protocol;
+ return kstd::observer_ptr{m_protocol};
}
return device::query_facet(facet);
diff --git a/kernel/kapi/devices/device.cpp b/kernel/kapi/devices/device.cpp
index 2576e20a..3a3b7cc1 100644
--- a/kernel/kapi/devices/device.cpp
+++ b/kernel/kapi/devices/device.cpp
@@ -23,12 +23,12 @@ namespace kapi::devices
: m_name(name)
{}
- auto device::facet(kapi::capabilities::facet_id facet) noexcept -> void *
+ auto device::facet(kapi::capabilities::facet_id facet) noexcept -> kstd::observer_ptr<void>
{
return query_facet(facet);
}
- auto device::facet(kapi::capabilities::facet_id facet) const noexcept -> void const *
+ auto device::facet(kapi::capabilities::facet_id facet) const noexcept -> kstd::observer_ptr<void const>
{
return const_cast<device *>(this)->query_facet(facet);
}
@@ -61,10 +61,10 @@ namespace kapi::devices
m_state = state;
}
- auto device::bound_driver() const noexcept -> driver *
+ auto device::bound_driver() const noexcept -> kstd::shared_ptr<driver>
{
auto guard = kstd::lock_guard{m_lock};
- return m_driver.lock().get();
+ return m_driver.lock();
}
auto device::bind_driver(kstd::weak_ptr<struct driver> driver) -> void
@@ -114,7 +114,7 @@ namespace kapi::devices
m_resources = std::move(resources);
}
- auto device::query_facet(kapi::capabilities::facet_id) -> void *
+ auto device::query_facet(kapi::capabilities::facet_id) -> kstd::observer_ptr<void>
{
return nullptr;
}
diff --git a/kernel/kapi/devices/driver.cpp b/kernel/kapi/devices/driver.cpp
index 5ca92dc8..0f103cbc 100644
--- a/kernel/kapi/devices/driver.cpp
+++ b/kernel/kapi/devices/driver.cpp
@@ -1,6 +1,7 @@
#include <kapi/capabilities/facet_id.hpp>
#include <kapi/devices.hpp>
+#include <kstd/memory.hpp>
#include <kstd/result.hpp>
#include <cstdint>
@@ -29,7 +30,7 @@ namespace kapi::devices
return kstd::success();
}
- auto driver::query_facet(kapi::capabilities::facet_id) -> void *
+ auto driver::query_facet(kapi::capabilities::facet_id) -> kstd::observer_ptr<void>
{
return nullptr;
}
diff --git a/kernel/kapi/devices/driver.tests.cpp b/kernel/kapi/devices/driver.tests.cpp
index ee3fe577..38d07ed9 100644
--- a/kernel/kapi/devices/driver.tests.cpp
+++ b/kernel/kapi/devices/driver.tests.cpp
@@ -36,8 +36,8 @@ namespace
[[nodiscard]] auto match(kapi::devices::device const & dev, kapi::devices::driver const & drv) const
-> kstd::result<std::uint32_t> override
{
- auto const * signature = dev.facet<controller_signature>();
- auto const * claim = drv.facet<controller_claim>();
+ auto const signature = dev.facet<controller_signature>();
+ auto const claim = drv.facet<controller_claim>();
if (!signature || !claim || !std::ranges::contains(claim->supported_names(), signature->controller_name()))
{
return kstd::failure(kapi::devices::driver_match_errc::no_match);
@@ -65,11 +65,11 @@ namespace
}
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == controller_signature::id)
{
- return static_cast<controller_signature *>(this);
+ return kstd::make_observer<controller_signature>(this);
}
return kapi::devices::bus::query_facet(facet);
}
@@ -101,11 +101,11 @@ namespace
}
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == leaf_signature::id)
{
- return static_cast<leaf_signature *>(this);
+ return kstd::make_observer<leaf_signature>(this);
}
return kapi::devices::device::query_facet(facet);
}
@@ -123,9 +123,9 @@ namespace
[[nodiscard]] auto match(kapi::devices::device const & dev, kapi::devices::driver const & drv) const
-> kstd::result<std::uint32_t> override
{
- auto const * ident = dev.facet<leaf_signature>();
- auto const * claims = drv.facet<leaf_claim>();
- if (!ident || !claims || !std::ranges::contains(claims->supported_names(), ident->leaf_name()))
+ auto const signature = dev.facet<leaf_signature>();
+ auto const claims = drv.facet<leaf_claim>();
+ if (!signature || !claims || !std::ranges::contains(claims->supported_names(), signature->leaf_name()))
{
return kstd::failure(kapi::devices::driver_match_errc::no_match);
}
@@ -166,11 +166,11 @@ namespace
}
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == controller_claim::id)
{
- return static_cast<controller_claim *>(this);
+ return kstd::make_observer<controller_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
@@ -198,11 +198,11 @@ namespace
}
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == leaf_claim::id)
{
- return static_cast<leaf_claim *>(this);
+ return kstd::make_observer<leaf_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
@@ -213,7 +213,8 @@ namespace
SCENARIO("a bound controller driver can attach a further, independently-typed bus protocol of its own",
"[devices][driver][stacking]")
{
- GIVEN("a controller bus, a controller driver, and a leaf driver, none aware of each other's identification scheme")
+ GIVEN(
+ "a controller bus, a controller driver, and a leaf driver, none aware of each other's signatureification scheme")
{
auto outer_bus = kstd::make_shared<controller_bus>("stacking_test_controller_bus");
diff --git a/kernel/kapi/devices/driver_registry.tests.cpp b/kernel/kapi/devices/driver_registry.tests.cpp
index 02f5065f..7b08799c 100644
--- a/kernel/kapi/devices/driver_registry.tests.cpp
+++ b/kernel/kapi/devices/driver_registry.tests.cpp
@@ -40,7 +40,7 @@ namespace
{
++*match_calls;
- auto const * identification = driver.facet<test_claim>();
+ auto const identification = driver.facet<test_claim>();
if (!identification)
{
return kstd::failure(kapi::devices::driver_match_errc::no_match);
@@ -107,11 +107,11 @@ namespace
mutable unsigned probe_calls;
protected:
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == test_claim::id)
{
- return static_cast<test_claim *>(this);
+ return kstd::make_observer<test_claim>(this);
}
return kapi::devices::driver::query_facet(facet);
@@ -178,7 +178,7 @@ SCENARIO("Driver registry picks the highest-priority match", "[devices][driver_r
{
auto dev = kapi::devices::device_registry::get().find("driver_registry_priority_device");
REQUIRE(dev != nullptr);
- REQUIRE(dev->bound_driver() == high_priority.get());
+ REQUIRE(dev->bound_driver() == high_priority);
}
}
}
@@ -203,7 +203,7 @@ SCENARIO("Driver registry breaks ties by registration order", "[devices][driver_
{
auto dev = kapi::devices::device_registry::get().find("driver_registry_tie_device");
REQUIRE(dev != nullptr);
- REQUIRE(dev->bound_driver() == registered_first.get());
+ REQUIRE(dev->bound_driver() == registered_first);
}
}
}
@@ -255,7 +255,7 @@ SCENARIO("Driver registry leaves bound driver bound, even if better driver arriv
auto dev = kapi::devices::device_registry::get().find("driver_probe_failure_device");
REQUIRE(dev != nullptr);
REQUIRE(dev->state() == kapi::devices::state::bound);
- REQUIRE(dev->bound_driver() == lower.get());
+ REQUIRE(dev->bound_driver() == lower);
}
}
}
diff --git a/kernel/kapi/devices/facet_registry.cpp b/kernel/kapi/devices/facet_registry.cpp
index 2974c71e..f2f5d03b 100644
--- a/kernel/kapi/devices/facet_registry.cpp
+++ b/kernel/kapi/devices/facet_registry.cpp
@@ -46,7 +46,7 @@ namespace kapi::devices
}
auto facet_registry::do_publish(kstd::shared_ptr<device> device, kstd::string name, kapi::capabilities::facet_id id,
- void * facet) -> kstd::result<void>
+ kstd::observer_ptr<void> facet) -> kstd::result<void>
{
auto published = std::optional<entry>{};
@@ -169,7 +169,7 @@ namespace kapi::devices
return filtered;
}
- auto facet_registry::resolve(kapi::capabilities::facet_id facet, std::string_view name) -> void *
+ auto facet_registry::resolve(kapi::capabilities::facet_id facet, std::string_view name) -> kstd::observer_ptr<void>
{
auto found_device = kstd::shared_ptr<device>{};
{
@@ -193,7 +193,7 @@ namespace kapi::devices
return resolve(facet, *found_device);
}
- auto facet_registry::resolve(kapi::capabilities::facet_id id, device & device) -> void *
+ auto facet_registry::resolve(kapi::capabilities::facet_id id, device & device) -> kstd::observer_ptr<void>
{
if (auto by_device = device.facet(id))
{
diff --git a/kernel/kapi/devices/facet_registry.tests.cpp b/kernel/kapi/devices/facet_registry.tests.cpp
index 9396fc6c..f6735f01 100644
--- a/kernel/kapi/devices/facet_registry.tests.cpp
+++ b/kernel/kapi/devices/facet_registry.tests.cpp
@@ -50,15 +50,15 @@ namespace
return m_value;
}
- auto query_facet(kapi::capabilities::facet_id facet) -> void * override
+ auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr<void> override
{
if (facet == probe_device::id)
{
- return static_cast<probe_device *>(this);
+ return kstd::make_observer<probe_device>(this);
}
if (facet == const_device::id)
{
- return m_const_device;
+ return kstd::observer_ptr{m_const_device};
}
return kapi::devices::device::query_facet(facet);
@@ -143,7 +143,7 @@ SCENARIO("Publishing and finding a device", "[kapi][devices][facet_registry]")
THEN("publishing a free standing second facet for the same device succeeds")
{
- REQUIRE(registry.publish(device, "probe0", &free_standing_facet));
+ REQUIRE(registry.publish(device, "probe0", kstd::make_observer(&free_standing_facet)));
}
AND_WHEN("getting all devices implementing that facet")
@@ -239,7 +239,7 @@ SCENARIO("Publishing and finding a device", "[kapi][devices][facet_registry]")
THEN("publishing the facet for the device fails")
{
- REQUIRE_FALSE(registry.publish(device, "probe0", &facet));
+ REQUIRE_FALSE(registry.publish(device, "probe0", kstd::make_observer(&facet)));
}
}
}