Kernel: Move boot info declarations to a header file

Instead of manually redeclaring those variables in various files this
now adds a header file for them.
This commit is contained in:
Gunnar Beutner 2021-07-19 17:54:51 +02:00 committed by Andreas Kling
parent b4600f2996
commit dd42093b93
8 changed files with 53 additions and 51 deletions

23
Kernel/BootInfo.h Normal file
View file

@ -0,0 +1,23 @@
/*
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <Kernel/VirtualAddress.h>
extern "C" u8 const* start_of_prekernel_image;
extern "C" u8 const* end_of_prekernel_image;
extern "C" __attribute__((section(".boot_bss"))) FlatPtr kernel_base;
#if ARCH(X86_64)
extern "C" u32 gdt64ptr;
extern "C" u16 code64_sel;
extern "C" FlatPtr boot_pml4t;
#endif
extern "C" FlatPtr boot_pdpt;
extern "C" FlatPtr boot_pd0;
extern "C" FlatPtr boot_pd_kernel;
extern "C" FlatPtr boot_pd_kernel_pt1023;
extern "C" const char* kernel_cmdline;

View file

@ -1,30 +0,0 @@
/*
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Platform.h>
#include <Kernel/Multiboot.h>
namespace Kernel {
struct [[gnu::packed]] BootInfo {
u8 const* start_of_prekernel_image;
u8 const* end_of_prekernel_image;
FlatPtr kernel_base;
multiboot_info* multiboot_info_ptr;
#if ARCH(X86_64)
u32 gdt64ptr;
u16 code64_sel;
FlatPtr boot_pml4t;
#endif
FlatPtr boot_pdpt;
FlatPtr boot_pd0;
FlatPtr boot_pd_kernel;
FlatPtr boot_pd_kernel_pt1023;
char const* kernel_cmdline;
};
}

View file

@ -6,4 +6,30 @@
#pragma once
#ifdef __cplusplus
# include <Kernel/Multiboot.h>
#endif
#define MAX_KERNEL_SIZE 0x3000000
#ifdef __cplusplus
namespace Kernel {
struct [[gnu::packed]] BootInfo {
u8 const* start_of_prekernel_image;
u8 const* end_of_prekernel_image;
FlatPtr kernel_base;
multiboot_info* multiboot_info_ptr;
# if ARCH(X86_64)
u32 gdt64ptr;
u16 code64_sel;
FlatPtr boot_pml4t;
# endif
FlatPtr boot_pdpt;
FlatPtr boot_pd0;
FlatPtr boot_pd_kernel;
FlatPtr boot_pd_kernel_pt1023;
char const* kernel_cmdline;
};
}
#endif

View file

@ -8,7 +8,6 @@
#include <AK/Types.h>
#include <Kernel/Multiboot.h>
#include <Kernel/Prekernel/BootInfo.h>
#include <Kernel/Prekernel/Prekernel.h>
#include <Kernel/VirtualAddress.h>
#include <LibC/elf.h>

View file

@ -9,15 +9,12 @@
#include <AK/Platform.h>
#ifdef __cplusplus
# include <AK/Types.h>
# include <Kernel/BootInfo.h>
#endif
#define READONLY_AFTER_INIT __attribute__((section(".ro_after_init")))
#define UNMAP_AFTER_INIT NEVER_INLINE __attribute__((section(".unmap_after_init")))
#ifdef __cplusplus
extern "C" FlatPtr kernel_base;
#endif
#define KERNEL_PD_END (kernel_base + 0x31000000)
#define KERNEL_PT1024_BASE (kernel_base + 0x3FE00000)
#define KERNEL_QUICKMAP_PT (KERNEL_PT1024_BASE + 0x6000)

View file

@ -7,6 +7,7 @@
#include <AK/Assertions.h>
#include <AK/Memory.h>
#include <AK/StringView.h>
#include <Kernel/BootInfo.h>
#include <Kernel/CMOS.h>
#include <Kernel/FileSystem/Inode.h>
#include <Kernel/Heap/kmalloc.h>
@ -22,8 +23,6 @@
#include <Kernel/VM/PhysicalRegion.h>
#include <Kernel/VM/SharedInodeVMObject.h>
extern u8* start_of_prekernel_image;
extern u8* end_of_prekernel_image;
extern u8* start_of_kernel_image;
extern u8* end_of_kernel_image;
extern FlatPtr start_of_kernel_text;
@ -36,9 +35,6 @@ extern FlatPtr end_of_unmap_after_init;
extern FlatPtr start_of_kernel_ksyms;
extern FlatPtr end_of_kernel_ksyms;
extern "C" void* boot_pd_kernel;
extern "C" void* boot_pd_kernel_pt1023;
extern multiboot_module_entry_t multiboot_copy_boot_modules_array[16];
extern size_t multiboot_copy_boot_modules_count;

View file

@ -31,14 +31,6 @@ RefPtr<PageDirectory> PageDirectory::find_by_cr3(FlatPtr cr3)
return cr3_map().get(cr3).value_or({});
}
extern "C" FlatPtr kernel_base;
#if ARCH(X86_64)
extern "C" void* boot_pml4t;
#endif
extern "C" void* boot_pdpt;
extern "C" void* boot_pd0;
extern "C" void* boot_pd_kernel;
UNMAP_AFTER_INIT PageDirectory::PageDirectory()
{
// make sure this starts in a new page directory to make MemoryManager::initialize_physical_pages() happy

View file

@ -10,6 +10,7 @@
#include <Kernel/ACPI/MultiProcessorParser.h>
#include <Kernel/Arch/PC/BIOS.h>
#include <Kernel/Arch/x86/Processor.h>
#include <Kernel/BootInfo.h>
#include <Kernel/Bus/PCI/Access.h>
#include <Kernel/Bus/PCI/Initializer.h>
#include <Kernel/Bus/USB/UHCIController.h>
@ -39,7 +40,7 @@
#include <Kernel/Net/NetworkTask.h>
#include <Kernel/Net/NetworkingManagement.h>
#include <Kernel/Panic.h>
#include <Kernel/Prekernel/BootInfo.h>
#include <Kernel/Prekernel/Prekernel.h>
#include <Kernel/Process.h>
#include <Kernel/ProcessExposed.h>
#include <Kernel/RTC.h>
@ -110,8 +111,6 @@ u8 const* start_of_prekernel_image;
u8 const* end_of_prekernel_image;
__attribute__((section(".boot_bss"))) FlatPtr kernel_base;
#if ARCH(X86_64)
extern "C" u32 gdt64ptr;
extern "C" u16 code64_sel;
FlatPtr boot_pml4t;
#endif
FlatPtr boot_pdpt;