Use memory region map to discover the memory

This commit is contained in:
2025-12-08 01:28:09 +01:00
parent 807f067101
commit 0de8cca8bb
9 changed files with 431 additions and 26 deletions

View File

@@ -77,10 +77,8 @@ void mm_map_page(struct page_dir *pd, uptr_t vaddr, uptr_t paddr, uint32_t flags
if (!(pd->pd[pd_idx] & PF_PRESENT)) {
pt = (volatile uint32_t *)bba_alloc();
if (pt == 0) {
if (flags & PF_LOCK)
sl_unlock(&pd->sl);
dbgf("mm_map_page(): run out of BBA memory to alloc a PD\n");
return;
goto done;
}
for (usize_t i = 0; i < PAGE_SIZE/sizeof(uint32_t); i++)
@@ -94,6 +92,7 @@ void mm_map_page(struct page_dir *pd, uptr_t vaddr, uptr_t paddr, uint32_t flags
pt[pt_idx] = (paddr & ~(PAGE_SIZE - 1)) | (flags & ~PF_LOCK);
done:
if (flags & PF_LOCK)
sl_unlock(&pd->sl);
}
@@ -107,9 +106,7 @@ void mm_unmap_page(struct page_dir *pd, uptr_t vaddr, uint32_t flags) {
volatile uint32_t *pt;
if (!(pd->pd[pd_idx] & PF_PRESENT)) {
if (flags & PF_LOCK)
sl_unlock(&pd->sl);
return;
goto done;
} else {
uptr_t pt_phys = pd->pd[pd_idx] & ~(PAGE_SIZE - 1);
pt = (volatile uint32_t *)(pt_phys + VIRT_BASE);
@@ -119,6 +116,7 @@ void mm_unmap_page(struct page_dir *pd, uptr_t vaddr, uint32_t flags) {
__asm__ volatile ("invlpg (%0)" :: "r"(vaddr) : "memory");
done:
if (flags & PF_LOCK)
sl_unlock(&pd->sl);
}