[haiku-commits] Change in haiku[master]: efi_guid struct gets equals, simplify EFI acpi_init

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 22 Dec 2020 21:59:15 +0000

From Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx>:

Fredrik Holmqvist has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/3545 ;)


Change subject: efi_guid struct gets equals, simplify EFI acpi_init
......................................................................

efi_guid struct gets equals, simplify EFI acpi_init
---
M headers/private/kernel/platform/efi/types.h
M src/system/boot/platform/efi/acpi.cpp
2 files changed, 16 insertions(+), 14 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/45/3545/1

diff --git a/headers/private/kernel/platform/efi/types.h 
b/headers/private/kernel/platform/efi/types.h
index 8aec555..2c1df00 100644
--- a/headers/private/kernel/platform/efi/types.h
+++ b/headers/private/kernel/platform/efi/types.h
@@ -82,6 +82,14 @@
     uint16_t data2;
     uint16_t data3;
     uint8_t data4[8];
+
+       bool equals(const efi_guid& other) const {
+               bool matches = data1 == other.data1 && data2 == other.data2
+                       && data3 == other.data3;
+               for (auto i = 0; matches && i < 8; i++)
+                       matches = data4[i] == other.data4[i];
+               return matches;
+       }
 } efi_guid;

 typedef void* efi_handle;
diff --git a/src/system/boot/platform/efi/acpi.cpp 
b/src/system/boot/platform/efi/acpi.cpp
index 3b5a45f..1f8f595 100644
--- a/src/system/boot/platform/efi/acpi.cpp
+++ b/src/system/boot/platform/efi/acpi.cpp
@@ -205,22 +205,16 @@

        // Try to find the ACPI RSDP.
        for (uint32 i = 0; i < entries; i++) {
-               acpi_rsdp *rsdp = NULL;
+               if (!table[i].VendorGuid.equals(acpi))
+                       continue;

-               efi_guid vendor = table[i].VendorGuid;
+               acpi_rsdp *rsdp = (acpi_rsdp *)(table[i].VendorTable);
+               if (strncmp((char *)rsdp, ACPI_RSDP_SIGNATURE, 8) == 0)
+                       TRACE(("acpi_init: found ACPI RSDP signature at %p\n", 
rsdp));
 
-               if (vendor.data1 == acpi.data1
-                       && vendor.data2 == acpi.data2
-                       && vendor.data3 == acpi.data3
-                       && strncmp((char *)vendor.data4, (char *)acpi.data4, 8) 
== 0) {
-                       rsdp = (acpi_rsdp *)(table[i].VendorTable);
-                       if (strncmp((char *)rsdp, ACPI_RSDP_SIGNATURE, 8) == 0)
-                               TRACE(("acpi_init: found ACPI RSDP signature at 
%p\n", rsdp));
-
-                       if (rsdp != NULL && acpi_check_rsdt(rsdp) == B_OK) {
-                               gKernelArgs.arch_args.acpi_root = rsdp;
-                               break;
-                       }
+               if (rsdp != NULL && acpi_check_rsdt(rsdp) == B_OK) {
+                       gKernelArgs.arch_args.acpi_root = rsdp;
+                       break;
                }
        }
 }

--
To view, visit https://review.haiku-os.org/c/haiku/+/3545
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Id4bc985dc1e6f44b594f6ca5dabd3fdac8e1cac2
Gerrit-Change-Number: 3545
Gerrit-PatchSet: 1
Gerrit-Owner: Fredrik Holmqvist <fredrik.holmqvist@xxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: efi_guid struct gets equals, simplify EFI acpi_init - Gerrit