Cucumber/Kernel/src/Tier0/kmain.c

101 lines
2.7 KiB
C
Raw Normal View History

2011-02-21 11:23:58 +00:00
#include "types.h"
#include "Tier0/kstdio.h"
2011-06-28 11:15:42 +00:00
/*#include "Tier0/gdt.h"
2011-02-21 11:23:58 +00:00
#include "Tier0/paging.h"
2011-02-22 17:09:58 +00:00
#include "Tier0/acpi.h"
#include "Tier0/interrupts.h"
2011-02-23 03:12:36 +00:00
#include "Tier0/ps2.h"
#include "Tier0/system.h"
#include "Tier0/pic.h"
2011-03-13 17:32:05 +00:00
#include "Tier0/kbd_layout.h"
#include "Tier0/physical_alloc.h"
2011-03-14 16:49:22 +00:00
#include "Tier0/heap.h"
#include "Tier0/cpp.h"
2011-03-16 07:33:27 +00:00
#include "Tier0/exceptions.h"
2011-04-01 19:51:14 +00:00
#include "Tier0/panic.h"
2011-06-28 11:15:42 +00:00
#include "Tier0/prng.h"*/
2011-06-28 11:15:42 +00:00
// Real kernel entry point, called from loader
void kmain(u32 current_line, u32 cursor_x, u32 cursor_y)
2011-02-20 22:38:15 +00:00
{
2011-04-04 16:25:20 +00:00
kstdio_init();
2011-06-28 11:15:42 +00:00
kstdio_set_globals(current_line, cursor_x, cursor_y);
//kclear();
kprintf("\n _ \n"
2011-02-22 17:09:58 +00:00
" ___ _ _ ___ _ _ _____| |_ ___ ___ \n"
" | _| | | _| | | | . | -_| _|\n"
" |___|___|___|___|_|_|_|___|___|_| \n\n");
2011-06-28 11:15:42 +00:00
kprintf("[i] Welcome to Cucumber (x86-64)!\n");
//kprintf("%x %x %x\n", current_line, cursor_x, cursor_y);
for (;;) {}
/*if (Magic != 0x2BADB002)
2011-02-20 22:38:15 +00:00
{
kprintf("[e] Fatal! Boot via incompatible bootloader.\n");
return;
}
2011-03-18 14:09:49 +00:00
2011-02-21 16:29:53 +00:00
paging_init_simple();
gdt_create_flat();
physmem_init();
2011-02-23 03:12:36 +00:00
system_parse_multiboot_header(MultibootHeader);
//Add kernel memory as reserved.
physmem_mark_as_used(0);
physmem_mark_as_used(1);
2011-02-23 03:12:36 +00:00
kprintf("[i] Booting via %s.\n", system_get_bootloader_name());
kprintf("[i] Memory available: %uk.\n", system_get_memory_upper());
2011-02-22 17:09:58 +00:00
u32 RSDPAddress = acpi_find_rsdp();
if (RSDPAddress == 0)
{
kprintf("[e] Fatal! ACPI not found.\n");
return;
}
interrupts_init_simple();
2011-03-16 07:33:27 +00:00
exceptions_init_simple();
pic_init(0, 0);
ps2_init_simple();
2011-03-13 17:32:05 +00:00
kbd_layout_set_default();
__asm__ volatile("sti");
2011-03-13 17:32:05 +00:00
kprintf("[i] Hardware interrupts are now enabled.\n");
2011-03-14 16:49:22 +00:00
heap_init_simple();
2011-04-03 16:49:04 +00:00
kprintf("[i] Initializing PRNG...\n");
u16 RLow, RHigh;
__asm__ __volatile__ ("rdtsc" : "=a" (RLow), "=d" (RHigh));
u32 R = (RHigh << 16) | RLow;
kprintf("[i] %i\n", R);
kseed(R);
for (u32 Rl = 0; Rl < R; Rl++)
{
krand();
}
2011-04-01 19:51:14 +00:00
2011-04-03 16:49:04 +00:00
// Let's create a new kernel stack
u32 StackPhysical = physmem_allocate_page() * 1024 * 4;
paging_map_kernel_page(0xA0000000, StackPhysical);
2011-04-01 19:51:14 +00:00
// And now let's use it and forget ebp because we can.
2011-04-03 16:49:04 +00:00
__asm__ volatile("mov %0, %%esp" : : "r" (0xA0000000 + 4095));
2011-04-01 19:51:14 +00:00
2011-04-03 16:49:04 +00:00
// This automagically creates a new usable stack frame
2011-06-28 11:15:42 +00:00
kmain_newstack();*/
2011-04-01 19:51:14 +00:00
}
2011-06-28 11:15:42 +00:00
/*void kmain_newstack(void)
2011-04-01 19:51:14 +00:00
{
kprintf("[i] Now using real stack...\n");
cpp_call_ctors();
cpp_start_ckernel();
kprintf("[i] Returned from Tier1, sleeping forever.\n");
LOOPFOREVER;
2011-06-28 11:15:42 +00:00
}*/