Module Name: src Committed By: jmcneill Date: Tue Oct 16 21:44:38 UTC 2018
Modified Files: src/usr.sbin/acpitools/acpidump: acpi.c Log Message: FACS is optional if the HW_REDUCED_ACPI flag is set in the FADT. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/usr.sbin/acpitools/acpidump/acpi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/acpitools/acpidump/acpi.c diff -u src/usr.sbin/acpitools/acpidump/acpi.c:1.32 src/usr.sbin/acpitools/acpidump/acpi.c:1.33 --- src/usr.sbin/acpitools/acpidump/acpi.c:1.32 Fri Oct 5 05:09:31 2018 +++ src/usr.sbin/acpitools/acpidump/acpi.c Tue Oct 16 21:44:37 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi.c,v 1.32 2018/10/05 05:09:31 msaitoh Exp $ */ +/* $NetBSD: acpi.c,v 1.33 2018/10/16 21:44:37 jmcneill Exp $ */ /*- * Copyright (c) 1998 Doug Rabson @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: acpi.c,v 1.32 2018/10/05 05:09:31 msaitoh Exp $"); +__RCSID("$NetBSD: acpi.c,v 1.33 2018/10/16 21:44:37 jmcneill Exp $"); #include <sys/param.h> #include <sys/endian.h> @@ -819,11 +819,16 @@ acpi_handle_fadt(ACPI_TABLE_HEADER *sdp) fadt = (ACPI_TABLE_FADT *)sdp; acpi_print_fadt(sdp); - facs = (ACPI_TABLE_FACS *)acpi_map_sdt( - acpi_select_address(fadt->Facs, fadt->XFacs)); - if (memcmp(facs->Signature, ACPI_SIG_FACS, 4) != 0 || facs->Length < 64) - errx(EXIT_FAILURE, "FACS is corrupt"); - acpi_print_facs(facs); + if (acpi_select_address(fadt->Facs, fadt->XFacs) == 0) { + if ((fadt->Flags & ACPI_FADT_HW_REDUCED) == 0) + errx(EXIT_FAILURE, "Missing FACS and HW_REDUCED_ACPI flag not set in FADT"); + } else { + facs = (ACPI_TABLE_FACS *)acpi_map_sdt( + acpi_select_address(fadt->Facs, fadt->XFacs)); + if (memcmp(facs->Signature, ACPI_SIG_FACS, 4) != 0 || facs->Length < 64) + errx(EXIT_FAILURE, "FACS is corrupt"); + acpi_print_facs(facs); + } dsdp = (ACPI_TABLE_HEADER *)acpi_map_sdt( acpi_select_address(fadt->Dsdt, fadt->XDsdt));