aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/test_support/kapi
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/test_support/kapi')
-rw-r--r--kernel/src/test_support/kapi/cio.cpp5
-rw-r--r--kernel/src/test_support/kapi/cpu.cpp18
-rw-r--r--kernel/src/test_support/kapi/memory.cpp14
3 files changed, 30 insertions, 7 deletions
diff --git a/kernel/src/test_support/kapi/cio.cpp b/kernel/src/test_support/kapi/cio.cpp
index 6359fa8..0dd4b8c 100644
--- a/kernel/src/test_support/kapi/cio.cpp
+++ b/kernel/src/test_support/kapi/cio.cpp
@@ -35,4 +35,9 @@ namespace kapi::cio
set_output_device(device);
}
+ auto reset() -> void
+ {
+ kernel::tests::log_buffer::clear();
+ }
+
} // namespace kapi::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 3ecaadc..9b2f0b9 100644
--- a/kernel/src/test_support/kapi/cpu.cpp
+++ b/kernel/src/test_support/kapi/cpu.cpp
@@ -8,17 +8,29 @@
namespace kapi::cpu
{
- auto init() -> void
+ 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();
+ }
+
+ auto init() -> void
+ {
if (initialized.test_and_set())
{
throw std::logic_error("kapi::cpu::init() called more than once");
}
// TODO: make sure that simulated interrupt can run.
-
- return;
}
auto halt() -> void
diff --git a/kernel/src/test_support/kapi/memory.cpp b/kernel/src/test_support/kapi/memory.cpp
index 556962c..4f261ac 100644
--- a/kernel/src/test_support/kapi/memory.cpp
+++ b/kernel/src/test_support/kapi/memory.cpp
@@ -21,7 +21,7 @@ namespace kapi::memory
constexpr auto simulate_memory_size = kstd::units::MiB(32);
constexpr auto number_of_simulated_frames = simulate_memory_size / frame::size;
- struct test_boostrap_frame_allocator : frame_allocator
+ struct test_bootstrap_frame_allocator : frame_allocator
{
auto mark_used(frame) -> void override {}
@@ -35,7 +35,7 @@ namespace kapi::memory
auto release_many(std::pair<frame, std::size_t>) -> void override {}
std::size_t next_free_frame{};
- } boostrap_allocator;
+ } bootstrap_allocator;
struct test_page_mapper : page_mapper
{
@@ -67,7 +67,7 @@ namespace kapi::memory
auto handoff_to_kernel_pmm(frame_allocator & new_allocator) -> void
{
- auto first_free_frame = boostrap_allocator.next_free_frame;
+ auto first_free_frame = bootstrap_allocator.next_free_frame;
auto number_of_free_frames = number_of_simulated_frames - first_free_frame;
new_allocator.release_many({frame{first_free_frame}, number_of_free_frames});
}
@@ -77,10 +77,16 @@ namespace kapi::memory
auto init() -> void
{
kernel::tests::simulated_memory::init(simulate_memory_size);
- set_frame_allocator(boostrap_allocator);
+ set_frame_allocator(bootstrap_allocator);
set_page_mapper(test_mapper);
init_pmm(simulate_memory_size / frame::size, handoff_to_kernel_pmm);
}
+ auto reset() -> void
+ {
+ kernel::tests::simulated_memory::reset();
+ bootstrap_allocator.next_free_frame = 0;
+ }
+
} // namespace kapi::memory \ No newline at end of file