aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/devices/block_device_utils.cpp19
-rw-r--r--kernel/kernel/devices/block_device_utils.hpp8
-rw-r--r--kernel/kernel/devices/storage.cpp3
-rw-r--r--kernel/kernel/devices/storage.tests.cpp3
-rw-r--r--kernel/kernel/drivers/storage/ram_disk.cpp20
-rw-r--r--kernel/kernel/filesystem/device_inode.cpp4
-rw-r--r--kernel/kernel/filesystem/device_inode.tests.cpp2
-rw-r--r--kernel/kernel/filesystem/device_number_registry.tests.cpp5
-rw-r--r--kernel/kernel/filesystem/file_type_bindings.hpp3
-rw-r--r--kernel/kernel/test_support/devices/block_device.cpp5
-rw-r--r--kernel/kernel/test_support/devices/block_device.hpp3
-rw-r--r--kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp6
12 files changed, 46 insertions, 35 deletions
diff --git a/kernel/kernel/devices/block_device_utils.cpp b/kernel/kernel/devices/block_device_utils.cpp
index a46e10ba..83bb8144 100644
--- a/kernel/kernel/devices/block_device_utils.cpp
+++ b/kernel/kernel/devices/block_device_utils.cpp
@@ -1,6 +1,6 @@
#include <kernel/devices/block_device_utils.hpp>
-#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kapi/system.hpp>
#include <kstd/cstring.hpp>
@@ -19,10 +19,11 @@ namespace kernel::devices::block_device_utils
namespace
{
using block_op = kstd::result<kstd::units::bytes> (*)(size_t idx, kstd::units::bytes off, kstd::units::bytes len,
- kstd::units::bytes done, kapi::devices::block_device & device,
- std::byte * scratch, void * buffer);
+ kstd::units::bytes done,
+ kapi::filesystem::block_device & device, std::byte * scratch,
+ void * buffer);
- auto process_blocks(kapi::devices::block_device & device, kstd::units::bytes offset, kstd::units::bytes size,
+ auto process_blocks(kapi::filesystem::block_device & device, kstd::units::bytes offset, kstd::units::bytes size,
void * buffer, block_op op) -> kstd::result<kstd::units::bytes>
{
if (buffer == nullptr)
@@ -68,7 +69,7 @@ namespace kernel::devices::block_device_utils
}
} // namespace
- auto calculate_transfer(kapi::devices::block_device const & device, size_t block_index) -> transfer_info
+ auto calculate_transfer(kapi::filesystem::block_device const & device, size_t block_index) -> transfer_info
{
auto const offset = block_index * device.block_size();
auto const limit = device.capacity();
@@ -79,12 +80,12 @@ namespace kernel::devices::block_device_utils
return {offset, to_transfer, device.block_size() - to_transfer};
}
- auto read(kapi::devices::block_device & device, void * buffer, kstd::units::bytes offset, kstd::units::bytes size)
+ auto read(kapi::filesystem::block_device & device, void * buffer, kstd::units::bytes offset, kstd::units::bytes size)
-> kstd::result<kstd::units::bytes>
{
return process_blocks(device, offset, size, buffer,
[](size_t idx, kstd::units::bytes off, kstd::units::bytes len, kstd::units::bytes done,
- kapi::devices::block_device & device, std::byte * scratch, void * buffer) {
+ kapi::filesystem::block_device & device, std::byte * scratch, void * buffer) {
auto * out = static_cast<std::byte *>(buffer);
if (off == 0_B && len == device.block_size())
{
@@ -102,12 +103,12 @@ namespace kernel::devices::block_device_utils
});
}
- auto write(kapi::devices::block_device & device, void const * buffer, kstd::units::bytes offset,
+ auto write(kapi::filesystem::block_device & device, void const * buffer, kstd::units::bytes offset,
kstd::units::bytes size) -> kstd::result<kstd::units::bytes>
{
return process_blocks(device, offset, size, const_cast<void *>(buffer),
[](size_t idx, kstd::units::bytes off, kstd::units::bytes len, kstd::units::bytes done,
- kapi::devices::block_device & device, std::byte * scratch, void * buffer) {
+ kapi::filesystem::block_device & device, std::byte * scratch, void * buffer) {
auto const * in = static_cast<std::byte const *>(buffer);
if (off == 0_B && len == device.block_size())
{
diff --git a/kernel/kernel/devices/block_device_utils.hpp b/kernel/kernel/devices/block_device_utils.hpp
index a3895259..240cb20d 100644
--- a/kernel/kernel/devices/block_device_utils.hpp
+++ b/kernel/kernel/devices/block_device_utils.hpp
@@ -1,7 +1,7 @@
#ifndef TEACH_OS_KERNEL_DEVICES_BLOCK_DEVICE_UTILS_HPP
#define TEACH_OS_KERNEL_DEVICES_BLOCK_DEVICE_UTILS_HPP
-#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kstd/memory.hpp>
#include <kstd/result.hpp>
@@ -28,7 +28,7 @@ namespace kernel::devices::block_device_utils
kstd::units::bytes remainder;
};
- [[nodiscard]] auto calculate_transfer(kapi::devices::block_device const & device, size_t block_index)
+ [[nodiscard]] auto calculate_transfer(kapi::filesystem::block_device const & device, size_t block_index)
-> transfer_info;
/**
@@ -40,7 +40,7 @@ namespace kernel::devices::block_device_utils
@param size The number of bytes to read.
@return The number of bytes actually read, which may be less than the requested size.
*/
- auto read(kapi::devices::block_device & device, void * buffer, kstd::units::bytes offset, kstd::units::bytes size)
+ auto read(kapi::filesystem::block_device & device, void * buffer, kstd::units::bytes offset, kstd::units::bytes size)
-> kstd::result<kstd::units::bytes>;
/**
@@ -52,7 +52,7 @@ namespace kernel::devices::block_device_utils
@param size The number of bytes to write.
@return The number of bytes actually written, which may be less than the requested size.
*/
- auto write(kapi::devices::block_device & device, void const * buffer, kstd::units::bytes offset,
+ auto write(kapi::filesystem::block_device & device, void const * buffer, kstd::units::bytes offset,
kstd::units::bytes size) -> kstd::result<kstd::units::bytes>;
} // namespace kernel::devices::block_device_utils
diff --git a/kernel/kernel/devices/storage.cpp b/kernel/kernel/devices/storage.cpp
index a95b1840..12d5639c 100644
--- a/kernel/kernel/devices/storage.cpp
+++ b/kernel/kernel/devices/storage.cpp
@@ -3,6 +3,7 @@
#include <kernel/bus/boot_modules.hpp>
#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kstd/memory.hpp>
@@ -17,7 +18,7 @@ namespace kernel::devices::storage
auto determine_boot_device() -> kstd::shared_ptr<kapi::devices::device>
{
- auto block_devices = kapi::devices::interface_registry::get().all(kapi::devices::block_device::id);
+ auto block_devices = kapi::devices::interface_registry::get().all(kapi::filesystem::block_device::id);
if (block_devices.empty())
{
return nullptr;
diff --git a/kernel/kernel/devices/storage.tests.cpp b/kernel/kernel/devices/storage.tests.cpp
index 2a06149a..754457b9 100644
--- a/kernel/kernel/devices/storage.tests.cpp
+++ b/kernel/kernel/devices/storage.tests.cpp
@@ -4,6 +4,7 @@
#include <kapi/boot_modules/device.hpp>
#include <kapi/boot_modules/module.hpp>
#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kapi/memory.hpp>
#include <kstd/memory.hpp>
@@ -28,7 +29,7 @@ TEST_CASE("Storage devices attached with init() are reachable from the root bus"
bus->add_child(device);
- auto block_devices = kapi::devices::interface_registry::get().all(kapi::devices::block_device::id);
+ auto block_devices = kapi::devices::interface_registry::get().all(kapi::filesystem::block_device::id);
REQUIRE(block_devices.size() == 1);
CHECK(block_devices[0].name() == "ram0");
diff --git a/kernel/kernel/drivers/storage/ram_disk.cpp b/kernel/kernel/drivers/storage/ram_disk.cpp
index 8bf06b66..6c9bed0d 100644
--- a/kernel/kernel/drivers/storage/ram_disk.cpp
+++ b/kernel/kernel/drivers/storage/ram_disk.cpp
@@ -5,6 +5,7 @@
#include <kapi/boot_modules.hpp>
#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kapi/system.hpp>
#include <kstd/cstring.hpp>
@@ -30,7 +31,7 @@ namespace kernel::drivers::storage
{
constexpr auto default_block_size = 512_B;
- struct block_node final : kapi::devices::block_device
+ struct block_node final : kapi::filesystem::block_device
{
explicit block_node(kapi::boot_modules::module const & module)
: m_module(module)
@@ -109,15 +110,16 @@ namespace kernel::drivers::storage
auto implementation = kstd::make_shared<struct block_node>(module);
- auto next_index = std::ranges::count_if(
- kapi::devices::interface_registry::get().all(kapi::devices::block_device::id), [this](auto const & published) {
- auto published_device = published.device();
- return published_device && published_device->bound_driver() == this;
- });
+ auto next_index =
+ std::ranges::count_if(kapi::devices::interface_registry::get().all(kapi::filesystem::block_device::id),
+ [this](auto const & published) {
+ auto published_device = published.device();
+ return published_device && published_device->bound_driver() == this;
+ });
auto name = kstd::format("ram{}", next_index);
- auto published = kapi::devices::publish_interface<kapi::devices::block_device>(device.shared_from_this(), name,
- implementation.get());
+ auto published = kapi::devices::publish_interface<kapi::filesystem::block_device>(device.shared_from_this(), name,
+ implementation.get());
if (!published)
{
return published;
@@ -130,7 +132,7 @@ namespace kernel::drivers::storage
auto ram_disk::unbind(kapi::devices::device & device) -> void
{
- kapi::devices::interface_registry::get().unpublish(device, kapi::devices::block_device::id);
+ kapi::devices::interface_registry::get().unpublish(device, kapi::filesystem::block_device::id);
device.set_driver_data(nullptr);
}
diff --git a/kernel/kernel/filesystem/device_inode.cpp b/kernel/kernel/filesystem/device_inode.cpp
index b898c5eb..c68e8d8d 100644
--- a/kernel/kernel/filesystem/device_inode.cpp
+++ b/kernel/kernel/filesystem/device_inode.cpp
@@ -41,7 +41,7 @@ namespace kernel::filesystem
auto device_inode::read(void * buffer, kstd::units::bytes offset, kstd::units::bytes size) const
-> kstd::result<kstd::units::bytes>
{
- if (auto block_device = kapi::devices::interface_registry::get().resolve<kapi::devices::block_device>(*m_device))
+ if (auto block_device = kapi::devices::interface_registry::get().resolve<kapi::filesystem::block_device>(*m_device))
{
return devices::block_device_utils::read(*block_device, buffer, offset, size);
}
@@ -52,7 +52,7 @@ namespace kernel::filesystem
auto device_inode::write(void const * buffer, kstd::units::bytes offset, kstd::units::bytes size)
-> kstd::result<kstd::units::bytes>
{
- if (auto block_device = kapi::devices::interface_registry::get().resolve<kapi::devices::block_device>(*m_device))
+ if (auto block_device = kapi::devices::interface_registry::get().resolve<kapi::filesystem::block_device>(*m_device))
{
return devices::block_device_utils::write(*block_device, buffer, offset, size);
}
diff --git a/kernel/kernel/filesystem/device_inode.tests.cpp b/kernel/kernel/filesystem/device_inode.tests.cpp
index f36bb4dc..f859bb1a 100644
--- a/kernel/kernel/filesystem/device_inode.tests.cpp
+++ b/kernel/kernel/filesystem/device_inode.tests.cpp
@@ -172,7 +172,7 @@ SCENARIO("Device inode raw_device()", "[filesystem][device-inode]")
CHECK(kernel::tests::devices::bind(*device, std::uint8_t{1}));
- REQUIRE(kapi::devices::interface_registry::get().publish<kapi::devices::block_device>(device, "ram0"));
+ REQUIRE(kapi::devices::interface_registry::get().publish<kapi::filesystem::block_device>(device, "ram0"));
auto inode = kernel::filesystem::device_inode{device};
diff --git a/kernel/kernel/filesystem/device_number_registry.tests.cpp b/kernel/kernel/filesystem/device_number_registry.tests.cpp
index 906f330a..262330e3 100644
--- a/kernel/kernel/filesystem/device_number_registry.tests.cpp
+++ b/kernel/kernel/filesystem/device_number_registry.tests.cpp
@@ -5,6 +5,7 @@
#include <kernel/test_support/devices/driver.hpp>
#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kstd/memory.hpp>
#include <kstd/string.hpp>
@@ -27,7 +28,7 @@ namespace
{
auto device = kstd::make_shared<kernel::tests::devices::block_device>(name, block_size);
[[maybe_unused]] auto driver = kernel::tests::devices::bind(*device, major);
- if (!interfaces.publish<kapi::devices::block_device>(device, name))
+ if (!interfaces.publish<kapi::filesystem::block_device>(device, name))
{
throw std::runtime_error{"failed to publish block device!"};
}
@@ -144,7 +145,7 @@ SCENARIO("Device number registry resolves and numbers published block devices",
GIVEN("A published device with no bound driver at all")
{
auto device = kstd::make_shared<kernel::tests::devices::block_device>("unbound0", 512_B);
- CHECK(interfaces.publish<kapi::devices::block_device>(device, "unbound0"));
+ CHECK(interfaces.publish<kapi::filesystem::block_device>(device, "unbound0"));
THEN("it is never numbered")
{
diff --git a/kernel/kernel/filesystem/file_type_bindings.hpp b/kernel/kernel/filesystem/file_type_bindings.hpp
index 00651f4a..9ef4d77f 100644
--- a/kernel/kernel/filesystem/file_type_bindings.hpp
+++ b/kernel/kernel/filesystem/file_type_bindings.hpp
@@ -5,6 +5,7 @@
#include <kernel/filesystem/reserved_numbers.hpp>
#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <array>
@@ -22,7 +23,7 @@ namespace kernel::filesystem
//!
//! This array associates published interfaces with files types.
constexpr auto inline file_type_bindings = std::array{
- file_type_binding{kapi::devices::block_device::id, file_type::block},
+ file_type_binding{kapi::filesystem::block_device::id, file_type::block},
};
} // namespace kernel::filesystem
diff --git a/kernel/kernel/test_support/devices/block_device.cpp b/kernel/kernel/test_support/devices/block_device.cpp
index a91a9cfb..48414aae 100644
--- a/kernel/kernel/test_support/devices/block_device.cpp
+++ b/kernel/kernel/test_support/devices/block_device.cpp
@@ -1,6 +1,7 @@
#include <kernel/test_support/devices/block_device.hpp>
#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kstd/result.hpp>
#include <kstd/string.hpp>
@@ -69,9 +70,9 @@ namespace kernel::tests::devices
auto block_device::query_interface(kapi::devices::interface_id interface) -> void *
{
- if (interface == kapi::devices::block_device::id)
+ if (interface == kapi::filesystem::block_device::id)
{
- return static_cast<kapi::devices::block_device *>(this);
+ return static_cast<kapi::filesystem::block_device *>(this);
}
return kapi::devices::device::query_interface(interface);
diff --git a/kernel/kernel/test_support/devices/block_device.hpp b/kernel/kernel/test_support/devices/block_device.hpp
index a1c37688..fed7b2bd 100644
--- a/kernel/kernel/test_support/devices/block_device.hpp
+++ b/kernel/kernel/test_support/devices/block_device.hpp
@@ -2,6 +2,7 @@
#define TEACHOS_KERNEL_TEST_SUPPORT_DEVICES_BLOCK_DEVICE_HPP
#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kstd/result.hpp>
#include <kstd/string.hpp>
@@ -14,7 +15,7 @@
namespace kernel::tests::devices
{
- struct block_device final : kapi::devices::device, kapi::devices::block_device
+ struct block_device final : kapi::devices::device, kapi::filesystem::block_device
{
block_device(kstd::string const & name, kstd::units::bytes block_size, kstd::units::bytes initial_size = {});
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 644e38fe..79011450 100644
--- a/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp
+++ b/kernel/kernel/test_support/filesystem/storage_boot_module_fixture.cpp
@@ -6,6 +6,7 @@
#include <kapi/boot_modules.hpp>
#include <kapi/boot_modules/device.hpp>
#include <kapi/devices.hpp>
+#include <kapi/filesystem.hpp>
#include <kapi/memory.hpp>
#include <kstd/memory.hpp>
@@ -102,7 +103,7 @@ namespace kernel::tests::filesystem
m_boot_module_bus->add_child(kstd::make_shared<kapi::boot_modules::device>(i, module));
}
- if (module_count > 0 && kapi::devices::interface_registry::get().all(kapi::devices::block_device::id).empty())
+ if (module_count > 0 && kapi::devices::interface_registry::get().all(kapi::filesystem::block_device::id).empty())
{
throw std::runtime_error{"No RAM disk driver bound to any of the test fixture's boot modules."};
}
@@ -126,7 +127,8 @@ namespace kernel::tests::filesystem
setup_module_from_img(i, module_names[i], img_paths[i]);
}
- if (!module_names.empty() && kapi::devices::interface_registry::get().all(kapi::devices::block_device::id).empty())
+ if (!module_names.empty() &&
+ kapi::devices::interface_registry::get().all(kapi::filesystem::block_device::id).empty())
{
throw std::runtime_error{"No RAM disk driver bound to any of the test fixture's boot modules."};
}