mirror of
https://github.com/Tom-on64/kern.git
synced 2026-11-03 18:22:22 +00:00
PMM finally works??
This commit is contained in:
+1
-1
@@ -22,7 +22,7 @@ void kmain(void* ptr, uint32_t magic) {
|
|||||||
tty_puts("kern.\n\n");
|
tty_puts("kern.\n\n");
|
||||||
|
|
||||||
// Memory manager init
|
// Memory manager init
|
||||||
//pmm_init();
|
pmm_init();
|
||||||
//vmm_init();
|
//vmm_init();
|
||||||
|
|
||||||
gdt_init();
|
gdt_init();
|
||||||
|
|||||||
+18
-4
@@ -4,7 +4,7 @@
|
|||||||
#include <pmm.h>
|
#include <pmm.h>
|
||||||
|
|
||||||
// Bitmap & helpers
|
// Bitmap & helpers
|
||||||
uint32_t* bitmap = NULL;
|
uint32_t* bitmap;
|
||||||
#define SET_BLOCK(_b) bitmap[(_b) / 32] |= (1 << ((_b) % 32))
|
#define SET_BLOCK(_b) bitmap[(_b) / 32] |= (1 << ((_b) % 32))
|
||||||
#define USET_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)
|
#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;
|
size_t totalmem = (bootloader.memLower + bootloader.memUpper) * 1024;
|
||||||
maxBlocks = totalmem / PMM_BS;
|
maxBlocks = totalmem / PMM_BS;
|
||||||
usedBlocks = maxBlocks;
|
usedBlocks = maxBlocks;
|
||||||
|
bitmap = NULL;
|
||||||
|
|
||||||
// TODO:
|
// Find enough space for the bitmap
|
||||||
bitmap = (uint32_t*)NULL;
|
struct boot_memmap* mmap;
|
||||||
memset(bitmap, 0, maxBlocks / PMM_BPB);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user