diff options
Diffstat (limited to 'loader/loader_efi.h')
| -rw-r--r-- | loader/loader_efi.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/loader/loader_efi.h b/loader/loader_efi.h index 17c58cf..4ce3098 100644 --- a/loader/loader_efi.h +++ b/loader/loader_efi.h @@ -1,14 +1,17 @@ #pragma once +#include <kernel/memory/range.h> +#include <kernel/memory/paging.h> + +#include <elf/elf64.h> + #include <efi.h> #include <efilib.h> +#include <stdbool.h> #include <stddef.h> #include <stdnoreturn.h> -#include <kernel/memory/range.h> -#include <kernel/memory/paging.h> - enum page_type { INVALID_PAGE_TYPE = 0x0, @@ -17,6 +20,14 @@ enum page_type DATA_PAGE_TYPE = PAGE_PR|PAGE_WR|PAGE_NX }; +struct system_image +{ + struct memory_range buffer; + EFI_FILE_PROTOCOL *file; + Elf64_Ehdr ehdr; + Elf64_Phdr *phdrs; +}; + extern EFI_SYSTEM_TABLE *e_st; extern EFI_BOOT_SERVICES *e_bs; extern EFI_RUNTIME_SERVICES *e_rt; @@ -44,5 +55,10 @@ void *paging_map_pages(void *vaddr, void *paging_map_range(void *vaddr, struct memory_range *range, enum page_type type); + +struct system_image *system_image_open(CHAR16 *path); +bool system_image_load(struct system_image *image); +void system_image_map(struct system_image *image); + void loader_main(void); |
