Initialize kernel info

This commit is contained in:
Alex Kotov 2021-12-18 03:45:22 +05:00
parent a1b9dadd1f
commit 06935b2e53
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
3 changed files with 37 additions and 15 deletions

View File

@ -4,9 +4,26 @@
static bool cmdline_terminated(const char *s);
void kernel_info_initialize(struct Kernel_Info *const kinfo)
{
void kernel_info_initialize(
struct Kernel_Info *const kinfo,
const size_t offset,
const size_t size,
const size_t phys_base,
const size_t virt_base,
const size_t stack_top
) {
memset(kinfo, 0, sizeof(*kinfo));
kinfo->kernel_offset = offset;
kinfo->kernel_size = size;
kinfo->kernel_phys_base = phys_base;
kinfo->kernel_virt_base = virt_base;
kinfo->kernel_phys_limit = phys_base + size - 1;
kinfo->kernel_virt_limit = virt_base + size - 1;
kinfo->kernel_stack_top = stack_top;
}
bool kernel_info_validate(const struct Kernel_Info *const kinfo)

View File

@ -57,7 +57,15 @@ struct Kernel_Info {
size_t kernel_stack_top;
};
void kernel_info_initialize(struct Kernel_Info *kinfo);
void kernel_info_initialize(
struct Kernel_Info *kinfo,
size_t offset,
size_t size,
size_t phys_base,
size_t virt_base,
size_t stack_top
);
bool kernel_info_validate(const struct Kernel_Info *kinfo);
#ifdef __cplusplus

View File

@ -41,20 +41,17 @@ void main(
panic("Multiboot 2 info is invalid.");
}
kernel_info_initialize(&kinfo);
kernel_info_initialize(
&kinfo,
(size_t)&_kernel_offset,
(size_t)&_kernel_size,
(size_t)&_kernel_phys_base,
(size_t)&_kernel_virt_base,
(size_t)&_kernel_stack_top
);
KernAux_PFA_initialize(&pfa);
kinfo.kernel_offset = (unsigned long)&_kernel_offset;
kinfo.kernel_size = (unsigned long)&_kernel_size;
kinfo.kernel_phys_base = (unsigned long)&_kernel_phys_base;
kinfo.kernel_virt_base = (unsigned long)&_kernel_virt_base;
kinfo.kernel_phys_limit = kinfo.kernel_phys_base + kinfo.kernel_size - 1;
kinfo.kernel_virt_limit = kinfo.kernel_virt_base + kinfo.kernel_size - 1;
kinfo.kernel_stack_top = (unsigned long)&_kernel_stack_top;
{
const char *const cmdline =
KernAux_Multiboot2_boot_cmd_line(multiboot2_info);