summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2021-05-08 00:41:02 +0000
committerAda Christine <adachristine18@gmail.com>2021-05-08 00:41:02 +0000
commite9297816a8d59990cd7e73c34b9ad637df6fa14a (patch)
tree6c2fa1e332a1b7cb4f6df30d04265d9ec698dcb8
parent0a281099e571cc40d0632d32c4ec005c32b4d66d (diff)
minor boot data changes
-rw-r--r--api/loader/data_efi.h14
-rw-r--r--loader/loader_efi.c16
2 files changed, 17 insertions, 13 deletions
diff --git a/api/loader/data_efi.h b/api/loader/data_efi.h
index f159de6..e5d1dd4 100644
--- a/api/loader/data_efi.h
+++ b/api/loader/data_efi.h
@@ -6,13 +6,14 @@
#include <stddef.h>
-#define EfiUserMemoryType (EFI_MEMORY_TYPE)0x80000000
-#define SystemMemoryType EfiUserMemoryType | 0x01
+#define UserMemoryType ((EFI_MEMORY_TYPE)0x80000000)
+#define SystemMemoryType (UserMemoryType|0x01)
enum efi_boot_data_type
{
MEMORY_MAP_DATA,
FRAMEBUFFER_DATA,
+ ACPI_DATA,
};
struct efi_memory_map_data
@@ -35,11 +36,14 @@ struct efi_framebuffer_data
EFI_GRAPHICS_PIXEL_FORMAT pxformat;
};
+struct efi_acpi_data
+{
+ void *rsdp;
+};
+
struct efi_boot_data
{
- EFI_SYSTEM_TABLE *system_table;
struct efi_memory_map_data *memory_map;
struct efi_framebuffer_data *framebuffer;
- void *acpi_rsdp;
+ struct efi_acpi_data *acpi;
};
-
diff --git a/loader/loader_efi.c b/loader/loader_efi.c
index 617e924..35daedc 100644
--- a/loader/loader_efi.c
+++ b/loader/loader_efi.c
@@ -9,7 +9,7 @@ static struct system_image *kernel_image = NULL;
static struct efi_memory_map_data *get_memory_map_data(void);
static struct efi_framebuffer_data *get_framebuffer_data(void);
-static void *get_acpi_rsdp(void);
+static void *get_acpi_data(void);
noreturn static void enter_kernel()
{
@@ -26,8 +26,8 @@ noreturn static void enter_kernel()
DATA_PAGE_TYPE);
data.system_table = e_st;
+ data.acpi = get_acpi_data();
data.framebuffer = get_framebuffer_data();
- data.acpi_rsdp = get_acpi_rsdp();
data.memory_map = get_memory_map_data();
EFI_STATUS status = e_bs->ExitBootServices(e_image_handle,
@@ -162,18 +162,18 @@ static struct efi_framebuffer_data *get_framebuffer_data(void)
return framebuffer;
}
-static void *get_acpi_rsdp(void)
+static void *get_acpi_data(void)
{
+ struct efi_acpi_data *acpi = efi_allocate(sizeof(*acpi));
+
EFI_GUID acpi_20_guid = ACPI_20_TABLE_GUID;
- for (UINTN i = 0; i < e_st->NumberOfTableEntries; i++)
+ for (UINTN i = 0; acpi && i < e_st->NumberOfTableEntries; i++)
{
if (!CompareGuid(&acpi_20_guid, &e_st->ConfigurationTable[i].VendorGuid))
{
- Print(L"acpi rsdp: 0x%16.0lx\r\n",
- e_st->ConfigurationTable[i].VendorTable);
-
- return e_st->ConfigurationTable[i].VendorTable;
+ acpi->rsdp = e_st->ConfigurationTable[i].VendorTable;
+ return acpi;
}
}