bond/x64/src/c/kernel/k_entry.c
2016-05-24 00:10:32 -07:00

58 lines
2.0 KiB
C

#include "k_def.h"
#include "std_lib.h"
#include "k_lib_test.h"
#include "hal.h"
#include "hal_print.h"
#include "hal_io.h"
void SAPI kmain(multiboot_info_t *multiboot_info)
{
boot_info_t* boot_info = hal_init(multiboot_info);
hal_printf("Kernel Loaded at 0x%X. Size: %uB, %uKB\n\n",kernel_start,(kernel_end-kernel_start),(kernel_end-kernel_start)/1024);
linked_list_test();
avl_tree_test();
salloc_test();
if(boot_info->mem_info != NULL)
{
hal_printf("Installed Memory: %uB\n", boot_info->mem_info->mem_installed);
hal_printf("Useable Memory: %uB\n", boot_info->mem_info->mem_available);
for(int i = 0; i < linked_list_size(boot_info->mem_info->free_page_list); i++)
{
memory_descriptor_node_t* each_node = OBTAIN_STRUCT_ADDR(
linked_list_get(boot_info->mem_info->free_page_list,i),
list_node,
memory_descriptor_node_t);
hal_printf("Base Addr:0x%X Num of Pages:%u\n", each_node->base_addr, each_node->page_count);
}
}
if(boot_info->module_info != NULL)
{
hal_printf("\nNumber of Modules Loaded: %u", boot_info->module_info->module_count);
for (uint64_t i = 0; i <= boot_info->module_info->module_count; i++)
{
module_descriptor_node_t *module_descriptor = OBTAIN_STRUCT_ADDR(
linked_list_get(boot_info->module_info->module_list, (int) i),
list_node,
module_descriptor_node_t);
hal_printf("\nModule Name: %s\n Module Addr: 0x%X\n Module Size: %uB, %uKB\n", module_descriptor->name,
module_descriptor->base_addr, module_descriptor->size, module_descriptor->size / 1024);
};
}
// setup interrupt
for(uint64_t i = 0; i <= 21; i++)
{
hal_set_interrupt_handler(i, hal_interrupt_handler_wrapper);
}
// hal_enable_interrupt();
hal_printf("KRNL: Kernel task finished.");
hal_halt_cpu();
}