mirror of
https://github.com/usatiuk/ficus.git
synced 2025-10-29 00:27:52 +01:00
35 lines
1.2 KiB
C++
35 lines
1.2 KiB
C++
//
|
|
// Created by Stepan Usatiuk on 26.11.2023.
|
|
//
|
|
|
|
#include "limine_modules.hpp"
|
|
|
|
#include "assert.h"
|
|
#include "globals.hpp"
|
|
#include "paging.hpp"
|
|
#include "string.h"
|
|
|
|
volatile struct limine_module_request module_request = {
|
|
.id = LIMINE_MODULE_REQUEST,
|
|
.revision = 0};
|
|
|
|
limine_file saved_modules[max_saved_modules];
|
|
char saved_modules_names[max_saved_modules][max_saved_module_name] __attribute__((aligned(4096)));
|
|
unsigned saved_modules_size = 0;
|
|
|
|
void limine_modules_remap() {
|
|
for (int i = 0; i < module_request.response->module_count; i++) {
|
|
assert2(i < max_saved_modules, "Too many modules");
|
|
|
|
auto &mod = (*module_request.response->modules)[i];
|
|
|
|
saved_modules_size++;
|
|
saved_modules[i] = (*module_request.response->modules)[i];
|
|
|
|
memcpy(saved_modules_names[i], mod.path, max_saved_module_name);
|
|
|
|
for (size_t i = 0; i < PAGE_ROUND_UP(mod.size) / PAGE_SIZE; i++) {
|
|
KERN_AddressSpace->map((void *) ((uintptr_t) mod.address + i * PAGE_SIZE), (void *) (BOOT_AddressSpace->virt2real(reinterpret_cast<void *>((uintptr_t) mod.address + i * PAGE_SIZE))), PAGE_RW);
|
|
}
|
|
}
|
|
} |