diff options
| author | Ada Christine <adachristine18@gmail.com> | 2021-05-08 00:41:02 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2021-05-08 00:41:02 +0000 |
| commit | e9297816a8d59990cd7e73c34b9ad637df6fa14a (patch) | |
| tree | 6c2fa1e332a1b7cb4f6df30d04265d9ec698dcb8 | |
| parent | 0a281099e571cc40d0632d32c4ec005c32b4d66d (diff) | |
minor boot data changes
| -rw-r--r-- | api/loader/data_efi.h | 14 | ||||
| -rw-r--r-- | loader/loader_efi.c | 16 |
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; } } |
