From 139d91fdfcccae8ec1261298d6baaaae7f51cd57 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Sun, 11 Jan 2026 21:29:41 +0100 Subject: [PATCH] mark unavailable --- kernel/memory/pageframealloc.cc | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/kernel/memory/pageframealloc.cc b/kernel/memory/pageframealloc.cc index ff3ed50..98df968 100644 --- a/kernel/memory/pageframealloc.cc +++ b/kernel/memory/pageframealloc.cc @@ -4,9 +4,20 @@ #include "../debug/output.h" #include "../memory/config.h" +#include "../arch/lapic.h" +#include "../arch/apic.h" uint8_t PageFrameAllocator::bitmap[4294967296 / 4096 / 8]; +void mark_unavailable(uintptr_t start, uintptr_t end){ + DBG << "start: " << hex << start << " end: " << end << endl; + + for(uint64_t i = start; i < end; i += 4096){ + uint64_t pg = i/4096; + PageFrameAllocator::bitmap[pg/8] &= ~(1 << pg%8); + } +} + void PageFrameAllocator::init(){ Multiboot::Memory* memory_map_entry = Multiboot::getMemoryMap(); @@ -29,17 +40,17 @@ void PageFrameAllocator::init(){ memory_map_entry = memory_map_entry->getNext(); } - // kernel image - for(uint64_t i = (uint64_t)&___KERNEL_START___; i < (uint64_t)&___KERNEL_END___; i += 4096){ - uint64_t pg = i/4096; - bitmap[pg/8] &= ~(1 << pg%8); - } + DBG << "kernel image "; + mark_unavailable((uintptr_t)&___KERNEL_START___, (uintptr_t)&___KERNEL_END___); - // ISA adresses - for(uint64_t i = (uint64_t)0x00F00000; i < (uint64_t)0x00FFFFFF; i += 4096){ - uint64_t pg = i/4096; - bitmap[pg/8] &= ~(1 << pg%8); - } + DBG << "ISA adresses "; + mark_unavailable(0x00F00000, 0x00FFFFFF); + + DBG << "LAPIC "; + mark_unavailable(0xfee00000, 0xfee003f0); + + DBG << "IO APIC "; + mark_unavailable(APIC::getIOAPICAddress(), APIC::getIOAPICAddress()+0x10); stats(); }