aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/include
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-07-14 15:39:09 +0000
committerFelix Morgner <felix.morgner@ost.ch>2025-07-14 15:39:09 +0000
commite7eedd234954509f4f5ec52b2d62cbc4a1723936 (patch)
tree7cff3076bf88ad07ed50066a6e7a2f8795dd27f0 /arch/x86_64/include
parent22fbbf849497c32f5b237ab70e9ed8aef63e54cf (diff)
downloadteachos-e7eedd234954509f4f5ec52b2d62cbc4a1723936.tar.xz
teachos-e7eedd234954509f4f5ec52b2d62cbc4a1723936.zip
libs: begin extraction of kernel std
Diffstat (limited to 'arch/x86_64/include')
-rw-r--r--arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp5
-rw-r--r--arch/x86_64/include/arch/memory/heap/user_heap_allocator.hpp5
-rw-r--r--arch/x86_64/include/arch/memory/multiboot/elf_symbols_section.hpp41
-rw-r--r--arch/x86_64/include/arch/memory/multiboot/info.hpp64
-rw-r--r--arch/x86_64/include/arch/memory/multiboot/memory_map.hpp53
-rw-r--r--arch/x86_64/include/arch/memory/multiboot/reader.hpp19
-rw-r--r--arch/x86_64/include/arch/stl/mutex.hpp60
7 files changed, 39 insertions, 208 deletions
diff --git a/arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp b/arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp
index 582b4af..bbbad19 100644
--- a/arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp
+++ b/arch/x86_64/include/arch/memory/heap/linked_list_allocator.hpp
@@ -3,7 +3,8 @@
#include "arch/memory/heap/heap_allocator.hpp"
#include "arch/memory/heap/memory_block.hpp"
-#include "arch/stl/mutex.hpp"
+
+#include <kstd/mutex.hpp>
namespace teachos::arch::memory::heap
{
@@ -112,7 +113,7 @@ namespace teachos::arch::memory::heap
std::size_t size) -> void;
memory_block * first; ///< First free entry in our memory.
- stl::mutex mutex; ///< Mutex to ensure only one thread calls allocate or deallocate at once.
+ kstd::mutex mutex; ///< Mutex to ensure only one thread calls allocate or deallocate at once.
};
} // namespace teachos::arch::memory::heap
diff --git a/arch/x86_64/include/arch/memory/heap/user_heap_allocator.hpp b/arch/x86_64/include/arch/memory/heap/user_heap_allocator.hpp
index 6b1b7bb..3b47f15 100644
--- a/arch/x86_64/include/arch/memory/heap/user_heap_allocator.hpp
+++ b/arch/x86_64/include/arch/memory/heap/user_heap_allocator.hpp
@@ -2,8 +2,9 @@
#define TEACHOS_ARCH_X86_64_MEMORY_HEAP_USER_HEAP_ALLOCATOR_HPP
#include "arch/memory/heap/memory_block.hpp"
-#include "arch/stl/mutex.hpp"
+// #include <kstd/mutex.hpp>
+#include <kstd/mutex.hpp>
#include <optional>
namespace teachos::arch::memory::heap
@@ -141,7 +142,7 @@ namespace teachos::arch::memory::heap
std::size_t size) -> void;
memory_block * first = {}; ///< First free entry in our memory.
- stl::mutex mutex = {}; ///< Mutex to ensure only one thread calls allocate or deallocate at once.
+ kstd::mutex mutex = {}; ///< Mutex to ensure only one thread calls allocate or deallocate at once.
};
} // namespace teachos::arch::memory::heap
diff --git a/arch/x86_64/include/arch/memory/multiboot/elf_symbols_section.hpp b/arch/x86_64/include/arch/memory/multiboot/elf_symbols_section.hpp
index 0a25ca9..348c159 100644
--- a/arch/x86_64/include/arch/memory/multiboot/elf_symbols_section.hpp
+++ b/arch/x86_64/include/arch/memory/multiboot/elf_symbols_section.hpp
@@ -1,9 +1,9 @@
#ifndef TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_ELF_SYBOLS_SECTION_HPP
#define TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_ELF_SYBOLS_SECTION_HPP
-#include "arch/memory/multiboot/info.hpp"
-#include "arch/stl/container.hpp"
-#include "arch/stl/contiguous_pointer_iterator.hpp"
+// #include "arch/memory/multiboot/info.hpp"
+// #include "arch/stl/container.hpp"
+// #include "arch/stl/contiguous_pointer_iterator.hpp"
#include <bitset>
#include <cstdint>
@@ -145,24 +145,25 @@ namespace teachos::arch::memory::multiboot
auto is_null() const -> bool;
};
- /**
- * @brief Defines an entry in the multi_boot_tag array of the multi_boot_info struct, of type
- * multi_boot_tag_type::ELF_SECTIONS.
- *
- * @note The first section in the sections array will always be INACTIVE, there can only ever be one DYNAMIC section
- * and only either one DYNAMIC_SYMBOL_TABLE or SYMBOL_TABLE.
- */
- struct elf_symbols_section_header
- {
- tag info; ///< Basic multi_boot_tag information.
- uint32_t number_of_sections; ///< Number of sections in the sections array.
- uint32_t entry_size; ///< Size of each entry in the sections array.
- uint32_t section_index; ///< Index to the string table used for symbol names.
- std::byte end; ///< Marks the end of the tag, used to mark the beginning of any additional data.
- ///< contained in the section, to ensure byte alignment is actually 4 byte.
- };
+ // /**
+ // * @brief Defines an entry in the multi_boot_tag array of the multi_boot_info struct, of type
+ // * multi_boot_tag_type::ELF_SECTIONS.
+ // *
+ // * @note The first section in the sections array will always be INACTIVE, there can only ever be one DYNAMIC
+ // section
+ // * and only either one DYNAMIC_SYMBOL_TABLE or SYMBOL_TABLE.
+ // */
+ // struct elf_symbols_section_header
+ // {
+ // tag info; ///< Basic multi_boot_tag information.
+ // uint32_t number_of_sections; ///< Number of sections in the sections array.
+ // uint32_t entry_size; ///< Size of each entry in the sections array.
+ // uint32_t section_index; ///< Index to the string table used for symbol names.
+ // std::byte end; ///< Marks the end of the tag, used to mark the beginning of any additional data.
+ // ///< contained in the section, to ensure byte alignment is actually 4 byte.
+ // };
- using elf_section_header_container = stl::container<stl::contiguous_pointer_iterator<elf_section_header>>;
+ // using elf_section_header_container = stl::container<stl::contiguous_pointer_iterator<elf_section_header>>;
} // namespace teachos::arch::memory::multiboot
diff --git a/arch/x86_64/include/arch/memory/multiboot/info.hpp b/arch/x86_64/include/arch/memory/multiboot/info.hpp
deleted file mode 100644
index a9abf12..0000000
--- a/arch/x86_64/include/arch/memory/multiboot/info.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_INFO_HPP
-#define TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_INFO_HPP
-
-#include <cstdint>
-
-namespace teachos::arch::memory::multiboot
-{
- /**
- * @brief Defines all possible types a multiboot2 tag structure can have.
- *
- * @note See
- * https://github.com/rhboot/grub2/blob/fedora-39/include/multiboot2.h for more information on the structure of the
- * tag headers and see https://github.com/rhboot/grub2/blob/fedora-39/include/multiboot.h for more information on the
- * actual header contents and their following data.
- */
- enum struct tag_type : uint32_t
- {
- END, ///< Signals final tag for the multiboot2 information structure.
- CMDLINE, ///< Contains the command line string.
- BOOT_LOADER_NAME, ///< Contains the name of the boot loader booting the kernel.
- MODULE, ///< Indicates the boot module which was loaded along the kernel image.
- BASIC_MEMORY_INFO, ///< Contains the amount of lower (0MB start address) and upper memory (1MB start address).
- BOOTDEV, ///< Indicates which BIOS disk device the hoot loader has loaded the OS image from.
- MEMORY_MAP, ///< Describes the memory layout of the system with individual areas and their flags.
- VBE_INFO, ///< Includes information to access and utilize the device GPU.
- FRAMEBUFFER, ///< VBE framebuffer information.
- ELF_SECTIONS, ///< Includes list of all section headers from the loaded ELF kernel.
- APM_INFO, ///< Advanced Power Management information.
- EFI32, ///< EFI 32 bit system table pointer.
- EFI64, ///< EFI 64 bit system table pointer.
- SMBIOS, ///< Contains copy of all Sytem Management BIOS tables.
- ACPI_OLD, ///< Contains copy of RSDP as defined per ACPI1.0 specification.
- ACPI_NEW, ///< Contains copy of RSDP as defined per ACPI2.0 or later specification.
- NETWORK, ///< Contains network information specified specified as DHCP.
- EFI_MEMORY_MAP, ///< Contains EFI memory map.
- EFI_BS_NOT_TERMINATED, ///< Indicated ExitBootServies wasn't called.
- EFI32_IMAGE_HANDLE, ///< EFI 32 bit image handle pointer.
- EFI64_IMAGE_HANDLE, ///< EFI 64 bit imae handle pointer.
- LOAD_BASE_ADDRESS ///< Contains image load base physical address.
- };
-
- /**
- * @brief Basic structure that every entry in the multi_boot_tag array of the multi_boot_info struct has to begin
- * with.
- */
- struct tag
- {
- tag_type type; ///< Specific type of this multi_boot_tag entry, used to differentiate handling.
- uint32_t size; ///< Total size of this multi_boot_tag entry with all fields of the actual type.
- };
-
- /**
- * @brief Basic structure the multiboot_information_pointer points too and which contains all information of
- * multiboot2 in the tags array of different types. The start as well as the content has to be 8 byte aligned.
- */
- struct info_header
- {
- uint32_t total_size; ///< Total size of all multiboot::tags and their data.
- alignas(8) struct tag tags; ///< Specific tags.
- };
-
-} // namespace teachos::arch::memory::multiboot
-
-#endif // TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_INFO_HPP
diff --git a/arch/x86_64/include/arch/memory/multiboot/memory_map.hpp b/arch/x86_64/include/arch/memory/multiboot/memory_map.hpp
deleted file mode 100644
index 68394c8..0000000
--- a/arch/x86_64/include/arch/memory/multiboot/memory_map.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_MEMORY_MAP_HPP
-#define TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_MEMORY_MAP_HPP
-
-#include "arch/memory/multiboot/info.hpp"
-#include "arch/stl/container.hpp"
-#include "arch/stl/contiguous_pointer_iterator.hpp"
-
-#include <cstdint>
-
-namespace teachos::arch::memory::multiboot
-{
- /**
- * @brief Defines all memory area types possible that the memory region can be in.
- */
- enum struct memory_area_type : uint32_t
- {
- AVAILABLE = 1, ///< Region is available for use by the OS.
- RESERVED, ///< Region is reserved by firmware or bootloader and should not be used by OS.
- ACPI_AVAILABLE, ///< Region is reclaimable by OS after ACPI event.
- RESERVED_HIBERNATION, ///< Region is used for Non-volatile Storage (NVS).
- DEFECTIVE ///< Region is defective or unusable.
- };
-
- /**
- * @brief Defines an entry in the entries array of the memory_map struct.
- *
- * @note Last value needs to be padded, because the size of the entry needs to be
- * exactly 24 bytes and not one byte more.
- */
- struct memory_area
- {
- uint64_t base_address; ///< Base address the memory region starts at.
- uint64_t area_length; ///< Size of the memory region, added to base_address results in the final address.
- alignas(8) memory_area_type type; ///< Specific type of memory the region can contain.
- };
-
- /**
- * @brief Defines an entry in the multi_boot_tag array of the multi_boot_info struct, of type
- * multi_boot_tag_type::MEMORY_MAP.
- */
- struct memory_map_header
- {
- tag info; ///< Basic multi_boot_tag information.
- uint32_t entry_size; ///< Size of each entry in the memory_area array. Guaranteed multiple of 8.
- uint32_t entry_version; ///< Version of the entries, currently 0.
- struct memory_area entries; ///< Specific memory regions.
- };
-
- using memory_area_container = stl::container<stl::contiguous_pointer_iterator<memory_area>>;
-
-} // namespace teachos::arch::memory::multiboot
-
-#endif // TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_MEMORY_MAP_HPP
diff --git a/arch/x86_64/include/arch/memory/multiboot/reader.hpp b/arch/x86_64/include/arch/memory/multiboot/reader.hpp
index bda0c43..c5464cb 100644
--- a/arch/x86_64/include/arch/memory/multiboot/reader.hpp
+++ b/arch/x86_64/include/arch/memory/multiboot/reader.hpp
@@ -1,10 +1,14 @@
#ifndef TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_READER_HPP
#define TEACHOS_ARCH_X86_64_MEMORY_MULTIBOOT_READER_HPP
+// #include "arch/memory/multiboot/elf_symbols_section.hpp"
+// #include "arch/memory/multiboot/memory_map.hpp"
+
#include "arch/memory/multiboot/elf_symbols_section.hpp"
-#include "arch/memory/multiboot/memory_map.hpp"
#include <cstdint>
+#include <multiboot2/information.hpp>
+#include <span>
namespace teachos::arch::memory::multiboot
{
@@ -14,12 +18,13 @@ namespace teachos::arch::memory::multiboot
*/
struct memory_information
{
- std::size_t kernel_start; ///< Start address of the kernel code in memory.
- std::size_t kernel_end; ///< End address of the kernel code in memory.
- elf_section_header_container sections; ///< Contains non-owning pointers to all kernel sections.
- std::size_t multiboot_start; ///< Start address of the multiboot code in memory.
- std::size_t multiboot_end; ///< End address of the multiboot code in memory.
- memory_area_container areas; ///< Contains non-owning pointers to all memory areas.
+ std::size_t kernel_start; ///< Start address of the kernel code in memory.
+ std::size_t kernel_end; ///< End address of the kernel code in memory.
+ multiboot2::elf_symbols; ///< Contains non-owning pointers to all kernel sections.
+ std::size_t multiboot_start; ///< Start address of the multiboot code in memory.
+ std::size_t multiboot_end; ///< End address of the multiboot code in memory.
+ // std::sp
+ // memory_area_container areas; ///< Contains non-owning pointers to all memory areas.
};
/**
diff --git a/arch/x86_64/include/arch/stl/mutex.hpp b/arch/x86_64/include/arch/stl/mutex.hpp
deleted file mode 100644
index a7d297d..0000000
--- a/arch/x86_64/include/arch/stl/mutex.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef TEACHOS_ARCH_X86_64_STL_MUTEX_HPP
-#define TEACHOS_ARCH_X86_64_STL_MUTEX_HPP
-
-#include <atomic>
-
-namespace teachos::arch::stl
-{
- /**
- * @brief Custom mutex implementation, that simply wraps an atomic boolean to keep track if the mutex is already in
- * use by another thread or not.
- */
- struct mutex
- {
- /**
- * @brief Defaulted constructor.
- */
- mutex() = default;
-
- /**
- * @brief Defaulted destructor.
- */
- ~mutex() = default;
-
- /**
- * @brief Deleted copy constructor.
- */
- mutex(const mutex &) = delete;
-
- /**
- * @brief Deleted assignment operator.
- */
- mutex & operator=(const mutex &) = delete;
-
- /**
- * @brief Lock the mutex (blocks for as long as it is not available).
- */
- [[gnu::section(".stl_text")]]
- auto lock() -> void;
-
- /**
- * @brief Try to lock the mutex (non-blocking).
- *
- * @return True if lock has been acquired and false otherwise.
- */
- [[gnu::section(".stl_text")]]
- auto try_lock() -> bool;
-
- /**
- * @brief Unlock the mutex.
- */
- [[gnu::section(".stl_text")]]
- auto unlock() -> void;
-
- private:
- std::atomic<bool> locked = {false}; // Atomic boolean to track if mutex is locked or not.
- };
-
-} // namespace teachos::arch::stl
-
-#endif // TEACHOS_ARCH_X86_64_STL_MUTEX_HPP