aboutsummaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-04-02 08:48:00 +0200
committerMarcel Braun <marcel.braun@ost.ch>2026-04-02 08:48:00 +0200
commit0c01a95325b26151ff3c9a70142f5dc83ff7d53f (patch)
tree9bf034f544ae773b653554a54edfce232f835754 /kernel/include
parent022d3e872de9c5a6a52c67f74af13706552330c0 (diff)
parent3eb680cf5bcef626505cac82820996d8db4170d7 (diff)
downloadteachos-0c01a95325b26151ff3c9a70142f5dc83ff7d53f.tar.xz
teachos-0c01a95325b26151ff3c9a70142f5dc83ff7d53f.zip
Merge branch 'fmorgner/develop-SA-FS26/kernel-bht' into 'develop-BA-FS26'
Add experimental support for kernel tests See merge request teachos/kernel!20
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/kernel/test_support/bump_frame_allocator.hpp32
-rw-r--r--kernel/include/kernel/test_support/cpu.hpp18
-rw-r--r--kernel/include/kernel/test_support/log_buffer.hpp32
-rw-r--r--kernel/include/kernel/test_support/memory.hpp11
-rw-r--r--kernel/include/kernel/test_support/page_mapper.hpp33
-rw-r--r--kernel/include/kernel/test_support/simulated_memory.hpp36
6 files changed, 162 insertions, 0 deletions
diff --git a/kernel/include/kernel/test_support/bump_frame_allocator.hpp b/kernel/include/kernel/test_support/bump_frame_allocator.hpp
new file mode 100644
index 0000000..5203565
--- /dev/null
+++ b/kernel/include/kernel/test_support/bump_frame_allocator.hpp
@@ -0,0 +1,32 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_BUMP_FRAME_ALLOCATOR_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_BUMP_FRAME_ALLOCATOR_HPP
+
+#include "kapi/memory.hpp"
+
+#include <cstddef>
+#include <optional>
+#include <utility>
+
+namespace kernel::tests
+{
+
+ struct bump_frame_allocator : kapi::memory::frame_allocator
+ {
+ auto mark_used(kapi::memory::frame) -> void override {}
+
+ auto allocate_many(std::size_t count) noexcept
+ -> std::optional<std::pair<kapi::memory::frame, std::size_t>> override
+ {
+ auto start = next_free_frame;
+ next_free_frame += count;
+ return std::pair{kapi::memory::frame{start}, count};
+ }
+
+ auto release_many(std::pair<kapi::memory::frame, std::size_t>) -> void override {}
+
+ std::size_t next_free_frame{};
+ };
+
+} // namespace kernel::tests
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/test_support/cpu.hpp b/kernel/include/kernel/test_support/cpu.hpp
new file mode 100644
index 0000000..5445473
--- /dev/null
+++ b/kernel/include/kernel/test_support/cpu.hpp
@@ -0,0 +1,18 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_CPU_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_CPU_HPP
+
+#include <stdexcept>
+
+namespace kernel::tests::cpu
+{
+
+ struct halt : std::runtime_error
+ {
+ halt()
+ : std::runtime_error{"CPU halt requested!"}
+ {}
+ };
+
+} // namespace kernel::tests::cpu
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/test_support/log_buffer.hpp b/kernel/include/kernel/test_support/log_buffer.hpp
new file mode 100644
index 0000000..581b32f
--- /dev/null
+++ b/kernel/include/kernel/test_support/log_buffer.hpp
@@ -0,0 +1,32 @@
+#ifndef KERNEL_TEST_SUPPORT_LOG_BUFFER_HPP
+#define KERNEL_TEST_SUPPORT_LOG_BUFFER_HPP
+
+#include <string>
+#include <vector>
+
+namespace kernel::tests::log_buffer
+{
+
+ //! Append a message to the testing log buffer.
+ //!
+ //! @param message The message to append.
+ auto append(std::string const & message) -> void;
+
+ //! Clear the testing log buffer.
+ auto clear() -> void;
+
+ //! Get the testing log buffer as a single string.
+ //!
+ //! @return The testing log buffer as a single string.
+ auto flat_messages() -> std::string;
+
+ //! Get the testing log buffer.
+ //!
+ //! @note Messages may be split across multiple entries if they are longer than the internal kernel print buffer size.
+ //!
+ //! @return The testing log buffer.
+ auto messages() -> std::vector<std::string> const &;
+
+} // namespace kernel::tests::log_buffer
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/test_support/memory.hpp b/kernel/include/kernel/test_support/memory.hpp
new file mode 100644
index 0000000..c6b7449
--- /dev/null
+++ b/kernel/include/kernel/test_support/memory.hpp
@@ -0,0 +1,11 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_MEMORY_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_MEMORY_HPP
+
+#include "kapi/memory.hpp"
+
+namespace kernel::tests::memory
+{
+ auto heap_base() -> kapi::memory::linear_address;
+}
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/test_support/page_mapper.hpp b/kernel/include/kernel/test_support/page_mapper.hpp
new file mode 100644
index 0000000..a40aa2e
--- /dev/null
+++ b/kernel/include/kernel/test_support/page_mapper.hpp
@@ -0,0 +1,33 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_PAGE_MAPPER_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_PAGE_MAPPER_HPP
+
+#include "kapi/memory.hpp"
+
+#include "kernel/test_support/simulated_memory.hpp"
+
+#include <kstd/units>
+
+#include <cstddef>
+#include <cstdint>
+#include <unordered_map>
+
+namespace kernel::tests
+{
+
+ struct page_mapper : kapi::memory::page_mapper
+ {
+ explicit page_mapper(kstd::units::bytes memory_size);
+
+ auto map(kapi::memory::page page, kapi::memory::frame frame, flags) -> std::byte * override;
+
+ auto unmap(kapi::memory::page page) -> void override;
+
+ auto try_unmap(kapi::memory::page page) noexcept -> bool override;
+
+ kernel::tests::simulated_memory memory;
+ std::unordered_map<std::uint64_t, kapi::memory::frame> page_mappings;
+ };
+
+} // namespace kernel::tests
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/test_support/simulated_memory.hpp b/kernel/include/kernel/test_support/simulated_memory.hpp
new file mode 100644
index 0000000..9a391d8
--- /dev/null
+++ b/kernel/include/kernel/test_support/simulated_memory.hpp
@@ -0,0 +1,36 @@
+#ifndef TEACHOS_KERNEL_TEST_SUPPORT_SIMULATED_MEMORY_HPP
+#define TEACHOS_KERNEL_TEST_SUPPORT_SIMULATED_MEMORY_HPP
+
+#include "kapi/memory.hpp"
+
+#include <kstd/units>
+
+#include <cstddef>
+
+namespace kernel::tests
+{
+
+ struct simulated_memory
+ {
+ explicit simulated_memory(kstd::units::bytes size);
+
+ ~simulated_memory();
+
+ auto clear() -> void;
+
+ [[nodiscard]] auto ram_base() noexcept -> std::byte *;
+ [[nodiscard]] auto ram_base() const noexcept -> std::byte const *;
+ [[nodiscard]] auto heap_base() const noexcept -> kapi::memory::linear_address;
+ [[nodiscard]] auto heap_size() const noexcept -> kstd::units::bytes;
+ [[nodiscard]] auto memory_descriptor() const noexcept -> int;
+
+ private:
+ int m_memory_descriptor{};
+ kstd::units::bytes m_size{0};
+ std::byte * m_physical_base{nullptr};
+ std::byte * m_virtual_base{nullptr};
+ };
+
+} // namespace kernel::tests
+
+#endif \ No newline at end of file