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