From e2272caf4e8f6429a190b7ff95741149f069b6f2 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Sun, 31 Jul 2016 13:14:13 +0200 Subject: [PATCH] Prepare some space for early transfer --- kernel/include/early_memory.hpp | 21 +++++++++++++++++++++ kernel/src/boot/boot_32.cpp | 4 ++++ 2 files changed, 25 insertions(+) create mode 100644 kernel/include/early_memory.hpp diff --git a/kernel/include/early_memory.hpp b/kernel/include/early_memory.hpp new file mode 100644 index 00000000..a2708c5c --- /dev/null +++ b/kernel/include/early_memory.hpp @@ -0,0 +1,21 @@ +//======================================================================= +// Copyright Baptiste Wicht 2013-2016. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +//======================================================================= + +/* + * This header contains addresses where the init stage of the kernel writes information for the later stage + */ + +#ifndef EARLY_MEMORY_H +#define EARLY_MEMORY_H + +// The number of MiB used by the kernel +constexpr const uint32_t kernel_mib = 0x90000; //4 bytes (32 bits) + +// The address of the kernel +constexpr const uint32_t kernel_address = 0x100000; //1Mib aligned size (kernel_mib) + +#endif diff --git a/kernel/src/boot/boot_32.cpp b/kernel/src/boot/boot_32.cpp index b0f09d69..9f19c5ab 100644 --- a/kernel/src/boot/boot_32.cpp +++ b/kernel/src/boot/boot_32.cpp @@ -11,6 +11,7 @@ #include "kernel.hpp" #include "paging.hpp" #include "early_logging.hpp" +#include "early_memory.hpp" namespace { @@ -136,6 +137,9 @@ void pm_main(){ //Setup paging setup_paging(); + // TODO This will need to be computed from the init loader + *reinterpret_cast(kernel_mib) = 1; + //Enable long mode by setting the EFER.LME flag enable_long_mode();