From 153b2db4c50e775c4163ef0ed9164e77ab686826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergiusz=20Baza=C5=84ski?= Date: Tue, 30 Oct 2012 12:34:20 +0100 Subject: [PATCH] More refactoring. --- Kernel/include/Tier0/paging.h | 2 +- Kernel/src/Tier0/kmain.c | 12 ++++++------ Kernel/src/Tier0/paging.c | 10 +++++----- Kernel/src/Tier0/system.c | 2 ++ 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Kernel/include/Tier0/paging.h b/Kernel/include/Tier0/paging.h index 83de554..c336c75 100644 --- a/Kernel/include/Tier0/paging.h +++ b/Kernel/include/Tier0/paging.h @@ -96,7 +96,7 @@ void paging_temp_page_set_physical(u64 Physical); // paging functions. This should be only used by major parts of the kernel, for // example to map some data structures to physical memory, or if physmem_read // calls would be too slow. -void paging_minivmm_setup(u64 Start, u64 End); +void paging_minivmm_setup(void); u64 paging_minivmm_allocate(void); // A simple page map call. This does no checks! Triple faults ahoy. diff --git a/Kernel/src/Tier0/kmain.c b/Kernel/src/Tier0/kmain.c index 77270bc..d17420f 100644 --- a/Kernel/src/Tier0/kmain.c +++ b/Kernel/src/Tier0/kmain.c @@ -20,9 +20,6 @@ #include "Tier0/panic.h" //#include "Tier0/prng.h" -extern u64 _start; -extern u64 _end; - void kmain_newstack(void); // Real kernel entry point, called from loader @@ -61,12 +58,15 @@ void kmain(u32 LoadContextAddress) system_parse_load_context(LoadContext); kprintf("[i] Booting via %s.\n", LoadContext->LoaderName); kprintf("[i] Memory available: %uk.\n", system_get_memory_upper()); - kprintf("[i] Kernel physical: %x-%x.\n", LoadContext->KernelPhysicalStart, LoadContext->KernelPhysicalEnd); + kprintf("[i] Kernel physical: %x-%x.\n", system_get_kernel_physical_start(), + system_get_kernel_physical_start() + system_get_kernel_size()); kprintf("[i] Loader physical: %x-%x.\n", LoadContext->LoaderPhysicalStart, LoadContext->LoaderPhysicalEnd); - kprintf("[i] Kernel virtual: %x-%x.\n", &_start, &_end); + kprintf("[i] Kernel virtual: %x-%x.\n", system_get_kernel_virtual_start(), + system_get_kernel_virtual_start() + system_get_kernel_size()); paging_temp_page_setup(); - paging_minivmm_setup((u64)&_end, SYSTEM_KERNEL_VIRTUAL + 511 * 0x1000); + //paging_minivmm_setup((u64)&_end, SYSTEM_KERNEL_VIRTUAL + 511 * 0x1000); + paging_minivmm_setup(); // Let's create a new kernel stack u64 StackVirtual = paging_minivmm_allocate(); kprintf("[i] New kernel stack 0x%x\n", StackVirtual); diff --git a/Kernel/src/Tier0/paging.c b/Kernel/src/Tier0/paging.c index 97f053e..c15d135 100644 --- a/Kernel/src/Tier0/paging.c +++ b/Kernel/src/Tier0/paging.c @@ -100,12 +100,12 @@ void paging_set_ml4(u64 ML4Physical) __asm volatile ( "mov %%rax, %%cr3\n" :: "a" (ML4Physical)); } -void paging_minivmm_setup(u64 Start, u64 End) +void paging_minivmm_setup(void) { - g_MiniVMM.Start = Start; - g_MiniVMM.End = End; - g_MiniVMM.Top = Start; - kprintf("[i] MiniVMM: %x - %x.\n", Start, End); + g_MiniVMM.Start = system_get_kernel_virtual_start() + system_get_kernel_size(); + g_MiniVMM.End = system_get_kernel_virtual_start() + 511 * 0x1000; + g_MiniVMM.Top = g_MiniVMM.Start; + kprintf("[i] MiniVMM: %x - %x.\n", g_MiniVMM.Start, g_MiniVMM.End); } u64 paging_minivmm_allocate(void) diff --git a/Kernel/src/Tier0/system.c b/Kernel/src/Tier0/system.c index ffacb90..5a06010 100644 --- a/Kernel/src/Tier0/system.c +++ b/Kernel/src/Tier0/system.c @@ -56,6 +56,8 @@ void system_parse_load_context(T_LOAD_CONTEXT *LoadContext) g_SystemInfo.KernelPhysicalStart = LoadContext->KernelPhysicalStart; g_SystemInfo.KernelSize = LoadContext->KernelPhysicalEnd - LoadContext->KernelPhysicalStart; g_SystemInfo.KernelVirtualStart = SYSTEM_KERNEL_VIRTUAL; + ASSERT(SYSTEM_KERNEL_VIRTUAL == (u64)&_start); + ASSERT((SYSTEM_KERNEL_VIRTUAL + g_SystemInfo.KernelSize) == (u64)&_end); // Bootloader name from Multiboot header if ((Flags >> 9) & 1)