52 lines
1.8 KiB
C
52 lines
1.8 KiB
C
#include <stivale.h>
|
|
#include <stdint.h>
|
|
#include <e9print.h>
|
|
#include <stddef.h>
|
|
|
|
static uint8_t stack[4096] = {0};
|
|
void stivale_main(struct stivale_struct *info);
|
|
|
|
__attribute__((section(".stivalehdr"), used))
|
|
struct stivale_header header = {
|
|
.stack = (uint64_t)(uintptr_t)stack + sizeof(stack),
|
|
.framebuffer_bpp = 0,
|
|
.framebuffer_width = 0,
|
|
.framebuffer_height = 0,
|
|
.flags = 1,
|
|
.entry_point = (uint64_t)(uintptr_t)stivale_main
|
|
};
|
|
|
|
void stivale_main(struct stivale_struct *info) {
|
|
// Print some info.
|
|
e9_puts("Stivale information passed to the kernel:");
|
|
e9_printf("Cmdline: %s", (char*)info->cmdline);
|
|
e9_printf("Memory map at %x with contents:", info->memory_map_addr);
|
|
|
|
struct stivale_mmap_entry *memmap = ((struct stivale_mmap_entry *)(info->memory_map_addr));
|
|
for (size_t i = 0; i < info->memory_map_entries; i++) {
|
|
struct stivale_mmap_entry e = memmap[i];
|
|
e9_printf("\tEntry %d: [%x+%x] %x", i, e.base, e.length, e.type);
|
|
}
|
|
|
|
e9_printf("Framebuffer at %x with specifics:", info->framebuffer_addr);
|
|
e9_printf("\tPitch: %d", info->framebuffer_pitch);
|
|
e9_printf("\tWidth: %d", info->framebuffer_width);
|
|
e9_printf("\tHeight: %d", info->framebuffer_height);
|
|
e9_printf("\tBPP: %d", info->framebuffer_bpp);
|
|
e9_printf("RSDP at %x", info->rsdp);
|
|
|
|
e9_printf("Module map at %x with modules:", info->modules);
|
|
struct stivale_module *modules = ((struct stivale_module *)(info->modules));
|
|
for (size_t i = 0; i < info->module_count; i++) {
|
|
struct stivale_module e = *modules;
|
|
e9_printf("\tModule %d: [%x+%x] %s", i, e.begin, e.end, e.string);
|
|
modules = (struct stivale_module *)e.next;
|
|
}
|
|
|
|
e9_printf("Epoch is %x", info->epoch);
|
|
e9_printf("Flags are %x", info->flags);
|
|
|
|
// Guru meditation.
|
|
for (;;);
|
|
}
|