From c97b395c1e6311c1171c9e87cb4e26ca129394dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergiusz=20Baza=C5=84ski?= Date: Sun, 8 Jul 2012 11:19:00 +0200 Subject: [PATCH] Fixed stuff to work with high kernel address. --- Kernel/include/Tier0/paging.h | 2 +- Kernel/src/Tier0/kmain.c | 5 +---- Kernel/src/Tier0/paging.c | 5 +++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Kernel/include/Tier0/paging.h b/Kernel/include/Tier0/paging.h index aa297af..815f216 100644 --- a/Kernel/include/Tier0/paging.h +++ b/Kernel/include/Tier0/paging.h @@ -87,7 +87,7 @@ void paging_kernel_initialize(u64 KernelVirtualStart, u64 KernelPhysicalStart, u void paging_temp_page_setup(T_LOAD_CONTEXT *LoadContext); const inline u64 paging_temp_page_get_virtual(void) { - return 0xFF000000 + 511 * 0x1000; + return 0xFFFFFFFF80000000 + 511 * 0x1000; } void paging_temp_page_set_physical(u64 Physical); diff --git a/Kernel/src/Tier0/kmain.c b/Kernel/src/Tier0/kmain.c index 766edb3..afb4a97 100644 --- a/Kernel/src/Tier0/kmain.c +++ b/Kernel/src/Tier0/kmain.c @@ -43,7 +43,6 @@ void kmain(u32 LoadContextAddress) kprintf("[i] Welcome to Cucumber (x86-64)!\n"); kprintf("[i] %s\n\n", CUCUMBER_VERION); kprintf("[i] Load Context @%x \n", LoadContext); - for(;;){} if (!LoadContext->MultibootUsed) PANIC("No Multiboot header provided by loader!"); @@ -68,8 +67,7 @@ void kmain(u32 LoadContextAddress) paging_kernel_initialize((u64)&_start, LoadContext->KernelPhysicalStart, LoadContext->KernelPhysicalEnd - LoadContext->KernelPhysicalStart); paging_temp_page_setup(LoadContext); - paging_minivmm_setup((u64)&_end, 0xFF000000 + 511 * 4096); - + paging_minivmm_setup((u64)&_end, 0xFFFFFFFF80000000 + 511 * 0x1000); // Let's create a new kernel stack u64 StackVirtual = paging_minivmm_allocate(); kprintf("[i] New kernel stack 0x%x\n", StackVirtual); @@ -81,7 +79,6 @@ void kmain(u32 LoadContextAddress) // (and prevent gcc from inlinin the function call) void (*kmain_newstack_ptr)() = kmain_newstack; kmain_newstack_ptr(); - for(;;){} } void kmain_newstack(void) diff --git a/Kernel/src/Tier0/paging.c b/Kernel/src/Tier0/paging.c index 9ff5d2a..dc28e5c 100644 --- a/Kernel/src/Tier0/paging.c +++ b/Kernel/src/Tier0/paging.c @@ -30,7 +30,7 @@ T_PAGING_ML4 *paging_get_ml4(void) void paging_temp_page_setup(T_LOAD_CONTEXT *LoadContext) { // Try using page 511 (last) from kernel table - u64 PageVirtual = 0xFF000000 + 511 * 4096; + u64 PageVirtual = 0xFFFFFFFF80000000 + 511 * 4096; u64 MaxMapped = 4096 * 512; // first 2Mib by loader u64 KernelSize = LoadContext->KernelPhysicalEnd - LoadContext->KernelPhysicalStart; @@ -75,7 +75,7 @@ void paging_temp_page_set_physical(u64 Physical) // TODO: check if smaller than maxphyaddr g_KernelPaging.TempPage->Physical = Physical >> 12; - __asm__ volatile("invlpg %0" :: "m"(*(u32 *)g_KernelPaging.TempPageVirtual)); + __asm__ volatile("invlpg %0" :: "m"(*(u64 *)g_KernelPaging.TempPageVirtual)); } void paging_kernel_initialize(u64 KernelVirtualStart, u64 KernelPhysicalStart, u64 KernelSize) @@ -113,6 +113,7 @@ void paging_minivmm_setup(u64 Start, u64 End) g_MiniVMM.Start = Start; g_MiniVMM.End = End; g_MiniVMM.Top = Start; + kprintf("[i] MiniVMM: %x - %x.\n", Start, End); } u64 paging_minivmm_allocate(void)