Move PMM and VMM initialization into MemoryManager::init

This commit is contained in:
apio 2022-09-25 17:38:17 +02:00
parent 0858db73bd
commit a078a11dde
3 changed files with 17 additions and 9 deletions

View File

@ -7,6 +7,8 @@
namespace MemoryManager
{
void init();
void* get_mapping(void* physicalAddress, int flags = MAP_READ_WRITE);
void release_mapping(void* mapping);

View File

@ -40,8 +40,7 @@ void Init::early_init()
framebuffer0.init((void*)bootboot.fb_ptr, bootboot.fb_type, bootboot.fb_scanline, bootboot.fb_width,
bootboot.fb_height);
PMM::init();
kernelVMM.init();
MemoryManager::init();
InitRD::init();

View File

@ -9,6 +9,12 @@
#include "memory/PMM.h"
#include "memory/VMM.h"
void MemoryManager::init()
{
PMM::init();
kernelVMM.init();
}
void* MemoryManager::get_mapping(void* physicalAddress, int flags)
{
uint64_t virtualAddress = KernelHeap::request_virtual_page();
@ -40,6 +46,8 @@ void* MemoryManager::get_unaligned_mapping(void* physicalAddress, int flags)
void* MemoryManager::get_unaligned_mappings(void* physicalAddress, uint64_t count, int flags)
{
if (!count) return 0;
if (count == 1) return get_unaligned_mapping(physicalAddress, flags);
uint64_t offset = (uint64_t)physicalAddress % 4096;
uint64_t virtualAddress = KernelHeap::request_virtual_pages(count);
if (!virtualAddress)
@ -67,13 +75,8 @@ void MemoryManager::release_unaligned_mapping(void* mapping)
void MemoryManager::release_unaligned_mappings(void* mapping, uint64_t count)
{
if (!count)
{
#ifdef MM_DEBUG
kwarnln("weird... got asked to free 0 pages of virtual memory");
#endif
return;
}
if (!count) return;
if (count == 1) return release_unaligned_mapping(mapping);
uint64_t offset = (uint64_t)mapping % 4096;
KernelHeap::free_virtual_pages((uint64_t)mapping - offset, count);
for (uint64_t i = 0; i < count; i++) { kernelVMM.unmap(((uint64_t)mapping - offset) + (i * 4096)); }
@ -117,6 +120,8 @@ void MemoryManager::release_page(void* page)
void* MemoryManager::get_pages(uint64_t count, int flags)
{
if (!count) return 0;
if (count == 1) return get_page(flags);
#ifdef MM_DEBUG
kdbgln("allocating several pages (%ld)", count);
#endif
@ -152,6 +157,8 @@ void* MemoryManager::get_pages(uint64_t count, int flags)
void MemoryManager::release_pages(void* pages, uint64_t count)
{
if (!count) return;
if (count == 1) return release_page(pages);
#ifdef MM_DEBUG
kdbgln("releasing several pages (%ld)", count);
#endif