Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/acpitools/acpidump Import acpidump from FreeBSD per...



details:   https://anonhg.NetBSD.org/src/rev/5d246404a81c
branches:  trunk
changeset: 750248:5d246404a81c
user:      cegger <cegger%NetBSD.org@localhost>
date:      Tue Dec 22 08:44:02 2009 +0000

description:
Import acpidump from FreeBSD per request from jmcneill@
Changes made in the port:
- adapt path to iasl from /usr/sbin/iasl to /usr/bin/iasl
- fix realpath() usage to accomplish NetBSD's behaviour
- use EXIT_FAILURE/EXIT_SUCCESS everywhere
- fix crash on corrupt DSDT file and print proper error message
- implemented additional ACPI table parsers for
  BERT, BOOT, CPEP, DBGP, EINJ, ERST, HEST, MSCT, SBST,
  SLIT, SPCR, TCPA, WAET, WDAT and WDRT

diffstat:

 usr.sbin/acpitools/acpidump/Makefile    |    15 +-
 usr.sbin/acpitools/acpidump/acpi.c      |  2545 +++++++++++++++++++++++++++---
 usr.sbin/acpitools/acpidump/acpi_user.c |   145 +-
 3 files changed, 2385 insertions(+), 320 deletions(-)

diffs (truncated from 2961 to 300 lines):

diff -r ec603a6ba53d -r 5d246404a81c usr.sbin/acpitools/acpidump/Makefile
--- a/usr.sbin/acpitools/acpidump/Makefile      Tue Dec 22 07:09:39 2009 +0000
+++ b/usr.sbin/acpitools/acpidump/Makefile      Tue Dec 22 08:44:02 2009 +0000
@@ -1,15 +1,12 @@
-# Id: Makefile,v 1.2 2000/07/14 18:16:29 iwasaki Exp 
-# $FreeBSD: src/usr.sbin/acpi/acpidump/Makefile,v 1.6 2001/10/22 17:25:25 iwasaki Exp $
+# $NetBSD: Makefile,v 1.4 2009/12/22 08:44:03 cegger Exp $
+# $FreeBSD: src/usr.sbin/acpi/acpidump/Makefile,v 1.7 2003/08/28 03:33:07 njl Exp $
 
 .if (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64")
+CPPFLAGS+=-I${.CURDIR}/../../../sys
+CPPFLAGS+=-I${.CURDIR}/..
 PROG=  acpidump
-SRCS=  acpi.c acpi_user.c asl_dump.c aml_dump.c acpidump.c
-SRCS+= aml_parse.c aml_name.c aml_amlmem.c aml_memman.c aml_store.c \
-       aml_obj.c aml_evalobj.c aml_common.c
-
-CPPFLAGS+=-I${.CURDIR}/../amldb
+MAN=   acpidump.8
+SRCS=  acpi.c acpi_user.c acpidump.c
 .endif
 
-MAN=   acpidump.8
 .include <bsd.prog.mk>
-.PATH: ${.CURDIR}/../aml
diff -r ec603a6ba53d -r 5d246404a81c usr.sbin/acpitools/acpidump/acpi.c
--- a/usr.sbin/acpitools/acpidump/acpi.c        Tue Dec 22 07:09:39 2009 +0000
+++ b/usr.sbin/acpitools/acpidump/acpi.c        Tue Dec 22 08:44:02 2009 +0000
@@ -1,9 +1,8 @@
-/*     $NetBSD: acpi.c,v 1.4 2008/02/13 18:59:18 drochner Exp $        */
+/* $NetBSD: acpi.c,v 1.5 2009/12/22 08:44:03 cegger Exp $ */
 
 /*-
  * Copyright (c) 1998 Doug Rabson
  * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki%FreeBSD.org@localhost>
- * Copyright (c) 2008 Joerg Sonnenberger <joerg%NetBSD.org@localhost>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -27,71 +26,97 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     Id: acpi.c,v 1.4 2000/08/09 14:47:52 iwasaki Exp 
- *     $FreeBSD: src/usr.sbin/acpi/acpidump/acpi.c,v 1.4 2001/10/22 17:25:25 iwasaki Exp $
+ *     $FreeBSD: src/usr.sbin/acpi/acpidump/acpi.c,v 1.37 2009/08/25 20:35:57 jhb Exp $
  */
+
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: acpi.c,v 1.4 2008/02/13 18:59:18 drochner Exp $");
+__RCSID("$NetBSD: acpi.c,v 1.5 2009/12/22 08:44:03 cegger Exp $");
 
 #include <sys/param.h>
+#include <sys/endian.h>
 #include <sys/stat.h>
-
+#include <sys/wait.h>
 #include <assert.h>
 #include <err.h>
 #include <fcntl.h>
+#include <paths.h>
 #include <stdio.h>
-#include <unistd.h>
+#include <stdint.h>
+#include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
+#include <stddef.h>
 
-#include <acpi_common.h>
 #include "acpidump.h"
 
-#include "aml/aml_env.h"
-#include "aml/aml_common.h"
-#include "aml/aml_parse.h"
-#include "aml/aml_region.h"
-
 #define BEGIN_COMMENT  "/*\n"
 #define END_COMMENT    " */\n"
 
-struct ACPIsdt dsdt_header = {
-       .signature = "DSDT",
-       .rev = 1,
-       .oemid = "OEMID",
-       .oemtblid = "OEMTBLID",
-       .oemrev = 0x12345678,
-       .creator = "CRTR",
-       .crerev = 0x12345678,
-};
+static void    acpi_print_string(char *s, size_t length);
+static void    acpi_print_gas(ACPI_GENERIC_ADDRESS *gas);
+static void    acpi_print_pci(uint16_t vendorid, uint16_t deviceid,
+                   uint8_t seg, uint8_t bus, uint8_t device, uint8_t func);
+static void    acpi_print_pci_sbfd(uint8_t seg, uint8_t bus, uint8_t device,
+                   uint8_t func);
+#ifdef notyet
+static void    acpi_print_hest_generic_status(ACPI_HEST_GENERIC_STATUS *);
+static void    acpi_print_hest_generic_data(ACPI_HEST_GENERIC_DATA *);
+#endif
+static void    acpi_print_whea(ACPI_WHEA_HEADER *whea,
+                   void (*print_action)(ACPI_WHEA_HEADER *),
+                   void (*print_ins)(ACPI_WHEA_HEADER *),
+                   void (*print_flags)(ACPI_WHEA_HEADER *));
+static int     acpi_get_fadt_revision(ACPI_TABLE_FADT *fadt);
+static void    acpi_handle_fadt(ACPI_TABLE_HEADER *fadt);
+static void    acpi_print_cpu(u_char cpu_id);
+static void    acpi_print_cpu_uid(uint32_t uid, char *uid_string);
+static void    acpi_print_local_apic(uint32_t apic_id, uint32_t flags);
+static void    acpi_print_io_apic(uint32_t apic_id, uint32_t int_base,
+                   uint64_t apic_addr);
+static void    acpi_print_mps_flags(uint16_t flags);
+static void    acpi_print_intr(uint32_t intr, uint16_t mps_flags);
+static void    acpi_print_local_nmi(u_int lint, uint16_t mps_flags);
+static void    acpi_print_madt(ACPI_SUBTABLE_HEADER *mp);
+static void    acpi_handle_bert(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_boot(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_cpep(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_dbgp(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_einj(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_erst(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_hest(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_madt(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_msct(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_ecdt(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_hpet(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_mcfg(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_sbst(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_slit(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_spcr(ACPI_TABLE_HEADER *sdp);
+static void    acpi_print_srat_cpu(uint32_t apic_id,
+                   uint32_t proximity_domain,
+                   uint32_t flags, uint32_t clockdomain);
+static void    acpi_print_srat_memory(ACPI_SRAT_MEM_AFFINITY *mp);
+static void    acpi_print_srat(ACPI_SUBTABLE_HEADER *srat);
+static void    acpi_handle_srat(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_tcpa(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_waet(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_wdat(ACPI_TABLE_HEADER *sdp);
+static void    acpi_handle_wdrt(ACPI_TABLE_HEADER *sdp);
+static void    acpi_print_sdt(ACPI_TABLE_HEADER *sdp);
+static void    acpi_print_fadt(ACPI_TABLE_HEADER *sdp);
+static void    acpi_print_facs(ACPI_TABLE_FACS *facs);
+static void    acpi_print_dsdt(ACPI_TABLE_HEADER *dsdp);
+static ACPI_TABLE_HEADER *acpi_map_sdt(vm_offset_t pa);
+static void    acpi_print_rsd_ptr(ACPI_TABLE_RSDP *rp);
+static void    acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp);
+static void    acpi_walk_subtables(ACPI_TABLE_HEADER *table, void *first,
+                   void (*action)(ACPI_SUBTABLE_HEADER *));
+
+/* Size of an address. 32-bit for ACPI 1.0, 64-bit for ACPI 2.0 and up. */
+static int addr_size;
 
 static void
-acpi_trim_string(char *s, size_t length)
-{
-
-       /* Trim trailing spaces and NULLs */
-       while (length > 0 && (s[length - 1] == ' ' || s[length - 1] == '\0'))
-               s[length-- - 1] = '\0';
-}
-
-static void
-acpi_print_dsdt_definition(void)
-{
-       char    oemid[6 + 1];
-       char    oemtblid[8 + 1];
-
-       acpi_trim_string((char *)dsdt_header.oemid, sizeof(oemid) - 1);
-       acpi_trim_string((char *)dsdt_header.oemtblid, sizeof(oemtblid) - 1);
-       (void)strlcpy(oemid, (const char *)dsdt_header.oemid, sizeof(oemid));
-       (void)strlcpy(oemtblid, (const char *)dsdt_header.oemtblid,
-           sizeof(oemtblid));
-
-       printf("DefinitionBlock (\"%s\", \"%s\", 0x%x, \"%s\", \"%s\", 0x%x)",
-           "acpi_dst.aml", "DSDT", dsdt_header.rev, oemid, oemtblid,
-           dsdt_header.oemrev);
-}
-
-static void
-acpi_print_string(const char *s, size_t length)
+acpi_print_string(char *s, size_t length)
 {
        int     c;
 
@@ -106,214 +131,2002 @@
 }
 
 static void
-acpi_handle_dsdt(struct ACPIsdt *dsdp)
+acpi_print_gas(ACPI_GENERIC_ADDRESS *gas)
+{
+       switch(gas->SpaceId) {
+       case ACPI_GAS_MEMORY:
+               printf("0x%08lx:%u[%u] (Memory)", (u_long)gas->Address,
+                      gas->BitOffset, gas->BitWidth);
+               break;
+       case ACPI_GAS_IO:
+               printf("0x%02lx:%u[%u] (IO)", (u_long)gas->Address,
+                      gas->BitOffset, gas->BitWidth);
+               break;
+       case ACPI_GAS_PCI:
+               printf("%x:%x+0x%x (PCI)", (uint16_t)(gas->Address >> 32),
+                      (uint16_t)((gas->Address >> 16) & 0xffff),
+                      (uint16_t)gas->Address);
+               break;
+       /* XXX How to handle these below? */
+       case ACPI_GAS_EMBEDDED:
+               printf("0x%x:%u[%u] (EC)", (uint16_t)gas->Address,
+                      gas->BitOffset, gas->BitWidth);
+               break;
+       case ACPI_GAS_SMBUS:
+               printf("0x%x:%u[%u] (SMBus)", (uint16_t)gas->Address,
+                      gas->BitOffset, gas->BitWidth);
+               break;
+       case ACPI_GAS_CMOS:
+       case ACPI_GAS_PCIBAR:
+       case ACPI_GAS_DATATABLE:
+       case ACPI_GAS_FIXED:
+       default:
+               printf("0x%08lx (?)", (u_long)gas->Address);
+               break;
+       }
+}
+
+static void
+acpi_print_pci(uint16_t vendorid, uint16_t deviceid,
+    uint8_t seg, uint8_t bus, uint8_t device, uint8_t func)
+{
+       if (vendorid == 0xffff && deviceid == 0xffff) {
+               printf("\tPCI Device=NONE\n");
+               return;
+       }
+
+       printf("\tPCI device={\n");
+       printf("\t\tVendor=0x%x\n", vendorid);
+       printf("\t\tDevice=0x%x\n", deviceid);
+       printf("\n");
+       printf("\t\tSegment Group=%d\n", seg);
+       printf("\t\tBus=%d\n", bus);
+       printf("\t\tDevice=%d\n", device);
+       printf("\t\tFunction=%d\n", func);
+       printf("\t}\n");
+}
+
+static void
+acpi_print_pci_sbfd(uint8_t seg, uint8_t bus, uint8_t device, uint8_t func)
+{
+       if (bus == 0xff && device == 0xff && func == 0xff) {
+               printf("\tPCI Device=NONE\n");
+               return;
+       }
+
+       printf("\tPCI device={\n");
+       printf("\t\tSegment Group=%d\n", seg);
+       printf("\t\tBus=%d\n", bus);
+       printf("\t\tDevice=%d\n", device);
+       printf("\t\tFunction=%d\n", func);
+       printf("\t}\n");
+}
+
+#ifdef notyet
+static void
+acpi_print_hest_errorseverity(uint32_t error)
 {
-       u_int8_t       *dp;
-       u_int8_t       *end;
+       printf("\tError Severity={ ");
+       switch (error) {
+       case 0:
+               printf("Recoverable");
+               break;
+       case 1:
+               printf("Fatal");
+               break;
+       case 2:
+               printf("Corrected");
+               break;
+       case 3:
+               printf("None");
+               break;
+       default:
+               printf("%d (reserved)", error);
+               break;
+       }
+       printf("}\n");
+}
+#endif
+
+static void
+acpi_print_hest_errorbank(ACPI_HEST_IA_ERROR_BANK *bank)
+{
+       printf("\n");
+       printf("\tBank Number=%d\n", bank->BankNumber);
+       printf("\tClear Status On Init={ %s }\n",
+               bank->ClearStatusOnInit ? "NO" : "YES");
+       printf("\tStatus Data Format={ ");
+       switch (bank->StatusFormat) {
+       case 0:
+               printf("IA32 MCA");
+               break;



Home | Main Index | Thread Index | Old Index