summaryrefslogtreecommitdiff
path: root/loader/loader_efi.h
diff options
context:
space:
mode:
Diffstat (limited to 'loader/loader_efi.h')
-rw-r--r--loader/loader_efi.h22
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);