diff options
author | Freya Murphy <freya@freyacat.org> | 2025-05-06 12:34:48 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-05-06 12:35:41 -0400 |
commit | 40bfcbb2cf8a39e58ec19b21956caaf4685c9b8b (patch) | |
tree | 3e2b5aa933b9f06ad1ed7aca2f63b0d79d36fa02 /kernel/mboot/module.c | |
parent | remove sym lookup (diff) | |
download | comus-40bfcbb2cf8a39e58ec19b21956caaf4685c9b8b.tar.gz comus-40bfcbb2cf8a39e58ec19b21956caaf4685c9b8b.tar.bz2 comus-40bfcbb2cf8a39e58ec19b21956caaf4685c9b8b.zip |
terrible hack to not overwrite mboot data
Diffstat (limited to 'kernel/mboot/module.c')
-rw-r--r-- | kernel/mboot/module.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/kernel/mboot/module.c b/kernel/mboot/module.c index bf15eca..03c5147 100644 --- a/kernel/mboot/module.c +++ b/kernel/mboot/module.c @@ -1,4 +1,4 @@ -#include "comus/memory.h" +#include <comus/memory.h> #include <comus/mboot.h> #include "mboot.h" @@ -16,7 +16,7 @@ struct multiboot_tag_module { static void *mapped_addr = NULL; size_t initrd_len; -void *mboot_get_initrd(size_t *len) +void *mboot_get_initrd_phys(size_t *len) { struct multiboot_tag_module *mod; void *tag, *phys; @@ -36,11 +36,21 @@ void *mboot_get_initrd(size_t *len) phys = (void *)(uintptr_t)mod->mod_start; initrd_len = mod->mod_end - mod->mod_start; + *len = initrd_len; + return phys; +} + +void *mboot_get_initrd(size_t *len) +{ + // get phys + void *phys = mboot_get_initrd_phys(len); + if (phys == NULL) + return NULL; + // map addr mapped_addr = kmapaddr(phys, NULL, initrd_len, F_PRESENT | F_WRITEABLE); if (mapped_addr == NULL) return NULL; - *len = initrd_len; return mapped_addr; } |