diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-19 16:36:51 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-19 16:37:54 -0400 |
commit | 472ec944d2ed81d0304cc6cac80946a6a44776be (patch) | |
tree | f6cae641c143a0b45bb289d9d9fc6145706025b0 /kernel/memory/memory.c | |
parent | set mmap limit (diff) | |
download | comus-472ec944d2ed81d0304cc6cac80946a6a44776be.tar.gz comus-472ec944d2ed81d0304cc6cac80946a6a44776be.tar.bz2 comus-472ec944d2ed81d0304cc6cac80946a6a44776be.zip |
UEFI and republicans
Diffstat (limited to 'kernel/memory/memory.c')
-rw-r--r-- | kernel/memory/memory.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/memory/memory.c b/kernel/memory/memory.c index 2d560f4..6bdfe38 100644 --- a/kernel/memory/memory.c +++ b/kernel/memory/memory.c @@ -2,6 +2,7 @@ #include <comus/memory.h> #include <comus/asm.h> #include <comus/mboot.h> +#include <comus/efi.h> #include <lib.h> #include "memory.h" @@ -68,7 +69,8 @@ void memory_init(void) { struct memory_map mmap; if (mboot_get_mmap(&mmap)) - panic("failed to load memory map"); + if (efi_get_mmap(&mmap)) + panic("failed to load memory map"); kernel_mem_ctx = &_kernel_mem_ctx; kernel_mem_ctx->pml4 = kernel_pml4; @@ -79,4 +81,12 @@ void memory_init(void) virtaddr_init(kernel_mem_ctx->virtctx); physalloc_init(&mmap); sti(); + + // identiy map EFI functions + for (size_t i = 0; i < mmap.entry_count; i++) { + struct memory_segment *seg = &mmap.entries[i]; + if (seg->type != SEG_TYPE_EFI) + continue; + kmapaddr((void *)seg->addr, (void *)seg->addr, seg->len, F_WRITEABLE); + } } |