#include #include #include #include "../lib/elf.h" struct efi_memory_map { struct memory_range buffer; UINTN size; UINTN key; UINTN descsize; UINT32 descver; }; struct efi_video_data { struct memory_range buffer; UINT32 width; UINT32 height; UINT32 pitch; EFI_GRAPHICS_PIXEL_FORMAT format; EFI_PIXEL_BITMASK mask; }; struct efi_boot_data { struct efi_memory_map memory_map; struct efi_video_data video_data; void *acpi_rsdp; unsigned long acpi_version; }; struct efi_loader_image kernel_image = { .path = L"\\adasoft\\sophia\\kernel.os" }; static struct efi_boot_data boot_data; // TODO: split relocation code out into library EFI_STATUS kc_main(struct efi_loader_interface *interface) { // 1. load kernel and boot modules into memory // 2. generate page tables for kernel and boot modules // 2. gather boot data, store as type SystemMemoryType // 3. exit boot services // 5. ??????????? EFI_STATUS status; if (!interface) { return EFI_INVALID_PARAMETER; } if (!EFI_ERROR((status = interface->image_open(&kernel_image))) && !EFI_ERROR((status = interface->image_alloc(&kernel_image))) && !EFI_ERROR((status = interface->image_load(&kernel_image)))) { (void)boot_data; } __asm__ volatile ( "cli\n\t" "hlt\n\t" ); return status; }