Luna/kernel/src/init/Init.cpp

59 lines
1.4 KiB
C++
Raw Normal View History

2022-09-05 14:13:51 +00:00
#include "init/Init.h"
#include "assert.h"
#include "bootboot.h"
#include "cpu/CPU.h"
2022-09-19 15:06:08 +00:00
#include "init/InitRD.h"
2022-09-05 14:13:51 +00:00
#include "interrupts/Interrupts.h"
#include "io/Serial.h"
2022-09-15 16:42:59 +00:00
#include "log/Log.h"
#include "memory/RangeAllocator.h"
2022-09-06 11:49:17 +00:00
#include "memory/VMM.h"
2022-09-05 14:13:51 +00:00
#include "panic/hang.h"
2022-09-14 16:54:40 +00:00
#include "rand/Init.h"
#include "rand/Mersenne.h"
2022-09-10 16:42:40 +00:00
#include "render/Framebuffer.h"
2022-09-05 14:13:51 +00:00
#include "render/TextRenderer.h"
2022-09-15 16:42:59 +00:00
#include "std/string.h"
2022-09-05 14:13:51 +00:00
extern BOOTBOOT bootboot;
2022-09-15 16:42:59 +00:00
extern "C" char environment[4096];
2022-09-05 14:13:51 +00:00
2022-09-14 16:54:40 +00:00
uintptr_t __stack_chk_guard = 0xfeff34;
2022-09-05 14:13:51 +00:00
void Init::check_magic()
{
ASSERT(strncmp((char*)bootboot.magic, BOOTBOOT_MAGIC, 4) == 0);
}
void Init::disable_smp()
{
if (CPU::get_initial_apic_id() != bootboot.bspid) { hang(); }
return;
}
void Init::early_init()
{
Interrupts::disable();
asm volatile("cld");
2022-09-10 16:42:40 +00:00
framebuffer0.init((void*)bootboot.fb_ptr, bootboot.fb_type, bootboot.fb_scanline, bootboot.fb_width,
bootboot.fb_height);
kernelPMM.init_from_mmap();
2022-09-06 11:49:17 +00:00
kernelVMM.init();
2022-09-14 16:54:40 +00:00
2022-09-19 15:06:08 +00:00
InitRD::init();
ASSERT(TextRenderer::try_initialize());
2022-09-15 16:42:59 +00:00
if (strstr(environment, "quiet=1"))
{
KernelLog::toggle_log_level(LogLevel::DEBUG);
KernelLog::toggle_log_level(LogLevel::INFO);
}
else if (!strstr(environment, "verbose=1")) { KernelLog::toggle_log_level(LogLevel::DEBUG); }
2022-09-14 16:54:40 +00:00
Mersenne::init();
__stack_chk_guard = Mersenne::get();
2022-09-05 14:13:51 +00:00
}