acpi_get_rsdp: UEFI RSDP lookup return RSDPv1

* This commit makes the acpi_get_rsdp function to return the RSDPv1 if
avaliable (in UEFI) to match this functions behaviour under BIOS where
it returns the XSDP or the RSDP depending on which one is avaliable.

Signed-off-by: Andy-Python-Programmer <andypythonappdeveloper@gmail.com>
This commit is contained in:
Andy-Python-Programmer 2021-10-05 09:34:51 +11:00
parent 802793597c
commit cce7fa4e1e
No known key found for this signature in database
GPG Key ID: 80E0357347554B89

View File

@ -64,14 +64,18 @@ void acpi_get_smbios(void **smbios32, void **smbios64) {
#include <efi.h>
void *acpi_get_rsdp(void) {
EFI_GUID acpi_2_guid = ACPI_20_TABLE_GUID;
EFI_GUID acpi_1_guid = ACPI_TABLE_GUID;
for (size_t i = 0; i < gST->NumberOfTableEntries; i++) {
EFI_CONFIGURATION_TABLE *cur_table = &gST->ConfigurationTable[i];
EFI_GUID acpi_2_guid = ACPI_20_TABLE_GUID;
if (memcmp(&cur_table->VendorGuid, &acpi_2_guid, sizeof(EFI_GUID)) != 0)
if (memcmp(&cur_table->VendorGuid, &acpi_2_guid, sizeof(EFI_GUID)) != 0 || // XSDP
memcmp(&cur_table->VendorGuid, &acpi_1_guid, sizeof(EFI_GUID)) != 0) // RSDP
continue;
if (acpi_checksum(cur_table->VendorTable, sizeof(struct rsdp)) != 0)
if (acpi_checksum(cur_table->VendorTable, sizeof(struct rsdp)) != 0 || // XSDP is 36 bytes wide
acpi_checksum(cur_table->VendorTable, 20) != 0) // RSDP is 20 bytes wide
continue;
printv("acpi: Found RSDP at %X\n", cur_table->VendorTable);