diff options
Diffstat (limited to 'arch/x86_64/src')
| -rw-r--r-- | arch/x86_64/src/memory.cpp | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/arch/x86_64/src/memory.cpp b/arch/x86_64/src/memory.cpp index a31627b..105d69b 100644 --- a/arch/x86_64/src/memory.cpp +++ b/arch/x86_64/src/memory.cpp @@ -3,22 +3,33 @@ #include "kern/error.hpp" #include "x86_64/boot/boot.hpp" +#include "x86_64/boot/ld.hpp" +#include "x86_64/memory/address.hpp" +#include "x86_64/memory/region_allocator.hpp" #include <multiboot2/information.hpp> #include <atomic> -// extern "C" teachos::arch::asm_pointer<multiboot2::information_view> multiboot_information_pointer; - namespace teachos::arch::memory { + using namespace x86_64::memory; + using namespace x86_64::boot; + namespace { auto constinit is_initialized = std::atomic_flag{}; - // auto create_memory_information() -> x86_64::memory::region_allocator::memory_information { + auto create_memory_information() -> region_allocator::memory_information + { + auto const & mbi = multiboot_information_pointer.get(); + auto map = mbi->memory_map(); - // }; + return {std::make_pair(physical_address{&_start_linear}, physical_address{&_end_linear}), + std::make_pair(physical_address{std::bit_cast<std::byte *>(&mbi)}, + physical_address{std::bit_cast<std::byte *>(&mbi) + mbi->size_bytes()}), + map}; + }; } // namespace auto init() -> void @@ -34,8 +45,10 @@ namespace teachos::arch::memory teachos::panic("[x86_64] No memory map available."); } - // auto mem_info = x86_64::memory::region_allocator::memory_information{}; - // auto allocator = x86_64::memory::region_allocator{mem_info}; + auto mem_info = create_memory_information(); + auto allocator = region_allocator{mem_info}; + + static_cast<void>(allocator); // kernel::cpu::set_cr0_bit(kernel::cpu::cr0_flags::WRITE_PROTECT); // kernel::cpu::set_efer_bit(kernel::cpu::efer_flags::NXE); |
