diff options
Diffstat (limited to 'kernel/src/test_support/kapi')
| -rw-r--r-- | kernel/src/test_support/kapi/cio.cpp | 63 | ||||
| -rw-r--r-- | kernel/src/test_support/kapi/cpu.cpp | 37 | ||||
| -rw-r--r-- | kernel/src/test_support/kapi/memory.cpp | 25 |
3 files changed, 72 insertions, 53 deletions
diff --git a/kernel/src/test_support/kapi/cio.cpp b/kernel/src/test_support/kapi/cio.cpp index 35452d4..4a1cd1f 100644 --- a/kernel/src/test_support/kapi/cio.cpp +++ b/kernel/src/test_support/kapi/cio.cpp @@ -1,43 +1,54 @@ +#include "kernel/test_support/cio.hpp" + #include <kapi/cio.hpp> #include "kernel/test_support/log_buffer.hpp" -#include <iostream> -#include <string> -#include <string_view> +#include <atomic> +#include <optional> +#include <stdexcept> + +namespace +{ + + auto constinit is_initialized = std::atomic_flag{}; + auto constinit device = std::optional<kernel::tests::cio::output_device>{}; + +} // namespace namespace kapi::cio { - namespace + auto init() -> void { - - class test_output_device : public output_device + if (is_initialized.test_and_set()) { - public: - test_output_device() = default; - - auto write(output_stream stream, std::string_view text) -> void override - { - auto & standard_stream = stream == output_stream::stdout ? std::cout : std::cerr; - standard_stream << text; - if (text != "\n") - { - kernel::tests::log_buffer::append(std::string{text}); - } - } - } device{}; - - } // namespace + throw std::logic_error("kapi::cio::init() called more than once"); + } - auto init() -> void + device.emplace(); + set_output_device(*device); + } + +} // namespace kapi::cio + +namespace kernel::tests::cio +{ + + auto deinit() -> void { - set_output_device(device); + if (!is_initialized.test()) + { + throw std::logic_error("kapi::cio::deinit() called before kapi::cio::init()"); + } + + device.reset(); + is_initialized.clear(); } - auto reset() -> void + auto log_buffer() -> kernel::tests::log_buffer & { - kernel::tests::log_buffer::clear(); + return device->log_buffer(); } -} // namespace kapi::cio
\ No newline at end of file +} // namespace kernel::tests::cio
\ No newline at end of file diff --git a/kernel/src/test_support/kapi/cpu.cpp b/kernel/src/test_support/kapi/cpu.cpp index 6592d15..96dd10a 100644 --- a/kernel/src/test_support/kapi/cpu.cpp +++ b/kernel/src/test_support/kapi/cpu.cpp @@ -5,23 +5,13 @@ #include <atomic> #include <stdexcept> -namespace kapi::cpu +namespace { + auto static initialized = std::atomic_flag{}; +} - namespace - { - auto static initialized = std::atomic_flag{}; - } - - auto reset() -> void - { - if (!initialized.test()) - { - throw std::logic_error{"kapi::cpu::reset() called before kapi::cpu::init()"}; - } - - initialized.clear(); - } +namespace kapi::cpu +{ auto init() -> void { @@ -38,4 +28,19 @@ namespace kapi::cpu throw kernel::tests::cpu::halt{}; } -} // namespace kapi::cpu
\ No newline at end of file +} // namespace kapi::cpu + +namespace kernel::tests::cpu +{ + + auto deinit() -> void + { + if (!initialized.test()) + { + throw std::logic_error{"kapi::cpu::reset() called before kapi::cpu::init()"}; + } + + initialized.clear(); + } + +} // namespace kernel::tests::cpu
\ No newline at end of file diff --git a/kernel/src/test_support/kapi/memory.cpp b/kernel/src/test_support/kapi/memory.cpp index f244b7f..e926ba6 100644 --- a/kernel/src/test_support/kapi/memory.cpp +++ b/kernel/src/test_support/kapi/memory.cpp @@ -12,8 +12,10 @@ namespace { //! The size of the simulated RAM. - constexpr auto memory_size = kstd::units::MiB(32); - constexpr auto number_of_frames = memory_size / kapi::memory::frame::size; + constexpr auto physical_size = kstd::units::MiB(32); + constexpr auto virtual_size = kstd::units::GiB(1); + + constexpr auto number_of_frames = physical_size / kapi::memory::frame::size; auto constinit bump_allocator = std::optional<kernel::tests::bump_frame_allocator>{}; auto constinit test_mapper = std::optional<kernel::tests::page_mapper>{}; @@ -36,15 +38,19 @@ namespace kapi::memory auto init() -> void { bump_allocator.emplace(); - test_mapper.emplace(memory_size); + test_mapper.emplace(physical_size, virtual_size); old_allocator = set_frame_allocator(*bump_allocator); old_mapper = set_page_mapper(*test_mapper); - init_pmm(memory_size / frame::size, handoff_to_kernel_pmm); + init_pmm(physical_size / frame::size, handoff_to_kernel_pmm); } +} // namespace kapi::memory + +namespace kernel::tests::memory +{ - auto reset() -> void + auto deinit() -> void { if (old_allocator && *old_allocator) { @@ -60,12 +66,9 @@ namespace kapi::memory test_mapper.reset(); } -} // namespace kapi::memory - -namespace kernel::tests::memory -{ - auto heap_base() -> kapi::memory::linear_address + auto virtual_base() -> kapi::memory::linear_address { - return test_mapper->memory.heap_base(); + return test_mapper->memory.virtual_base(); } + } // namespace kernel::tests::memory
\ No newline at end of file |
