aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kapi/boot_module/bus.cpp8
-rw-r--r--kernel/kapi/devices.cpp1
-rw-r--r--kernel/kapi/devices.tests.cpp5
-rw-r--r--kernel/kapi/devices/bus.cpp40
-rw-r--r--kernel/kapi/devices/bus.tests.cpp10
-rw-r--r--kernel/kapi/devices/interface_registry.tests.cpp5
-rw-r--r--kernel/kernel/test_support/devices/block_device.cpp5
-rw-r--r--kernel/kernel/test_support/devices/block_device.hpp2
-rw-r--r--kernel/kernel/test_support/devices/character_device.cpp5
-rw-r--r--kernel/kernel/test_support/devices/character_device.hpp2
-rw-r--r--kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp25
-rw-r--r--kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp5
-rw-r--r--kernel/kernel/test_support/state_reset_listener.cpp6
13 files changed, 25 insertions, 94 deletions
diff --git a/kernel/kapi/boot_module/bus.cpp b/kernel/kapi/boot_module/bus.cpp
index b917866c..3e95a3ac 100644
--- a/kernel/kapi/boot_module/bus.cpp
+++ b/kernel/kapi/boot_module/bus.cpp
@@ -20,7 +20,8 @@ namespace kapi::boot_modules
{
auto const text = std::string_view{token};
auto const equals = text.find('=');
- if (equals != std::string_view::npos && text.substr(equals) == key && text.substr(equals + 1) == value)
+ if (equals != std::string_view::npos && text.substr(0, equals) == key &&
+ text.substr(equals + 1, value.size()) == value)
{
return true;
}
@@ -33,11 +34,6 @@ namespace kapi::boot_modules
, m_module(module)
{}
- auto boot_module_device::init() -> bool
- {
- return true;
- }
-
auto boot_module_device::command_line() const -> std::string_view
{
return m_module.name;
diff --git a/kernel/kapi/devices.cpp b/kernel/kapi/devices.cpp
index 5eed1b87..267bfb4d 100644
--- a/kernel/kapi/devices.cpp
+++ b/kernel/kapi/devices.cpp
@@ -35,7 +35,6 @@ namespace kapi::devices
root_bus = kstd::make_shared<kernel::devices::root_bus>();
register_device(root_bus);
- root_bus->init();
}
auto get_root_bus() -> kstd::shared_ptr<bus>
diff --git a/kernel/kapi/devices.tests.cpp b/kernel/kapi/devices.tests.cpp
index 236a812d..627c5ce0 100644
--- a/kernel/kapi/devices.tests.cpp
+++ b/kernel/kapi/devices.tests.cpp
@@ -15,11 +15,6 @@ namespace
struct test_device final : kapi::devices::device
{
using kapi::devices::device::device;
-
- auto init() -> bool override
- {
- return true;
- }
};
} // namespace
diff --git a/kernel/kapi/devices/bus.cpp b/kernel/kapi/devices/bus.cpp
index 25e35733..db693eac 100644
--- a/kernel/kapi/devices/bus.cpp
+++ b/kernel/kapi/devices/bus.cpp
@@ -5,11 +5,9 @@
#include <kapi/system.hpp>
#include <kstd/memory.hpp>
-#include <kstd/print.hpp>
#include <kstd/string.hpp>
#include <kstd/vector.hpp>
-#include <algorithm>
#include <span>
#include <utility>
@@ -19,30 +17,6 @@ namespace kapi::devices
: device{name}
{}
- auto bus::init() -> bool
- {
- if (m_init_was_called.test_and_set())
- {
- kstd::println(kstd::print_sink::stderr, "[OS:DEV] Bus {} already initialized", name());
- return true;
- }
-
- if (!enumerate_old())
- {
- kstd::println(kstd::print_sink::stderr, "[OS:DEV] Bus {} enumeration failed", name());
- return false;
- }
-
- auto child_status = std::ranges::fold_left(m_devices, true, [&](bool acc, auto & child) -> bool {
- kstd::println("[OS:DEV] Initializing child device {}@{}", child->name(), name());
- return child->init() && acc;
- });
-
- m_initialized.test_and_set();
-
- return child_status;
- }
-
auto bus::add_child(kstd::shared_ptr<device> child) -> void
{
child->set_parent(kstd::static_pointer_cast<bus>(shared_from_this()));
@@ -56,15 +30,6 @@ namespace kapi::devices
attached->set_state(state::present);
driver_registry::get().device_attached(attached);
-
- if (m_initialized.test())
- {
- kstd::println("[OS:DEV] Initializing child device {}@{}", attached->name(), name());
- if (!attached->init())
- {
- kapi::system::panic("[OS:DEV] Failed to initialize child device");
- }
- }
}
[[nodiscard]] auto bus::children() const -> std::span<kstd::shared_ptr<device> const>
@@ -77,9 +42,4 @@ namespace kapi::devices
return nullptr;
}
- auto bus::enumerate_old() -> bool
- {
- return true;
- }
-
} // namespace kapi::devices \ No newline at end of file
diff --git a/kernel/kapi/devices/bus.tests.cpp b/kernel/kapi/devices/bus.tests.cpp
index d5a2d1cf..9f95513b 100644
--- a/kernel/kapi/devices/bus.tests.cpp
+++ b/kernel/kapi/devices/bus.tests.cpp
@@ -16,11 +16,6 @@ namespace
struct test_device final : kapi::devices::device
{
using kapi::devices::device::device;
-
- auto init() -> bool override
- {
- return true;
- }
};
struct flagging_device final : kapi::devices::device
@@ -35,11 +30,6 @@ namespace
*m_destroyed_flag = true;
}
- auto init() -> bool override
- {
- return true;
- }
-
private:
bool * m_destroyed_flag;
};
diff --git a/kernel/kapi/devices/interface_registry.tests.cpp b/kernel/kapi/devices/interface_registry.tests.cpp
index aea7776c..78cd7ecf 100644
--- a/kernel/kapi/devices/interface_registry.tests.cpp
+++ b/kernel/kapi/devices/interface_registry.tests.cpp
@@ -35,11 +35,6 @@ namespace
, m_const_device{&const_device}
{}
- auto init() -> bool override
- {
- return true;
- }
-
[[nodiscard]] constexpr auto get_value() const noexcept -> int override
{
return m_value;
diff --git a/kernel/kernel/test_support/devices/block_device.cpp b/kernel/kernel/test_support/devices/block_device.cpp
index 3052a26d..3fd84611 100644
--- a/kernel/kernel/test_support/devices/block_device.cpp
+++ b/kernel/kernel/test_support/devices/block_device.cpp
@@ -24,11 +24,6 @@ namespace kernel::tests::devices
data.resize(initial_size.value, 0);
}
- auto block_device::init() -> bool
- {
- return true;
- }
-
auto block_device::read_block(size_t block_index, void * buffer) const -> kstd::result<kstd::units::bytes>
{
auto const offset = block_index * block_size();
diff --git a/kernel/kernel/test_support/devices/block_device.hpp b/kernel/kernel/test_support/devices/block_device.hpp
index c3a05aef..dc4f685e 100644
--- a/kernel/kernel/test_support/devices/block_device.hpp
+++ b/kernel/kernel/test_support/devices/block_device.hpp
@@ -18,8 +18,6 @@ namespace kernel::tests::devices
{
block_device(kstd::string const & name, kstd::units::bytes block_size, kstd::units::bytes initial_size = {});
- auto init() -> bool override;
-
auto read_block(size_t block_index, void * buffer) const -> kstd::result<kstd::units::bytes> override;
auto write_block(size_t block_index, void const * buffer) -> kstd::result<kstd::units::bytes> override;
diff --git a/kernel/kernel/test_support/devices/character_device.cpp b/kernel/kernel/test_support/devices/character_device.cpp
index a433fe2d..b72c2a3f 100644
--- a/kernel/kernel/test_support/devices/character_device.cpp
+++ b/kernel/kernel/test_support/devices/character_device.cpp
@@ -9,9 +9,4 @@ namespace kernel::tests::devices
character_device::character_device(kstd::string const & name)
: kapi::devices::device{name}
{}
-
- auto character_device::init() -> bool
- {
- return true;
- }
} // namespace kernel::tests::devices \ No newline at end of file
diff --git a/kernel/kernel/test_support/devices/character_device.hpp b/kernel/kernel/test_support/devices/character_device.hpp
index fe4b9370..31a5aafc 100644
--- a/kernel/kernel/test_support/devices/character_device.hpp
+++ b/kernel/kernel/test_support/devices/character_device.hpp
@@ -12,8 +12,6 @@ namespace kernel::tests::devices
struct character_device : kapi::devices::device
{
character_device(kstd::string const & name);
-
- auto init() -> bool override;
};
} // namespace kernel::tests::devices
diff --git a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp
index b0a29118..79a9eae1 100644
--- a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp
+++ b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp
@@ -1,11 +1,12 @@
#include <kernel/test_support/filesystem/storage_boot_module_fixture.hpp>
#include <kernel/devices/storage.hpp>
-#include <kernel/devices/storage/ram_disk/controller.hpp>
#include <kernel/test_support/boot_modules.hpp>
#include <kapi/boot_module/boot_module.hpp>
+#include <kapi/boot_module/bus.hpp>
#include <kapi/boot_modules.hpp>
+#include <kapi/devices.hpp>
#include <kapi/memory.hpp>
#include <kstd/memory.hpp>
@@ -93,7 +94,7 @@ namespace kernel::tests::filesystem
for (std::size_t i = 0; i < module_count; ++i)
{
- m_module_names.push_back(std::format("test_mod{}", i));
+ m_module_names.push_back(std::format("test_mod{} type=ramdisk", i));
m_module_data.emplace_back(module_size, std::byte{static_cast<unsigned char>(0x40 + (i % 16))});
}
@@ -105,11 +106,13 @@ namespace kernel::tests::filesystem
kapi::boot_modules::set_boot_module_registry(m_registry);
- m_storage_controller = kstd::make_shared<kernel::devices::storage::ram_disk::controller>(
- &kapi::boot_modules::get_boot_module_registry());
- if (!m_storage_controller->init())
+ m_boot_module_bus =
+ kstd::make_shared<kapi::boot_modules::boot_module_bus>(&kapi::boot_modules::get_boot_module_registry());
+ m_boot_module_bus->enumerate(*m_boot_module_bus);
+
+ if (module_count > 0 && kapi::devices::interface_registry::get().all(kapi::devices::block_device::id).empty())
{
- throw std::runtime_error{"Failed to initialize the test fixture's RAM disk controller."};
+ throw std::runtime_error{"No RAM disk driver bound to any of the test fixture's boot modules."};
}
}
@@ -132,11 +135,13 @@ namespace kernel::tests::filesystem
kapi::boot_modules::set_boot_module_registry(m_registry);
- m_storage_controller = kstd::make_shared<kernel::devices::storage::ram_disk::controller>(
- &kapi::boot_modules::get_boot_module_registry());
- if (!m_storage_controller->init())
+ m_boot_module_bus =
+ kstd::make_shared<kapi::boot_modules::boot_module_bus>(&kapi::boot_modules::get_boot_module_registry());
+ m_boot_module_bus->enumerate(*m_boot_module_bus);
+
+ if (!module_names.empty() && kapi::devices::interface_registry::get().all(kapi::devices::block_device::id).empty())
{
- throw std::runtime_error{"Failed to initialize the test fixture's RAM disk controller."};
+ throw std::runtime_error{"No RAM disk driver bound to any of the test fixture's boot modules."};
}
}
diff --git a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp
index a8df7090..48bddf31 100644
--- a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp
+++ b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.hpp
@@ -1,9 +1,8 @@
#ifndef TEACHOS_KERNEL_TEST_SUPPORT_FILESYSTEM_STORAGE_BOOT_MODULE_FIXTURE_HPP
#define TEACHOS_KERNEL_TEST_SUPPORT_FILESYSTEM_STORAGE_BOOT_MODULE_FIXTURE_HPP
-#include <kernel/devices/storage/ram_disk/controller.hpp>
-
#include <kapi/boot_module/boot_module_registry.hpp>
+#include <kapi/boot_module/bus.hpp>
#include <kstd/memory.hpp>
@@ -44,7 +43,7 @@ namespace kernel::tests::filesystem
std::vector<std::vector<std::byte>> m_module_data{};
std::vector<mapped_image> m_mapped_images{};
- kstd::shared_ptr<kernel::devices::storage::ram_disk::controller> m_storage_controller{};
+ kstd::shared_ptr<kapi::boot_modules::boot_module_bus> m_boot_module_bus{};
private:
auto setup_module_from_img(std::string const & module_name, std::filesystem::path const & img_path) -> void;
diff --git a/kernel/kernel/test_support/state_reset_listener.cpp b/kernel/kernel/test_support/state_reset_listener.cpp
index a6dc6528..1f2cb769 100644
--- a/kernel/kernel/test_support/state_reset_listener.cpp
+++ b/kernel/kernel/test_support/state_reset_listener.cpp
@@ -1,3 +1,4 @@
+#include <kernel/devices/storage/ram_disk/driver.hpp>
#include <kernel/filesystem/open_file_table.hpp>
#include <kernel/test_support/boot_modules.hpp>
#include <kernel/test_support/cio.hpp>
@@ -10,9 +11,12 @@
#include <kapi/cio.hpp>
#include <kapi/cpu.hpp>
#include <kapi/devices.hpp>
+#include <kapi/devices/driver_registry.hpp>
#include <kapi/memory.hpp>
#include <kapi/test_support/devices.hpp>
+#include <kstd/memory.hpp>
+
#include <catch2/catch_test_case_info.hpp>
#include <catch2/interfaces/catch_interfaces_reporter.hpp>
#include <catch2/reporters/catch_reporter_event_listener.hpp>
@@ -30,6 +34,8 @@ struct state_reset_listener : Catch::EventListenerBase
kapi::cpu::init();
kapi::memory::init();
kapi::devices::init();
+
+ kapi::devices::driver_registry::get().add(kstd::make_shared<kernel::devices::storage::ram_disk::driver>());
}
void testCaseEnded(Catch::TestCaseStats const &) override