aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64')
-rw-r--r--arch/x86_64/arch/bus/isa.cpp58
-rw-r--r--arch/x86_64/arch/bus/isa.hpp10
2 files changed, 34 insertions, 34 deletions
diff --git a/arch/x86_64/arch/bus/isa.cpp b/arch/x86_64/arch/bus/isa.cpp
index f0ed02f4..ee195519 100644
--- a/arch/x86_64/arch/bus/isa.cpp
+++ b/arch/x86_64/arch/bus/isa.cpp
@@ -10,37 +10,43 @@
namespace arch::bus
{
- isa::isa()
- : kapi::devices::bus{"isa"}
- {}
-
- auto isa::enumerate(kapi::devices::bus &) -> void
- {
- // NOTE: ISA does not support enumeration, but we need to fulfill the interface.
- }
-
- auto isa::match(kapi::devices::device const & device, kapi::devices::driver const & driver) const
- -> kstd::result<std::uint32_t>
+ namespace
{
- auto device_signature = device.as<isa_signature>();
- auto driver_claim = driver.as<isa_claim>();
-
- if (!device_signature || !driver_claim)
- {
- return kstd::failure(kapi::devices::driver_match_errc::no_match);
- }
-
- if (!std::ranges::contains(driver_claim->supported_names(), device_signature->isa_name()))
+ struct isa_protocol final : kapi::devices::bus_protocol
{
- return kstd::failure(kapi::devices::driver_match_errc::no_match);
- }
+ auto enumerate(kapi::devices::bus &) -> void override
+ {
+ // NOTE: ISA does not support enumeration, but we need to fulfill the interface.
+ }
+
+ [[nodiscard]] auto match(kapi::devices::device const & device, kapi::devices::driver const & driver) const
+ -> kstd::result<std::uint32_t> override
+ {
+ auto device_signature = device.as<isa_signature>();
+ auto driver_claim = driver.as<isa_claim>();
+
+ if (!device_signature || !driver_claim)
+ {
+ return kstd::failure(kapi::devices::driver_match_errc::no_match);
+ }
+
+ if (!std::ranges::contains(driver_claim->supported_names(), device_signature->isa_name()))
+ {
+ return kstd::failure(kapi::devices::driver_match_errc::no_match);
+ }
+
+ return 0u;
+ }
+ } constinit protocol_instance;
+ } // namespace
- return 0u;
- }
+ isa::isa()
+ : kapi::devices::bus{"isa"}
+ {}
- auto isa::protocol() -> isa *
+ auto isa::protocol() -> kapi::devices::bus_protocol *
{
- return this;
+ return &protocol_instance;
}
} // namespace arch::bus \ No newline at end of file
diff --git a/arch/x86_64/arch/bus/isa.hpp b/arch/x86_64/arch/bus/isa.hpp
index 58bc042f..87832c3c 100644
--- a/arch/x86_64/arch/bus/isa.hpp
+++ b/arch/x86_64/arch/bus/isa.hpp
@@ -5,7 +5,6 @@
#include <kstd/result.hpp>
-#include <cstdint>
#include <span>
#include <string_view>
@@ -39,17 +38,12 @@ namespace arch::bus
};
//! The ISA bus.
- struct isa final : public kapi::devices::bus, kapi::devices::bus_protocol
+ struct isa final : public kapi::devices::bus
{
//! Construct a default ISA bus.
isa();
- auto enumerate(kapi::devices::bus & self) -> void override;
-
- [[nodiscard]] auto match(kapi::devices::device const & device, kapi::devices::driver const & driver) const
- -> kstd::result<std::uint32_t> override;
-
- [[nodiscard]] auto protocol() -> isa * override;
+ [[nodiscard]] auto protocol() -> kapi::devices::bus_protocol * override;
};
} // namespace arch::bus