Move args structure allocation to a function in memory.cpp

This commit is contained in:
Justin C. Miller
2020-02-24 02:18:14 -08:00
parent 36b3ad8154
commit 1a223d6ef5
3 changed files with 38 additions and 27 deletions

View File

@@ -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;
kernel::args::module *modules = nullptr;
{
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->magic = kernel::args::magic;
args->version = kernel::args::version; args->version = kernel::args::version;
args->runtime_services = rs; args->runtime_services = rs;
args->acpi_table = reinterpret_cast<void*>(acpi_table); args->acpi_table = hw::find_acpi_table(st);
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;
} }
} }

View File

@@ -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

View File

@@ -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;