PMM finally works??

This commit is contained in:
2025-04-03 15:40:01 +02:00
parent dd7e621640
commit 5d7a4d790f
2 changed files with 19 additions and 5 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ void kmain(void* ptr, uint32_t magic) {
tty_puts("kern.\n\n");
// Memory manager init
//pmm_init();
pmm_init();
//vmm_init();
gdt_init();
+18 -4
View File
@@ -4,7 +4,7 @@
#include <pmm.h>
// Bitmap & helpers
uint32_t* bitmap = NULL;
uint32_t* bitmap;
#define SET_BLOCK(_b) bitmap[(_b) / 32] |= (1 << ((_b) % 32))
#define USET_BLOCK(_b) bitmap[(_b) / 32] &= ~(1 << ((_b) % 32))
#define TEST_BLOCK(_b) ((bitmap[(_b) % 32] & (1 << ((_b) % 32))) ? 1 : 0)
@@ -17,10 +17,24 @@ int pmm_init(void) {
size_t totalmem = (bootloader.memLower + bootloader.memUpper) * 1024;
maxBlocks = totalmem / PMM_BS;
usedBlocks = maxBlocks;
bitmap = NULL;
// TODO:
bitmap = (uint32_t*)NULL;
memset(bitmap, 0, maxBlocks / PMM_BPB);
// Find enough space for the bitmap
struct boot_memmap* mmap;
for (size_t i = 0; i < bootloader.memmapLen; i++) {
mmap = &bootloader.memmap[i];
if (mmap->type != BOOT_MMAP_AVAILABLE ||
mmap->size < maxBlocks / PMM_BPB) continue;
bitmap = (uint32_t*)mmap->base;
break;
}
if (bitmap == NULL) return 1;
// Set all blocks as used
memset(bitmap, 1, maxBlocks / PMM_BPB);
return 0;
}