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/cdf240e4c63a
branches: trunk
changeset: 750250:cdf240e4c63a
user: cegger <cegger%NetBSD.org@localhost>
date: Tue Dec 22 08:44:03 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/acpidump.c | 147 +-
usr.sbin/acpitools/acpidump/acpidump.h | 193 +--
usr.sbin/acpitools/acpidump/aml_dump.c | 65 -
usr.sbin/acpitools/acpidump/asl_dump.c | 1779 --------------------------------
4 files changed, 141 insertions(+), 2043 deletions(-)
diffs (truncated from 2258 to 300 lines):
diff -r 567ff53aac0d -r cdf240e4c63a usr.sbin/acpitools/acpidump/acpidump.c
--- a/usr.sbin/acpitools/acpidump/acpidump.c Tue Dec 22 08:44:02 2009 +0000
+++ b/usr.sbin/acpitools/acpidump/acpidump.c Tue Dec 22 08:44:03 2009 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: acpidump.c,v 1.1 2007/01/14 04:36:13 christos Exp $ */
+/* $NetBSD: acpidump.c,v 1.2 2009/12/22 08:44:03 cegger Exp $ */
/*-
* Copyright (c) 2000 Mitsuru IWASAKI <iwasaki%FreeBSD.org@localhost>
@@ -25,89 +25,126 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Id: acpidump.c,v 1.3 2000/08/08 14:12:21 iwasaki Exp
- * $FreeBSD: src/usr.sbin/acpi/acpidump/acpidump.c,v 1.5 2002/01/02 07:01:34 msmith Exp $
+ * $FreeBSD: src/usr.sbin/acpi/acpidump/acpidump.c,v 1.13 2009/08/25 20:35:57 jhb Exp $
*/
+
#include <sys/cdefs.h>
-__RCSID("$NetBSD: acpidump.c,v 1.1 2007/01/14 04:36:13 christos Exp $");
+__RCSID("$NetBSD: acpidump.c,v 1.2 2009/12/22 08:44:03 cegger Exp $");
+
#include <sys/param.h>
-
#include <assert.h>
#include <err.h>
#include <stdio.h>
-#include <unistd.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
-#include <acpi_common.h>
#include "acpidump.h"
-static void
-asl_dump_from_file(char *file)
-{
- u_int8_t *dp;
- u_int8_t *end;
-
- acpi_load_dsdt(file, &dp, &end);
- acpi_dump_dsdt(dp, end);
-}
+int dflag; /* Disassemble AML using iasl(8) */
+int tflag; /* Dump contents of SDT tables */
+int vflag; /* Use verbose messages */
static void
-asl_dump_from_devmem(void)
+usage(void)
{
- struct ACPIrsdp *rp;
- struct ACPIsdt *rsdp;
-
- rp = acpi_find_rsd_ptr();
- if (!rp)
- errx(1, "Can't find ACPI information\n");
+ const char *progname = getprogname();
- acpi_print_rsd_ptr(rp);
- rsdp = (struct ACPIsdt *) acpi_map_sdt(rp->addr);
- if (memcmp(rsdp->signature, "RSDT", 4) ||
- acpi_checksum(rsdp, rsdp->len))
- errx(1, "RSDT is corrupted\n");
-
- acpi_handle_rsdt(rsdp);
-}
-
-static void
-usage(const char *progname)
-{
-
- printf("usage:\t%s [-r] [-o dsdt_file_for_output]\n", progname);
- printf("\t%s [-r] [-f dsdt_file_for_input]\n", progname);
- printf("\t%s [-h]\n", progname);
- exit(1);
+ fprintf(stderr, "usage: %s [-d] [-t] [-h] [-v] [-f dsdt_input] "
+ "[-o dsdt_output]\n", progname);
+ fprintf(stderr, "To send ASL:\n\t%s -dt | gzip -c9 > foo.asl.gz\n",
+ progname);
+ exit(EXIT_FAILURE);
}
int
main(int argc, char *argv[])
{
- char c, *progname;
+ ACPI_TABLE_HEADER *rsdt, *sdt;
+ char c;
+ char *dsdt_input_file, *dsdt_output_file;
- progname = argv[0];
- while ((c = getopt(argc, argv, "f:o:hr")) != -1) {
+ dsdt_input_file = dsdt_output_file = NULL;
+
+ if (argc < 2)
+ usage();
+
+ while ((c = getopt(argc, argv, "dhtvf:o:")) != -1) {
switch (c) {
+ case 'd':
+ dflag = 1;
+ break;
+ case 't':
+ tflag = 1;
+ break;
+ case 'v':
+ vflag = 1;
+ break;
case 'f':
- asl_dump_from_file(optarg);
- return (0);
+ dsdt_input_file = optarg;
+ break;
case 'o':
- aml_dumpfile = optarg;
+ dsdt_output_file = optarg;
break;
case 'h':
- usage(progname);
- break;
- case 'r':
- rflag++;
- break;
default:
- argc -= optind;
- argv += optind;
+ usage();
+ /* NOTREACHED */
}
}
+ argc -= optind;
+ argv += optind;
- asl_dump_from_devmem();
- return (0);
+ /* Get input either from file or /dev/mem */
+ if (dsdt_input_file != NULL) {
+ if (dflag == 0 && tflag == 0) {
+ warnx("Need to specify -d or -t with DSDT input file");
+ usage();
+ } else if (tflag != 0) {
+ warnx("Can't use -t with DSDT input file");
+ usage();
+ }
+ if (vflag)
+ warnx("loading DSDT file: %s", dsdt_input_file);
+ rsdt = dsdt_load_file(dsdt_input_file);
+ } else {
+ if (vflag)
+ warnx("loading RSD PTR from /dev/mem");
+ rsdt = sdt_load_devmem();
+ }
+
+ /* Display misc. SDT tables (only available when using /dev/mem) */
+ if (tflag) {
+ if (vflag)
+ warnx("printing various SDT tables");
+ sdt_print_all(rsdt);
+ }
+
+ /* Translate RSDT to DSDT pointer */
+ if (dsdt_input_file == NULL) {
+ sdt = sdt_from_rsdt(rsdt, ACPI_SIG_FADT, NULL);
+ sdt = dsdt_from_fadt((ACPI_TABLE_FADT *)sdt);
+ } else {
+ sdt = rsdt;
+ rsdt = NULL;
+ }
+
+ /* Dump the DSDT and SSDTs to a file */
+ if (dsdt_output_file != NULL) {
+ if (vflag)
+ warnx("saving DSDT file: %s", dsdt_output_file);
+ dsdt_save_file(dsdt_output_file, rsdt, sdt);
+ }
+
+ /* Disassemble the DSDT into ASL */
+ if (dflag) {
+ if (vflag)
+ warnx("disassembling DSDT, iasl messages follow");
+ aml_disassemble(rsdt, sdt);
+ if (vflag)
+ warnx("iasl processing complete");
+ }
+
+ exit(EXIT_SUCCESS);
}
diff -r 567ff53aac0d -r cdf240e4c63a usr.sbin/acpitools/acpidump/acpidump.h
--- a/usr.sbin/acpitools/acpidump/acpidump.h Tue Dec 22 08:44:02 2009 +0000
+++ b/usr.sbin/acpitools/acpidump/acpidump.h Tue Dec 22 08:44:03 2009 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: acpidump.h,v 1.1 2007/01/14 04:36:13 christos Exp $ */
+/* $NetBSD: acpidump.h,v 1.2 2009/12/22 08:44:03 cegger Exp $ */
/*-
* Copyright (c) 1999 Doug Rabson
@@ -26,158 +26,63 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Id: acpidump.h,v 1.3 2000/08/09 14:47:52 iwasaki Exp
- * $FreeBSD: src/usr.sbin/acpi/acpidump/acpidump.h,v 1.5 2002/10/09 19:46:09 jhb Exp $
+ * $FreeBSD: src/usr.sbin/acpi/acpidump/acpidump.h,v 1.24 2009/08/25 20:35:57 jhb Exp $
*/
#ifndef _ACPIDUMP_H_
-#define _ACPIDUMP_H_
+#define _ACPIDUMP_H_
-/* Generic Address structure */
-struct ACPIgas {
- u_int8_t address_space_id;
-#define ACPI_GAS_MEMORY 0
-#define ACPI_GAS_IO 1
-#define ACPI_GAS_PCI 2
-#define ACPI_GAS_EMBEDDED 3
-#define ACPI_GAS_SMBUS 4
-#define ACPI_GAS_FIXED 0x7f
- u_int8_t register_bit_width;
- u_int8_t register_bit_offset;
- u_int8_t res;
- u_int64_t address;
-} __packed;
+#include <stdlib.h> /* for size_t */
+#include <acpi_common.h>
+#include <dev/acpi/acpica.h>
-/* Root System Description Pointer */
-struct ACPIrsdp {
- u_char signature[8];
- u_char sum;
- u_char oem[6];
- u_char res;
- u_int32_t addr;
-} __packed;
+/* GAS address space ID constants. */
+#define ACPI_GAS_MEMORY 0
+#define ACPI_GAS_IO 1
+#define ACPI_GAS_PCI 2
+#define ACPI_GAS_EMBEDDED 3
+#define ACPI_GAS_SMBUS 4
+#define ACPI_GAS_CMOS 5
+#define ACPI_GAS_PCIBAR 6
+#define ACPI_GAS_DATATABLE 7
+#define ACPI_GAS_FIXED 0x7f
-/* System Description Table */
-struct ACPIsdt {
- u_char signature[4];
- u_int32_t len;
- u_char rev;
- u_char check;
- u_char oemid[6];
- u_char oemtblid[8];
- u_int32_t oemrev;
- u_char creator[4];
- u_int32_t crerev;
-#define SIZEOF_SDT_HDR 36 /* struct size except body */
- u_int32_t body[1];/* This member should be casted */
-} __packed;
+/* Subfields in the HPET Id member. */
+#define ACPI_HPET_ID_HARDWARE_REV_ID 0x000000ff
+#define ACPI_HPET_ID_COMPARATORS 0x00001f00
+#define ACPI_HPET_ID_COUNT_SIZE_CAP 0x00002000
+#define ACPI_HPET_ID_LEGACY_CAPABLE 0x00008000
+#define ACPI_HPET_ID_PCI_VENDOR_ID 0xffff0000
+
+/* Find and map the RSD PTR structure and return it for parsing */
+ACPI_TABLE_HEADER *sdt_load_devmem(void);
-/* Fixed ACPI Description Table (body) */
-struct FACPbody {
- u_int32_t facs_ptr;
- u_int32_t dsdt_ptr;
- u_int8_t int_model;
-#define ACPI_FACP_INTMODEL_PIC 0 /* Standard PC-AT PIC */
-#define ACPI_FACP_INTMODEL_APIC 1 /* Multiple APIC */
- u_char reserved1;
- u_int16_t sci_int;
- u_int32_t smi_cmd;
- u_int8_t acpi_enable;
- u_int8_t acpi_disable;
- u_int8_t s4biosreq;
- u_int8_t reserved2;
- u_int32_t pm1a_evt_blk;
- u_int32_t pm1b_evt_blk;
- u_int32_t pm1a_cnt_blk;
- u_int32_t pm1b_cnt_blk;
- u_int32_t pm2_cnt_blk;
- u_int32_t pm_tmr_blk;
- u_int32_t gpe0_blk;
- u_int32_t gpe1_blk;
- u_int8_t pm1_evt_len;
- u_int8_t pm1_cnt_len;
- u_int8_t pm2_cnt_len;
- u_int8_t pm_tmr_len;
- u_int8_t gpe0_len;
Home |
Main Index |
Thread Index |
Old Index