Move args structure allocation to a function in memory.cpp
This commit is contained in:
@@ -94,34 +94,14 @@ bootloader_main_uefi(uefi::system_table *st, console &con)
|
|||||||
|
|
||||||
memory::init_pointer_fixup(bs, rs);
|
memory::init_pointer_fixup(bs, rs);
|
||||||
|
|
||||||
void *acpi_table = hw::find_acpi_table(st);
|
kernel::args::header *args =
|
||||||
|
memory::allocate_args_structure(bs, max_modules);
|
||||||
|
|
||||||
kernel::args::header *args = nullptr;
|
args->magic = kernel::args::magic;
|
||||||
kernel::args::module *modules = nullptr;
|
args->version = kernel::args::version;
|
||||||
|
args->runtime_services = rs;
|
||||||
|
args->acpi_table = hw::find_acpi_table(st);
|
||||||
|
|
||||||
{
|
|
||||||
status_line status(L"Setting up kernel args memory");
|
|
||||||
|
|
||||||
size_t args_size =
|
|
||||||
sizeof(kernel::args::header) + // The header itself
|
|
||||||
max_modules * sizeof(kernel::args::module); // The module structures
|
|
||||||
|
|
||||||
try_or_raise(
|
|
||||||
bs->allocate_pool(
|
|
||||||
uefi::memory_type::loader_data,
|
|
||||||
args_size,
|
|
||||||
reinterpret_cast<void**>(&args)),
|
|
||||||
L"Could not allocate argument memory");
|
|
||||||
|
|
||||||
modules = reinterpret_cast<kernel::args::module*>(args + 1);
|
|
||||||
|
|
||||||
args->magic = kernel::args::magic;
|
|
||||||
args->version = kernel::args::version;
|
|
||||||
args->runtime_services = rs;
|
|
||||||
args->acpi_table = reinterpret_cast<void*>(acpi_table);
|
|
||||||
args->modules = modules;
|
|
||||||
args->num_modules = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
status_line status(L"Loading modules");
|
status_line status(L"Loading modules");
|
||||||
@@ -132,7 +112,7 @@ bootloader_main_uefi(uefi::system_table *st, console &con)
|
|||||||
status_line status(L"Loading initrd into memory");
|
status_line status(L"Loading initrd into memory");
|
||||||
status_line::warn(L"I can't even");
|
status_line::warn(L"I can't even");
|
||||||
|
|
||||||
kernel::args::module &initrd = modules[args->num_modules++];
|
kernel::args::module &initrd = args->modules[args->num_modules++];
|
||||||
initrd.type = kernel::args::type::initrd;
|
initrd.type = kernel::args::type::initrd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -233,5 +233,33 @@ memory_virtualize(EFI_RUNTIME_SERVICES *runsvc, struct memory_map *map)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
kernel::args::header *
|
||||||
|
allocate_args_structure(uefi::boot_services *bs, size_t max_modules)
|
||||||
|
{
|
||||||
|
status_line status(L"Setting up kernel args memory");
|
||||||
|
|
||||||
|
kernel::args::header *args = nullptr;
|
||||||
|
|
||||||
|
size_t args_size =
|
||||||
|
sizeof(kernel::args::header) + // The header itself
|
||||||
|
max_modules * sizeof(kernel::args::module); // The module structures
|
||||||
|
|
||||||
|
try_or_raise(
|
||||||
|
bs->allocate_pool(
|
||||||
|
uefi::memory_type::loader_data,
|
||||||
|
args_size,
|
||||||
|
reinterpret_cast<void**>(&args)),
|
||||||
|
L"Could not allocate argument memory");
|
||||||
|
|
||||||
|
bs->set_mem(args, args_size, 0);
|
||||||
|
|
||||||
|
args->modules =
|
||||||
|
reinterpret_cast<kernel::args::module*>(args + 1);
|
||||||
|
args->num_modules = 0;
|
||||||
|
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace boot
|
} // namespace boot
|
||||||
} // namespace memory
|
} // namespace memory
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include <uefi/boot_services.h>
|
#include <uefi/boot_services.h>
|
||||||
#include <uefi/runtime_services.h>
|
#include <uefi/runtime_services.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "kernel_args.h"
|
||||||
|
|
||||||
namespace boot {
|
namespace boot {
|
||||||
namespace memory {
|
namespace memory {
|
||||||
@@ -9,6 +10,8 @@ namespace memory {
|
|||||||
void init_pointer_fixup(uefi::boot_services *bs, uefi::runtime_services *rs);
|
void init_pointer_fixup(uefi::boot_services *bs, uefi::runtime_services *rs);
|
||||||
void mark_pointer_fixup(void **p);
|
void mark_pointer_fixup(void **p);
|
||||||
|
|
||||||
|
kernel::args::header * allocate_args_structure(uefi::boot_services *bs, size_t max_modules);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
extern const EFI_MEMORY_TYPE memtype_kernel;
|
extern const EFI_MEMORY_TYPE memtype_kernel;
|
||||||
extern const EFI_MEMORY_TYPE memtype_data;
|
extern const EFI_MEMORY_TYPE memtype_data;
|
||||||
|
|||||||
Reference in New Issue
Block a user