diff options
Diffstat (limited to 'usr.sbin/acpi')
-rw-r--r-- | usr.sbin/acpi/Makefile | 7 | ||||
-rw-r--r-- | usr.sbin/acpi/Makefile.inc | 27 | ||||
-rw-r--r-- | usr.sbin/acpi/acpiconf/Makefile | 8 | ||||
-rw-r--r-- | usr.sbin/acpi/acpiconf/Makefile.depend | 18 | ||||
-rw-r--r-- | usr.sbin/acpi/acpiconf/acpiconf.8 | 94 | ||||
-rw-r--r-- | usr.sbin/acpi/acpiconf/acpiconf.c | 247 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidb/Makefile | 80 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidb/Makefile.depend | 19 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidb/acpidb.8 | 167 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidb/acpidb.c | 540 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/Makefile | 8 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/Makefile.depend | 18 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpi.c | 1602 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpi_user.c | 222 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpidump.8 | 200 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpidump.c | 144 | ||||
-rw-r--r-- | usr.sbin/acpi/acpidump/acpidump.h | 158 | ||||
-rw-r--r-- | usr.sbin/acpi/iasl/Makefile | 126 | ||||
-rw-r--r-- | usr.sbin/acpi/iasl/Makefile.depend | 19 | ||||
-rw-r--r-- | usr.sbin/acpi/iasl/iasl.8 | 179 |
20 files changed, 0 insertions, 3883 deletions
diff --git a/usr.sbin/acpi/Makefile b/usr.sbin/acpi/Makefile deleted file mode 100644 index 8190bc7..0000000 --- a/usr.sbin/acpi/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# Makefile for acpi tools -# $Id: Makefile,v 1.1 2000/07/14 18:16:22 iwasaki Exp $ -# $FreeBSD$ - -SUBDIR= acpiconf acpidb acpidump iasl - -.include <bsd.subdir.mk> diff --git a/usr.sbin/acpi/Makefile.inc b/usr.sbin/acpi/Makefile.inc deleted file mode 100644 index 9692f0a..0000000 --- a/usr.sbin/acpi/Makefile.inc +++ /dev/null @@ -1,27 +0,0 @@ -# $Id: Makefile.inc,v 1.1 2000/07/14 18:16:22 iwasaki Exp $ -# $FreeBSD$ - -ACPICA_DIR= ${.CURDIR}/../../../sys/contrib/dev/acpica -CFLAGS+= -I${.CURDIR}/../../../sys - -PACKAGE= acpi - -.if exists(${.CURDIR}/../../Makefile.inc) -.include "${.CURDIR}/../../Makefile.inc" -.endif - -.PATH: ${ACPICA_DIR} \ - ${ACPICA_DIR}/common \ - ${ACPICA_DIR}/compiler \ - ${ACPICA_DIR}/components/debugger \ - ${ACPICA_DIR}/components/disassembler \ - ${ACPICA_DIR}/components/dispatcher \ - ${ACPICA_DIR}/components/events \ - ${ACPICA_DIR}/components/executer \ - ${ACPICA_DIR}/components/hardware \ - ${ACPICA_DIR}/components/namespace \ - ${ACPICA_DIR}/components/parser \ - ${ACPICA_DIR}/components/resources \ - ${ACPICA_DIR}/components/tables \ - ${ACPICA_DIR}/components/utilities \ - ${ACPICA_DIR}/os_specific/service_layers diff --git a/usr.sbin/acpi/acpiconf/Makefile b/usr.sbin/acpi/acpiconf/Makefile deleted file mode 100644 index 0bbadc1..0000000 --- a/usr.sbin/acpi/acpiconf/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $Id: Makefile,v 1.2 2000/07/14 18:16:25 iwasaki Exp $ -# $FreeBSD$ - -PROG= acpiconf -MAN= acpiconf.8 -WARNS?= 3 - -.include <bsd.prog.mk> diff --git a/usr.sbin/acpi/acpiconf/Makefile.depend b/usr.sbin/acpi/acpiconf/Makefile.depend deleted file mode 100644 index 3646e2e..0000000 --- a/usr.sbin/acpi/acpiconf/Makefile.depend +++ /dev/null @@ -1,18 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - gnu/lib/csu \ - gnu/lib/libgcc \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - lib/libcompiler_rt \ - - -.include <dirdeps.mk> - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/usr.sbin/acpi/acpiconf/acpiconf.8 b/usr.sbin/acpi/acpiconf/acpiconf.8 deleted file mode 100644 index 07862d7..0000000 --- a/usr.sbin/acpi/acpiconf/acpiconf.8 +++ /dev/null @@ -1,94 +0,0 @@ -.\"- -.\" Copyright (c) 2000 Dag-Erling Coïdan Smørgrav -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer -.\" in this position and unchanged. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. The name of the author may not be used to endorse or promote products -.\" derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd September 22, 2015 -.Dt ACPICONF 8 -.Os -.Sh NAME -.Nm acpiconf -.Nd control ACPI power management -.Sh SYNOPSIS -.Nm -.Op Fl h -.Op Fl i Ar batt -.Op Fl k Ar ack -.Op Fl s Ar type -.Sh DESCRIPTION -The -.Nm -utility allows the user control of the ACPI power management -functions. -The following command-line options are recognized: -.Bl -tag -width ".Fl s Ar type" -.It Fl h -Displays a summary of available options. -.It Fl i Ar batt -Get design information about the specified battery. -.It Fl k Ar ack -Ack or abort a pending suspend request using the argument provided. -.Sy Most users should not use this option directly. -.It Fl s Ar type -Enters the specified sleep mode. -Recognized types are -.Cm 1 -(only the CPU clock is stopped), -.Cm 2 -(not implemented on most systems but similar to S1), -.Cm 3 -(the CPU context is lost and memory context is preserved), -and -.Cm 4 -(the CPU context is lost and memory context is stored to disk). -Sleep states may also be given as S1, S2, etc. -The supported states depend on BIOS implementation, including ACPI -byte code (AML). -If the -.Pa /etc/rc.suspend -and -.Pa /etc/rc.resume -scripts are executable, they will be run before and after entering -the given sleep state. -.El -.Sh SEE ALSO -.Xr acpi 4 , -.Xr acpidump 8 , -.Xr apm 8 -.Sh HISTORY -The -.Nm -utility appeared in -.Fx 5.0 . -.Sh AUTHORS -.An -nosplit -The -.Nm -utility was written by -.An Mitsuru Iwasaki Aq Mt iwasaki@FreeBSD.org . -This manual page was written by -.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org . diff --git a/usr.sbin/acpi/acpiconf/acpiconf.c b/usr.sbin/acpi/acpiconf/acpiconf.c deleted file mode 100644 index 1fab4b6..0000000 --- a/usr.sbin/acpi/acpiconf/acpiconf.c +++ /dev/null @@ -1,247 +0,0 @@ -/*- - * Copyright (c) 1999 Mitsuru IWASAKI <iwasaki@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: acpiconf.c,v 1.5 2000/08/08 14:12:19 iwasaki Exp $ - * $FreeBSD$ - */ - -#include <sys/param.h> - -#include <err.h> -#include <fcntl.h> -#include <stdio.h> -#include <sys/ioctl.h> -#include <sysexits.h> -#include <unistd.h> - -#include <dev/acpica/acpiio.h> - -#include <contrib/dev/acpica/include/acpi.h> - -#define ACPIDEV "/dev/acpi" - -static int acpifd; - -static void -acpi_init(void) -{ - acpifd = open(ACPIDEV, O_RDWR); - if (acpifd == -1) - acpifd = open(ACPIDEV, O_RDONLY); - if (acpifd == -1) - err(EX_OSFILE, ACPIDEV); -} - -/* Prepare to sleep and then wait for the signal that sleeping can occur. */ -static void -acpi_sleep(int sleep_type) -{ - int ret; - - /* Notify OS that we want to sleep. devd(8) gets this notify. */ - ret = ioctl(acpifd, ACPIIO_REQSLPSTATE, &sleep_type); - if (ret != 0) - err(EX_IOERR, "request sleep type (%d) failed", sleep_type); -} - -/* Ack or abort a pending suspend request. */ -static void -acpi_sleep_ack(int err_val) -{ - int ret; - - ret = ioctl(acpifd, ACPIIO_ACKSLPSTATE, &err_val); - if (ret != 0) - err(EX_IOERR, "ack sleep type failed"); -} - -/* should be a acpi define, but doesn't appear to be */ -#define UNKNOWN_CAP 0xffffffff -#define UNKNOWN_VOLTAGE 0xffffffff - -static int -acpi_battinfo(int num) -{ - union acpi_battery_ioctl_arg battio; - const char *pwr_units; - int hours, min, amp; - uint32_t volt; - - if (num < 0 || num > 64) - err(EX_USAGE, "invalid battery %d", num); - - /* Print battery design information. */ - battio.unit = num; - if (ioctl(acpifd, ACPIIO_BATT_GET_BIF, &battio) == -1) - err(EX_IOERR, "get battery info (%d) failed", num); - amp = battio.bif.units; - pwr_units = amp ? "mA" : "mW"; - if (battio.bif.dcap == UNKNOWN_CAP) - printf("Design capacity:\tunknown\n"); - else - printf("Design capacity:\t%d %sh\n", battio.bif.dcap, - pwr_units); - if (battio.bif.lfcap == UNKNOWN_CAP) - printf("Last full capacity:\tunknown\n"); - else - printf("Last full capacity:\t%d %sh\n", battio.bif.lfcap, - pwr_units); - printf("Technology:\t\t%s\n", battio.bif.btech == 0 ? - "primary (non-rechargeable)" : "secondary (rechargeable)"); - if (battio.bif.dvol == UNKNOWN_CAP) - printf("Design voltage:\t\tunknown\n"); - else - printf("Design voltage:\t\t%d mV\n", battio.bif.dvol); - printf("Capacity (warn):\t%d %sh\n", battio.bif.wcap, pwr_units); - printf("Capacity (low):\t\t%d %sh\n", battio.bif.lcap, pwr_units); - printf("Low/warn granularity:\t%d %sh\n", battio.bif.gra1, pwr_units); - printf("Warn/full granularity:\t%d %sh\n", battio.bif.gra2, pwr_units); - printf("Model number:\t\t%s\n", battio.bif.model); - printf("Serial number:\t\t%s\n", battio.bif.serial); - printf("Type:\t\t\t%s\n", battio.bif.type); - printf("OEM info:\t\t%s\n", battio.bif.oeminfo); - - /* Fetch battery voltage information. */ - volt = UNKNOWN_VOLTAGE; - battio.unit = num; - if (ioctl(acpifd, ACPIIO_BATT_GET_BST, &battio) == -1) - err(EX_IOERR, "get battery status (%d) failed", num); - if (battio.bst.state != ACPI_BATT_STAT_NOT_PRESENT) - volt = battio.bst.volt; - - /* Print current battery state information. */ - battio.unit = num; - if (ioctl(acpifd, ACPIIO_BATT_GET_BATTINFO, &battio) == -1) - err(EX_IOERR, "get battery user info (%d) failed", num); - if (battio.battinfo.state != ACPI_BATT_STAT_NOT_PRESENT) { - const char *state; - switch (battio.battinfo.state & ACPI_BATT_STAT_BST_MASK) { - case 0: - state = "high"; - break; - case ACPI_BATT_STAT_DISCHARG: - state = "discharging"; - break; - case ACPI_BATT_STAT_CHARGING: - state = "charging"; - break; - case ACPI_BATT_STAT_CRITICAL: - state = "critical"; - break; - case ACPI_BATT_STAT_DISCHARG | ACPI_BATT_STAT_CRITICAL: - state = "critical discharging"; - break; - case ACPI_BATT_STAT_CHARGING | ACPI_BATT_STAT_CRITICAL: - state = "critical charging"; - break; - default: - state = "invalid"; - } - printf("State:\t\t\t%s\n", state); - if (battio.battinfo.cap == -1) - printf("Remaining capacity:\tunknown\n"); - else - printf("Remaining capacity:\t%d%%\n", - battio.battinfo.cap); - if (battio.battinfo.min == -1) - printf("Remaining time:\t\tunknown\n"); - else { - hours = battio.battinfo.min / 60; - min = battio.battinfo.min % 60; - printf("Remaining time:\t\t%d:%02d\n", hours, min); - } - if (battio.battinfo.rate == -1) - printf("Present rate:\t\tunknown\n"); - else if (amp && volt != UNKNOWN_VOLTAGE) { - printf("Present rate:\t\t%d mA (%d mW)\n", - battio.battinfo.rate, - battio.battinfo.rate * volt / 1000); - } else - printf("Present rate:\t\t%d %s\n", - battio.battinfo.rate, pwr_units); - } else - printf("State:\t\t\tnot present\n"); - - /* Print battery voltage information. */ - if (volt == UNKNOWN_VOLTAGE) - printf("Present voltage:\tunknown\n"); - else - printf("Present voltage:\t%d mV\n", volt); - - return (0); -} - -static void -usage(const char* prog) -{ - printf("usage: %s [-h] [-i batt] [-k ack] [-s 1-4]\n", prog); - exit(0); -} - -int -main(int argc, char *argv[]) -{ - char c, *prog; - int sleep_type; - - prog = argv[0]; - if (argc < 2) - usage(prog); - /* NOTREACHED */ - - sleep_type = -1; - acpi_init(); - while ((c = getopt(argc, argv, "hi:k:s:")) != -1) { - switch (c) { - case 'i': - acpi_battinfo(atoi(optarg)); - break; - case 'k': - acpi_sleep_ack(atoi(optarg)); - break; - case 's': - if (optarg[0] == 'S') - sleep_type = optarg[1] - '0'; - else - sleep_type = optarg[0] - '0'; - if (sleep_type < 1 || sleep_type > 4) - errx(EX_USAGE, "invalid sleep type (%d)", - sleep_type); - break; - case 'h': - default: - usage(prog); - /* NOTREACHED */ - } - } - argc -= optind; - argv += optind; - - if (sleep_type != -1) - acpi_sleep(sleep_type); - - close(acpifd); - exit (0); -} diff --git a/usr.sbin/acpi/acpidb/Makefile b/usr.sbin/acpi/acpidb/Makefile deleted file mode 100644 index 3f6cbb4..0000000 --- a/usr.sbin/acpi/acpidb/Makefile +++ /dev/null @@ -1,80 +0,0 @@ -# $FreeBSD$ - -PROG= acpidb -SRCS= acpidb.c - -# common -SRCS+= acfileio.c acgetline.c ahids.c ahuuids.c cmfsize.c - -# components/debugger -SRCS+= dbcmds.c dbconvert.c dbdisply.c dbexec.c dbfileio.c \ - dbhistry.c dbinput.c dbmethod.c dbnames.c dbobject.c \ - dbstats.c dbtest.c dbutils.c dbxface.c - -# components/disassembler -SRCS+= dmbuffer.c dmcstyle.c dmdeferred.c dmnames.c dmopcode.c \ - dmresrc.c dmresrcl.c dmresrcl2.c dmresrcs.c dmutils.c \ - dmwalk.c - -# components/dispatcher -SRCS+= dsargs.c dscontrol.c dsdebug.c dsfield.c dsinit.c \ - dsmethod.c dsmthdat.c dsobject.c dsopcode.c dsutils.c \ - dswexec.c dswload.c dswload2.c dswscope.c dswstate.c - -# components/events -SRCS+= evevent.c evglock.c evgpe.c evgpeblk.c evgpeinit.c \ - evgpeutil.c evhandler.c evmisc.c evregion.c evrgnini.c \ - evsci.c evxface.c evxfevnt.c evxfregn.c - -# components/executer -SRCS+= exconcat.c exconfig.c exconvrt.c excreate.c exdebug.c \ - exdump.c exfield.c exfldio.c exmisc.c exmutex.c \ - exnames.c exoparg1.c exoparg2.c exoparg3.c exoparg6.c \ - exprep.c exregion.c exresnte.c exresolv.c exresop.c \ - exstore.c exstoren.c exstorob.c exsystem.c extrace.c \ - exutils.c - -# components/hardware -SRCS+= hwacpi.c hwesleep.c hwgpe.c hwpci.c hwregs.c hwsleep.c \ - hwvalid.c hwxface.c hwxfsleep.c - -# components/namespace -SRCS+= nsaccess.c nsalloc.c nsarguments.c nsconvert.c nsdump.c \ - nseval.c nsinit.c nsload.c nsnames.c nsobject.c \ - nsparse.c nspredef.c nsprepkg.c nsrepair.c nsrepair2.c \ - nssearch.c nsutils.c nswalk.c nsxfeval.c nsxfname.c \ - nsxfobj.c - -# components/parser -SRCS+= psargs.c psloop.c psobject.c psopcode.c psopinfo.c \ - psparse.c psscope.c pstree.c psutils.c pswalk.c \ - psxface.c - -# components/resources -SRCS+= rsaddr.c rscalc.c rscreate.c rsdump.c rsdumpinfo.c \ - rsinfo.c rsio.c rsirq.c rslist.c rsmemory.c rsmisc.c \ - rsserial.c rsutils.c rsxface.c - -# components/tables -SRCS+= tbdata.c tbfadt.c tbfind.c tbinstal.c tbprint.c \ - tbutils.c tbxface.c tbxfload.c - -# components/utilities -SRCS+= utaddress.c utalloc.c utascii.c utbuffer.c utcache.c \ - utcopy.c utdebug.c utdecode.c utdelete.c uterror.c \ - uteval.c utexcep.c utglobal.c uthex.c utids.c utinit.c \ - utlock.c utmath.c utmisc.c utmutex.c utnonansi.c \ - utobject.c utosi.c utownerid.c utpredef.c utprint.c \ - utresrc.c utstate.c utstring.c uttrack.c utuuid.c \ - utxface.c utxferror.c utxfinit.c - -# os_specific/service_layers -SRCS+= oslibcfs.c osunixxf.c - -MAN= acpidb.8 -WARNS?= 3 - -CFLAGS+= -DACPI_EXEC_APP -fno-strict-aliasing -LIBADD= pthread - -.include <bsd.prog.mk> diff --git a/usr.sbin/acpi/acpidb/Makefile.depend b/usr.sbin/acpi/acpidb/Makefile.depend deleted file mode 100644 index 7b92dbd..0000000 --- a/usr.sbin/acpi/acpidb/Makefile.depend +++ /dev/null @@ -1,19 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - gnu/lib/csu \ - gnu/lib/libgcc \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - lib/libcompiler_rt \ - lib/libthr \ - - -.include <dirdeps.mk> - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/usr.sbin/acpi/acpidb/acpidb.8 b/usr.sbin/acpi/acpidb/acpidb.8 deleted file mode 100644 index 67fab31..0000000 --- a/usr.sbin/acpi/acpidb/acpidb.8 +++ /dev/null @@ -1,167 +0,0 @@ -.\"- -.\" Copyright (c) 2003 Nate Lawson -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer -.\" in this position and unchanged. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. The name of the author may not be used to endorse or promote products -.\" derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd August 7, 2003 -.Dt ACPIDB 8 -.Os -.Sh NAME -.Nm acpidb -.Nd ACPI DSDT debugger -.Sh SYNOPSIS -.Nm -.Ar input-file -.Sh DESCRIPTION -The -.Nm -utility is a debugger for the ACPI DSDT. -It can parse and execute various -AML methods and display the result. -.Sh COMMANDS -.Ss General-Purpose Commands -.Bl -tag -width indent -.It Ic Allocations -Display list of current memory allocations -.It Ic Dump Ar Address | Namepath Op Cm Byte | Word | Dword | Qword -Display ACPI objects or memory -.It Ic EnableAcpi -Enable ACPI (hardware) mode -.It Ic Help -Show various help screens -.It Ic History -Display command history buffer -.It Ic Level Ar DebugLevel Op Cm console -Get/Set debug level for file or console -.It Ic Locks -Current status of internal mutexes -.It Ic Quit No or Ic Exit -Exit the debugger -.It Ic Stats Op Cm Allocations | Memory | Misc | Objects | Tables -Display namespace and memory statistics -.It Ic Tables -Display info about loaded ACPI tables -.It Ic Unload Ar TableSig Op Ar Instance -Unload an ACPI table -.It Ic !\& Ar CommandNumber -Execute command from history buffer -.It Ic !! -Execute last command again -.El -.Ss Namespace Access Commands -.Bl -tag -width indent -.It Ic Event Cm F | G Ar Value -Generate AcpiEvent (Fixed/GPE) -.It Ic Find Ar Name -Find ACPI name(s) with wildcards -.Ql ( ?\& -is wildcard) -.It Ic Method -Display list of loaded control methods -.It Ic Namespace Oo Ar Addr | Path Oc Op Ar Depth -Display loaded namespace tree/subtree -.It Ic Notify Ar NamePath Value -Send a notification -.It Ic Objects Ar ObjectType -Display all objects of the given type -.It Ic Owner Ar OwnerId Op Ar Depth -Display loaded namespace by object owner -.It Ic Prefix Op Ar NamePath -Set or Get current execution prefix -.It Ic References Ar Addr -Find all references to object at addr -.It Ic Resources -Get and display resources -.It Ic Terminate -Delete namespace and all internal objects -.It Ic Thread Ar Threads Loops NamePath -Spawn threads to execute method(s) -.El -.Ss Control Method Execution Commands -.Bl -tag -width indent -.It Ic Arguments -.Pq Ic Args -Display method arguments -.It Ic Breakpoint Ar AmlOffset -Set an AML execution breakpoint -.It Ic Call -Run to next control method invocation -.It Ic Debug Ar Namepath Op Ar Arguments -Single Step a control method -.It Ic Execute Ar Namepath Op Arguments -Execute control method -.It Ic Go -Allow method to run to completion -.It Ic Information -Display info about the current method -.It Ic Into -Step into (not over) a method call -.It Ic List Op OpcodeCount -Display method ASL statements -.It Ic Locals -Display method local variables -.It Ic Results -Display method result stack -.It Ic Set Cm A | L Ar # Value -Set method data (Arguments/Locals) -.It Ic Stop -Terminate control method -.It Ic Tree -Display control method calling tree -.It Ic <Enter> -Single step next AML opcode (over calls) -.El -.Ss File I/O Commands -.Bl -tag -width indent -.It Ic Close -Close debug output file -.It Ic Open Ar Filename -Open a file for debug output -.It Ic Load Ar Filename -Load ACPI table from a file -.El -.Sh SEE ALSO -.Xr acpi 4 , -.Xr acpidump 8 , -.Xr iasl 8 -.Sh HISTORY -The -.Nm -utility first appeared in the -.Nm acpicatools -port. -It was imported for -.Fx 5.2 . -.Sh AUTHORS -.An -nosplit -The -.Nm -utility was written by -.An Mitsuru Iwasaki Aq Mt iwasaki@FreeBSD.org -and uses Intel ACPI-CA for the backend. -This manual page was written by -.An Nate Lawson . diff --git a/usr.sbin/acpi/acpidb/acpidb.c b/usr.sbin/acpi/acpidb/acpidb.c deleted file mode 100644 index fefe6da..0000000 --- a/usr.sbin/acpi/acpidb/acpidb.c +++ /dev/null @@ -1,540 +0,0 @@ -/*- - * Copyright (c) 2000-2002 Mitsuru IWASAKI <iwasaki@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include <sys/param.h> -#include <sys/queue.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <sys/stdint.h> -#include <sys/types.h> - -#include <assert.h> -#include <ctype.h> -#include <err.h> -#include <fcntl.h> -#include <limits.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> - -#include <contrib/dev/acpica/include/acpi.h> -#include <contrib/dev/acpica/include/accommon.h> -#include <contrib/dev/acpica/include/acapps.h> -#include <contrib/dev/acpica/include/acdebug.h> -#include <contrib/dev/acpica/include/amlresrc.h> - -/* - * Dummy DSDT Table Header - */ - -static ACPI_TABLE_HEADER dummy_dsdt_table = { - "DSDT", 123, 1, 123, "OEMID", "OEMTBLID", 1, "CRID", 1 -}; - -/* - * Region space I/O routines on virtual machine - */ - -static int aml_debug_prompt = 1; - -struct ACPIRegionContent { - TAILQ_ENTRY(ACPIRegionContent) links; - int regtype; - ACPI_PHYSICAL_ADDRESS addr; - UINT8 value; -}; - -TAILQ_HEAD(ACPIRegionContentList, ACPIRegionContent); -static struct ACPIRegionContentList RegionContentList; - -static int aml_simulation_initialized = 0; - -ACPI_PHYSICAL_ADDRESS AeLocalGetRootPointer(void); -void AeDoObjectOverrides(void); -void AeTableOverride(ACPI_TABLE_HEADER *, ACPI_TABLE_HEADER **); - -static void aml_simulation_init(void); -static int aml_simulate_regcontent_add(int regtype, - ACPI_PHYSICAL_ADDRESS addr, - UINT8 value); -static int aml_simulate_regcontent_read(int regtype, - ACPI_PHYSICAL_ADDRESS addr, - UINT8 *valuep); -static int aml_simulate_regcontent_write(int regtype, - ACPI_PHYSICAL_ADDRESS addr, - UINT8 *valuep); -static UINT64 aml_simulate_prompt(char *msg, UINT64 def_val); -static void aml_simulation_regload(const char *dumpfile); -static void aml_simulation_regdump(const char *dumpfile); - -/* Stubs to simplify linkage to the ACPICA core subsystem. */ -ACPI_PHYSICAL_ADDRESS -AcpiOsGetRootPointer(void) -{ - - return (0); -} - -void -AeDoObjectOverrides(void) -{ -} - -void -AeTableOverride(ACPI_TABLE_HEADER *ExistingTable, ACPI_TABLE_HEADER **NewTable) -{ -} - -void -MpSaveGpioInfo(ACPI_PARSE_OBJECT *Op, AML_RESOURCE *Resource, - UINT32 PinCount, UINT16 *PinList, char *DeviceName) -{ -} - -void -MpSaveSerialInfo(ACPI_PARSE_OBJECT *Op, AML_RESOURCE *Resource, - char *DeviceName) -{ -} - -static void -aml_simulation_init(void) -{ - - aml_simulation_initialized = 1; - TAILQ_INIT(&RegionContentList); - aml_simulation_regload("region.ini"); -} - -static int -aml_simulate_regcontent_add(int regtype, ACPI_PHYSICAL_ADDRESS addr, UINT8 value) -{ - struct ACPIRegionContent *rc; - - rc = malloc(sizeof(struct ACPIRegionContent)); - if (rc == NULL) { - return (-1); /* malloc fail */ - } - rc->regtype = regtype; - rc->addr = addr; - rc->value = value; - - TAILQ_INSERT_TAIL(&RegionContentList, rc, links); - return (0); -} - -static int -aml_simulate_regcontent_read(int regtype, ACPI_PHYSICAL_ADDRESS addr, UINT8 *valuep) -{ - struct ACPIRegionContent *rc; - - if (!aml_simulation_initialized) { - aml_simulation_init(); - } - TAILQ_FOREACH(rc, &RegionContentList, links) { - if (rc->regtype == regtype && rc->addr == addr) { - *valuep = rc->value; - return (1); /* found */ - } - } - - *valuep = 0; - return (aml_simulate_regcontent_add(regtype, addr, *valuep)); -} - -static int -aml_simulate_regcontent_write(int regtype, ACPI_PHYSICAL_ADDRESS addr, UINT8 *valuep) -{ - struct ACPIRegionContent *rc; - - if (!aml_simulation_initialized) { - aml_simulation_init(); - } - TAILQ_FOREACH(rc, &RegionContentList, links) { - if (rc->regtype == regtype && rc->addr == addr) { - rc->value = *valuep; - return (1); /* exists */ - } - } - - return (aml_simulate_regcontent_add(regtype, addr, *valuep)); -} - -static UINT64 -aml_simulate_prompt(char *msg, UINT64 def_val) -{ - char buf[16], *ep; - UINT64 val; - - val = def_val; - printf("DEBUG"); - if (msg != NULL) { - printf("%s", msg); - } - printf("(default: 0x%jx ", (uintmax_t)val); - printf(" / %ju) >>", (uintmax_t)val); - fflush(stdout); - - bzero(buf, sizeof buf); - while (1) { - if (read(0, buf, sizeof buf) == 0) { - continue; - } - if (buf[0] == '\n') { - break; /* use default value */ - } - if (buf[0] == '0' && buf[1] == 'x') { - val = strtoq(buf, &ep, 16); - } else { - val = strtoq(buf, &ep, 10); - } - break; - } - return (val); -} - -static void -aml_simulation_regload(const char *dumpfile) -{ - char buf[256], *np, *ep; - struct ACPIRegionContent rc; - FILE *fp; - - if (!aml_simulation_initialized) { - return; - } - - if ((fp = fopen(dumpfile, "r")) == NULL) { - return; - } - - while (fgets(buf, sizeof buf, fp) != NULL) { - np = buf; - /* reading region type */ - rc.regtype = strtoq(np, &ep, 10); - if (np == ep) { - continue; - } - np = ep; - - /* reading address */ - rc.addr = strtoq(np, &ep, 16); - if (np == ep) { - continue; - } - np = ep; - - /* reading value */ - rc.value = strtoq(np, &ep, 16); - if (np == ep) { - continue; - } - aml_simulate_regcontent_write(rc.regtype, rc.addr, &rc.value); - } - - fclose(fp); -} - -static void -aml_simulation_regdump(const char *dumpfile) -{ - struct ACPIRegionContent *rc; - FILE *fp; - - if (!aml_simulation_initialized) { - return; - } - if ((fp = fopen(dumpfile, "w")) == NULL) { - warn("%s", dumpfile); - return; - } - while (!TAILQ_EMPTY(&RegionContentList)) { - rc = TAILQ_FIRST(&RegionContentList); - fprintf(fp, "%d 0x%jx 0x%x\n", - rc->regtype, (uintmax_t)rc->addr, rc->value); - TAILQ_REMOVE(&RegionContentList, rc, links); - free(rc); - } - - fclose(fp); - TAILQ_INIT(&RegionContentList); -} - -/* - * Space handlers on virtual machine - */ - -static ACPI_STATUS -aml_vm_space_handler( - UINT32 SpaceID, - UINT32 Function, - ACPI_PHYSICAL_ADDRESS Address, - UINT32 BitWidth, - UINT64 *Value, - int Prompt) -{ - int state; - UINT8 val; - UINT64 value, i; - char msg[256]; - static const char *space_names[] = { - "SYSTEM_MEMORY", "SYSTEM_IO", "PCI_CONFIG", - "EC", "SMBUS", "CMOS", "PCI_BAR_TARGET"}; - - switch (Function) { - case ACPI_READ: - value = 0; - for (i = 0; (i * 8) < BitWidth; i++) { - state = aml_simulate_regcontent_read(SpaceID, - Address + i, &val); - if (state == -1) { - return (AE_NO_MEMORY); - } - value |= val << (i * 8); - } - *Value = value; - if (Prompt) { - sprintf(msg, "[read (%s, %2d, 0x%jx)]", - space_names[SpaceID], BitWidth, - (uintmax_t)Address); - *Value = aml_simulate_prompt(msg, value); - if (*Value != value) { - return(aml_vm_space_handler(SpaceID, - ACPI_WRITE, - Address, BitWidth, Value, 0)); - } - } - break; - - case ACPI_WRITE: - value = *Value; - if (Prompt) { - sprintf(msg, "[write(%s, %2d, 0x%jx)]", - space_names[SpaceID], BitWidth, - (uintmax_t)Address); - value = aml_simulate_prompt(msg, *Value); - } - *Value = value; - for (i = 0; (i * 8) < BitWidth; i++) { - val = value & 0xff; - state = aml_simulate_regcontent_write(SpaceID, - Address + i, &val); - if (state == -1) { - return (AE_NO_MEMORY); - } - value = value >> 8; - } - } - - return (AE_OK); -} - -#define DECLARE_VM_SPACE_HANDLER(name, id); \ -static ACPI_STATUS \ -aml_vm_space_handler_##name ( \ - UINT32 Function, \ - ACPI_PHYSICAL_ADDRESS Address, \ - UINT32 BitWidth, \ - UINT64 *Value) \ -{ \ - return (aml_vm_space_handler(id, Function, Address, \ - BitWidth, Value, aml_debug_prompt)); \ -} - -DECLARE_VM_SPACE_HANDLER(system_memory, ACPI_ADR_SPACE_SYSTEM_MEMORY); -DECLARE_VM_SPACE_HANDLER(system_io, ACPI_ADR_SPACE_SYSTEM_IO); -DECLARE_VM_SPACE_HANDLER(pci_config, ACPI_ADR_SPACE_PCI_CONFIG); -DECLARE_VM_SPACE_HANDLER(ec, ACPI_ADR_SPACE_EC); -DECLARE_VM_SPACE_HANDLER(smbus, ACPI_ADR_SPACE_SMBUS); -DECLARE_VM_SPACE_HANDLER(cmos, ACPI_ADR_SPACE_CMOS); -DECLARE_VM_SPACE_HANDLER(pci_bar_target,ACPI_ADR_SPACE_PCI_BAR_TARGET); - -/* - * Load DSDT data file and invoke debugger - */ - -static int -load_dsdt(const char *dsdtfile) -{ - char filetmp[PATH_MAX]; - ACPI_NEW_TABLE_DESC *list; - u_int8_t *code; - struct stat sb; - int dounlink, error, fd; - - fd = open(dsdtfile, O_RDONLY, 0); - if (fd == -1) { - perror("open"); - return (-1); - } - if (fstat(fd, &sb) == -1) { - perror("fstat"); - close(fd); - return (-1); - } - code = mmap(NULL, (size_t)sb.st_size, PROT_READ, MAP_PRIVATE, fd, (off_t)0); - close(fd); - if (code == NULL) { - perror("mmap"); - return (-1); - } - if ((error = AcpiInitializeSubsystem()) != AE_OK) { - munmap(code, (size_t)sb.st_size); - return (-1); - } - - /* - * make sure DSDT data contains table header or not. - */ - if (strncmp((char *)code, "DSDT", 4) == 0) { - dounlink = 0; - strlcpy(filetmp, dsdtfile, sizeof(filetmp)); - } else { - dounlink = 1; - mode_t mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - dummy_dsdt_table.Length = sizeof(ACPI_TABLE_HEADER) + sb.st_size; - if ((size_t)snprintf(filetmp, sizeof(filetmp), "%s.tmp", - dsdtfile) > sizeof(filetmp) - 1) { - fprintf(stderr, "file name too long\n"); - munmap(code, (size_t)sb.st_size); - return (-1); - } - fd = open(filetmp, O_WRONLY | O_CREAT | O_TRUNC, mode); - if (fd == -1) { - perror("open"); - munmap(code, (size_t)sb.st_size); - return (-1); - } - write(fd, &dummy_dsdt_table, sizeof(ACPI_TABLE_HEADER)); - - write(fd, code, sb.st_size); - close(fd); - } - munmap(code, (size_t)sb.st_size); - - /* - * Install the virtual machine version of address space handlers. - */ - if ((error = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, - ACPI_ADR_SPACE_SYSTEM_MEMORY, - (ACPI_ADR_SPACE_HANDLER)aml_vm_space_handler_system_memory, - NULL, NULL)) != AE_OK) { - fprintf(stderr, "could not initialise SystemMemory handler: %d\n", error); - return (-1); - } - if ((error = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, - ACPI_ADR_SPACE_SYSTEM_IO, - (ACPI_ADR_SPACE_HANDLER)aml_vm_space_handler_system_io, - NULL, NULL)) != AE_OK) { - fprintf(stderr, "could not initialise SystemIO handler: %d\n", error); - return (-1); - } - if ((error = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, - ACPI_ADR_SPACE_PCI_CONFIG, - (ACPI_ADR_SPACE_HANDLER)aml_vm_space_handler_pci_config, - NULL, NULL)) != AE_OK) { - fprintf(stderr, "could not initialise PciConfig handler: %d\n", error); - return (-1); - } - if ((error = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, - ACPI_ADR_SPACE_EC, - (ACPI_ADR_SPACE_HANDLER)aml_vm_space_handler_ec, - NULL, NULL)) != AE_OK) { - fprintf(stderr, "could not initialise EC handler: %d\n", error); - return (-1); - } - if ((error = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, - ACPI_ADR_SPACE_SMBUS, - (ACPI_ADR_SPACE_HANDLER)aml_vm_space_handler_smbus, - NULL, NULL)) != AE_OK) { - fprintf(stderr, "could not initialise SMBUS handler: %d\n", error); - return (-1); - } - if ((error = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, - ACPI_ADR_SPACE_CMOS, - (ACPI_ADR_SPACE_HANDLER)aml_vm_space_handler_cmos, - NULL, NULL)) != AE_OK) { - fprintf(stderr, "could not initialise CMOS handler: %d\n", error); - return (-1); - } - if ((error = AcpiInstallAddressSpaceHandler(ACPI_ROOT_OBJECT, - ACPI_ADR_SPACE_PCI_BAR_TARGET, - (ACPI_ADR_SPACE_HANDLER)aml_vm_space_handler_pci_bar_target, - NULL, NULL)) != AE_OK) { - fprintf(stderr, "could not initialise PCI BAR TARGET handler: %d\n", error); - return (-1); - } - - list = NULL; - AcGetAllTablesFromFile(filetmp, TRUE, &list); - - AcpiInitializeDebugger(); - AcpiGbl_DebuggerConfiguration = 0; - AcpiDbUserCommands(':', NULL); - - if (dounlink) { - unlink(filetmp); - } - - return (0); -} - -static void -usage(const char *progname) -{ - - printf("usage: %s dsdt_file\n", progname); - exit(1); -} - -int -main(int argc, char *argv[]) -{ - char *progname; - - progname = argv[0]; - - if (argc == 1) { - usage(progname); - } - - AcpiDbgLevel = ACPI_DEBUG_DEFAULT; - - /* - * Match kernel options for the interpreter. Global variable names - * can be found in acglobal.h. - */ - AcpiGbl_EnableInterpreterSlack = TRUE; - - aml_simulation_regload("region.ini"); - if (load_dsdt(argv[1]) == 0) { - aml_simulation_regdump("region.dmp"); - } - - return (0); -} diff --git a/usr.sbin/acpi/acpidump/Makefile b/usr.sbin/acpi/acpidump/Makefile deleted file mode 100644 index e258f8e..0000000 --- a/usr.sbin/acpi/acpidump/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $FreeBSD$ - -PROG= acpidump -MAN= acpidump.8 -SRCS= acpi.c acpi_user.c acpidump.c -WARNS?= 3 - -.include <bsd.prog.mk> diff --git a/usr.sbin/acpi/acpidump/Makefile.depend b/usr.sbin/acpi/acpidump/Makefile.depend deleted file mode 100644 index 3646e2e..0000000 --- a/usr.sbin/acpi/acpidump/Makefile.depend +++ /dev/null @@ -1,18 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - gnu/lib/csu \ - gnu/lib/libgcc \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - lib/libcompiler_rt \ - - -.include <dirdeps.mk> - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/usr.sbin/acpi/acpidump/acpi.c b/usr.sbin/acpi/acpidump/acpi.c deleted file mode 100644 index 076a8ff..0000000 --- a/usr.sbin/acpi/acpidump/acpi.c +++ /dev/null @@ -1,1602 +0,0 @@ -/*- - * Copyright (c) 1998 Doug Rabson - * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#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 <stdint.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include "acpidump.h" - -#define BEGIN_COMMENT "/*\n" -#define END_COMMENT " */\n" - -static void acpi_print_string(char *s, size_t length); -static void acpi_print_gas(ACPI_GENERIC_ADDRESS *gas); -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_madt(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_slit(ACPI_TABLE_HEADER *sdp); -static void acpi_print_srat_cpu(uint32_t apic_id, uint32_t proximity_domain, - uint32_t flags); -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_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; - -/* Strings used in the TCPA table */ -static const char *tcpa_event_type_strings[] = { - "PREBOOT Certificate", - "POST Code", - "Unused", - "No Action", - "Separator", - "Action", - "Event Tag", - "S-CRTM Contents", - "S-CRTM Version", - "CPU Microcode", - "Platform Config Flags", - "Table of Devices", - "Compact Hash", - "IPL", - "IPL Partition Data", - "Non-Host Code", - "Non-Host Config", - "Non-Host Info" -}; - -static const char *TCPA_pcclient_strings[] = { - "<undefined>", - "SMBIOS", - "BIS Certificate", - "POST BIOS ROM Strings", - "ESCD", - "CMOS", - "NVRAM", - "Option ROM Execute", - "Option ROM Configurateion", - "<undefined>", - "Option ROM Microcode Update ", - "S-CRTM Version String", - "S-CRTM Contents", - "POST Contents", - "Table of Devices", -}; - -#define PRINTFLAG_END() printflag_end() - -static char pf_sep = '{'; - -static void -printflag_end(void) -{ - - if (pf_sep != '{') { - printf("}"); - pf_sep = '{'; - } - printf("\n"); -} - -static void -printflag(uint64_t var, uint64_t mask, const char *name) -{ - - if (var & mask) { - printf("%c%s", pf_sep, name); - pf_sep = ','; - } -} - -static void -acpi_print_string(char *s, size_t length) -{ - int c; - - /* Trim trailing spaces and NULLs */ - while (length > 0 && (s[length - 1] == ' ' || s[length - 1] == '\0')) - length--; - - while (length--) { - c = *s++; - putchar(c); - } -} - -static void -acpi_print_gas(ACPI_GENERIC_ADDRESS *gas) -{ - switch(gas->SpaceId) { - case ACPI_GAS_MEMORY: - if (gas->BitWidth <= 32) - printf("0x%08x:%u[%u] (Memory)", - (u_int)gas->Address, gas->BitOffset, - gas->BitWidth); - else - printf("0x%016jx:%u[%u] (Memory)", - (uintmax_t)gas->Address, gas->BitOffset, - gas->BitWidth); - break; - case ACPI_GAS_IO: - printf("0x%02x:%u[%u] (IO)", (u_int)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%016jx (?)", (uintmax_t)gas->Address); - break; - } -} - -/* The FADT revision indicates whether we use the DSDT or X_DSDT addresses. */ -static int -acpi_get_fadt_revision(ACPI_TABLE_FADT *fadt) -{ - int fadt_revision; - - /* Set the FADT revision separately from the RSDP version. */ - if (addr_size == 8) { - fadt_revision = 2; - - /* - * A few systems (e.g., IBM T23) have an RSDP that claims - * revision 2 but the 64 bit addresses are invalid. If - * revision 2 and the 32 bit address is non-zero but the - * 32 and 64 bit versions don't match, prefer the 32 bit - * version for all subsequent tables. - */ - if (fadt->Facs != 0 && - (fadt->XFacs & 0xffffffff) != fadt->Facs) - fadt_revision = 1; - } else - fadt_revision = 1; - return (fadt_revision); -} - -static void -acpi_handle_fadt(ACPI_TABLE_HEADER *sdp) -{ - ACPI_TABLE_HEADER *dsdp; - ACPI_TABLE_FACS *facs; - ACPI_TABLE_FADT *fadt; - int fadt_revision; - - fadt = (ACPI_TABLE_FADT *)sdp; - acpi_print_fadt(sdp); - - fadt_revision = acpi_get_fadt_revision(fadt); - if (fadt_revision == 1) - facs = (ACPI_TABLE_FACS *)acpi_map_sdt(fadt->Facs); - else - facs = (ACPI_TABLE_FACS *)acpi_map_sdt(fadt->XFacs); - if (memcmp(facs->Signature, ACPI_SIG_FACS, 4) != 0 || facs->Length < 64) - errx(1, "FACS is corrupt"); - acpi_print_facs(facs); - - if (fadt_revision == 1) - dsdp = (ACPI_TABLE_HEADER *)acpi_map_sdt(fadt->Dsdt); - else - dsdp = (ACPI_TABLE_HEADER *)acpi_map_sdt(fadt->XDsdt); - if (acpi_checksum(dsdp, dsdp->Length)) - errx(1, "DSDT is corrupt"); - acpi_print_dsdt(dsdp); -} - -static void -acpi_walk_subtables(ACPI_TABLE_HEADER *table, void *first, - void (*action)(ACPI_SUBTABLE_HEADER *)) -{ - ACPI_SUBTABLE_HEADER *subtable; - char *end; - - subtable = first; - end = (char *)table + table->Length; - while ((char *)subtable < end) { - printf("\n"); - action(subtable); - subtable = (ACPI_SUBTABLE_HEADER *)((char *)subtable + - subtable->Length); - } -} - -static void -acpi_print_cpu(u_char cpu_id) -{ - - printf("\tACPI CPU="); - if (cpu_id == 0xff) - printf("ALL\n"); - else - printf("%d\n", (u_int)cpu_id); -} - -static void -acpi_print_cpu_uid(uint32_t uid, char *uid_string) -{ - - printf("\tUID=%d", uid); - if (uid_string != NULL) - printf(" (%s)", uid_string); - printf("\n"); -} - -static void -acpi_print_local_apic(uint32_t apic_id, uint32_t flags) -{ - - printf("\tFlags={"); - if (flags & ACPI_MADT_ENABLED) - printf("ENABLED"); - else - printf("DISABLED"); - printf("}\n"); - printf("\tAPIC ID=%d\n", apic_id); -} - -static void -acpi_print_io_apic(uint32_t apic_id, uint32_t int_base, uint64_t apic_addr) -{ - - printf("\tAPIC ID=%d\n", apic_id); - printf("\tINT BASE=%d\n", int_base); - printf("\tADDR=0x%016jx\n", (uintmax_t)apic_addr); -} - -static void -acpi_print_mps_flags(uint16_t flags) -{ - - printf("\tFlags={Polarity="); - switch (flags & ACPI_MADT_POLARITY_MASK) { - case ACPI_MADT_POLARITY_CONFORMS: - printf("conforming"); - break; - case ACPI_MADT_POLARITY_ACTIVE_HIGH: - printf("active-hi"); - break; - case ACPI_MADT_POLARITY_ACTIVE_LOW: - printf("active-lo"); - break; - default: - printf("0x%x", flags & ACPI_MADT_POLARITY_MASK); - break; - } - printf(", Trigger="); - switch (flags & ACPI_MADT_TRIGGER_MASK) { - case ACPI_MADT_TRIGGER_CONFORMS: - printf("conforming"); - break; - case ACPI_MADT_TRIGGER_EDGE: - printf("edge"); - break; - case ACPI_MADT_TRIGGER_LEVEL: - printf("level"); - break; - default: - printf("0x%x", (flags & ACPI_MADT_TRIGGER_MASK) >> 2); - } - printf("}\n"); -} - -static void -acpi_print_intr(uint32_t intr, uint16_t mps_flags) -{ - - printf("\tINTR=%d\n", intr); - acpi_print_mps_flags(mps_flags); -} - -static void -acpi_print_local_nmi(u_int lint, uint16_t mps_flags) -{ - - printf("\tLINT Pin=%d\n", lint); - acpi_print_mps_flags(mps_flags); -} - -static const char *apic_types[] = { "Local APIC", "IO APIC", "INT Override", - "NMI", "Local APIC NMI", - "Local APIC Override", "IO SAPIC", - "Local SAPIC", "Platform Interrupt", - "Local X2APIC", "Local X2APIC NMI" }; -static const char *platform_int_types[] = { "0 (unknown)", "PMI", "INIT", - "Corrected Platform Error" }; - -static void -acpi_print_madt(ACPI_SUBTABLE_HEADER *mp) -{ - ACPI_MADT_LOCAL_APIC *lapic; - ACPI_MADT_IO_APIC *ioapic; - ACPI_MADT_INTERRUPT_OVERRIDE *over; - ACPI_MADT_NMI_SOURCE *nmi; - ACPI_MADT_LOCAL_APIC_NMI *lapic_nmi; - ACPI_MADT_LOCAL_APIC_OVERRIDE *lapic_over; - ACPI_MADT_IO_SAPIC *iosapic; - ACPI_MADT_LOCAL_SAPIC *lsapic; - ACPI_MADT_INTERRUPT_SOURCE *isrc; - ACPI_MADT_LOCAL_X2APIC *x2apic; - ACPI_MADT_LOCAL_X2APIC_NMI *x2apic_nmi; - - if (mp->Type < sizeof(apic_types) / sizeof(apic_types[0])) - printf("\tType=%s\n", apic_types[mp->Type]); - else - printf("\tType=%d (unknown)\n", mp->Type); - switch (mp->Type) { - case ACPI_MADT_TYPE_LOCAL_APIC: - lapic = (ACPI_MADT_LOCAL_APIC *)mp; - acpi_print_cpu(lapic->ProcessorId); - acpi_print_local_apic(lapic->Id, lapic->LapicFlags); - break; - case ACPI_MADT_TYPE_IO_APIC: - ioapic = (ACPI_MADT_IO_APIC *)mp; - acpi_print_io_apic(ioapic->Id, ioapic->GlobalIrqBase, - ioapic->Address); - break; - case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: - over = (ACPI_MADT_INTERRUPT_OVERRIDE *)mp; - printf("\tBUS=%d\n", (u_int)over->Bus); - printf("\tIRQ=%d\n", (u_int)over->SourceIrq); - acpi_print_intr(over->GlobalIrq, over->IntiFlags); - break; - case ACPI_MADT_TYPE_NMI_SOURCE: - nmi = (ACPI_MADT_NMI_SOURCE *)mp; - acpi_print_intr(nmi->GlobalIrq, nmi->IntiFlags); - break; - case ACPI_MADT_TYPE_LOCAL_APIC_NMI: - lapic_nmi = (ACPI_MADT_LOCAL_APIC_NMI *)mp; - acpi_print_cpu(lapic_nmi->ProcessorId); - acpi_print_local_nmi(lapic_nmi->Lint, lapic_nmi->IntiFlags); - break; - case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: - lapic_over = (ACPI_MADT_LOCAL_APIC_OVERRIDE *)mp; - printf("\tLocal APIC ADDR=0x%016jx\n", - (uintmax_t)lapic_over->Address); - break; - case ACPI_MADT_TYPE_IO_SAPIC: - iosapic = (ACPI_MADT_IO_SAPIC *)mp; - acpi_print_io_apic(iosapic->Id, iosapic->GlobalIrqBase, - iosapic->Address); - break; - case ACPI_MADT_TYPE_LOCAL_SAPIC: - lsapic = (ACPI_MADT_LOCAL_SAPIC *)mp; - acpi_print_cpu(lsapic->ProcessorId); - acpi_print_local_apic(lsapic->Id, lsapic->LapicFlags); - printf("\tAPIC EID=%d\n", (u_int)lsapic->Eid); - if (mp->Length > __offsetof(ACPI_MADT_LOCAL_SAPIC, Uid)) - acpi_print_cpu_uid(lsapic->Uid, lsapic->UidString); - break; - case ACPI_MADT_TYPE_INTERRUPT_SOURCE: - isrc = (ACPI_MADT_INTERRUPT_SOURCE *)mp; - if (isrc->Type < sizeof(platform_int_types) / - sizeof(platform_int_types[0])) - printf("\tType=%s\n", platform_int_types[isrc->Type]); - else - printf("\tType=%d (unknown)\n", isrc->Type); - printf("\tAPIC ID=%d\n", (u_int)isrc->Id); - printf("\tAPIC EID=%d\n", (u_int)isrc->Eid); - printf("\tSAPIC Vector=%d\n", (u_int)isrc->IoSapicVector); - acpi_print_intr(isrc->GlobalIrq, isrc->IntiFlags); - break; - case ACPI_MADT_TYPE_LOCAL_X2APIC: - x2apic = (ACPI_MADT_LOCAL_X2APIC *)mp; - acpi_print_cpu_uid(x2apic->Uid, NULL); - acpi_print_local_apic(x2apic->LocalApicId, x2apic->LapicFlags); - break; - case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: - x2apic_nmi = (ACPI_MADT_LOCAL_X2APIC_NMI *)mp; - acpi_print_cpu_uid(x2apic_nmi->Uid, NULL); - acpi_print_local_nmi(x2apic_nmi->Lint, x2apic_nmi->IntiFlags); - break; - } -} - -static void -acpi_handle_madt(ACPI_TABLE_HEADER *sdp) -{ - ACPI_TABLE_MADT *madt; - - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - madt = (ACPI_TABLE_MADT *)sdp; - printf("\tLocal APIC ADDR=0x%08x\n", madt->Address); - printf("\tFlags={"); - if (madt->Flags & ACPI_MADT_PCAT_COMPAT) - printf("PC-AT"); - printf("}\n"); - acpi_walk_subtables(sdp, (madt + 1), acpi_print_madt); - printf(END_COMMENT); -} - -static void -acpi_handle_hpet(ACPI_TABLE_HEADER *sdp) -{ - ACPI_TABLE_HPET *hpet; - - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - hpet = (ACPI_TABLE_HPET *)sdp; - printf("\tHPET Number=%d\n", hpet->Sequence); - printf("\tADDR="); - acpi_print_gas(&hpet->Address); - printf("\tHW Rev=0x%x\n", hpet->Id & ACPI_HPET_ID_HARDWARE_REV_ID); - printf("\tComparators=%d\n", (hpet->Id & ACPI_HPET_ID_COMPARATORS) >> - 8); - printf("\tCounter Size=%d\n", hpet->Id & ACPI_HPET_ID_COUNT_SIZE_CAP ? - 1 : 0); - printf("\tLegacy IRQ routing capable={"); - if (hpet->Id & ACPI_HPET_ID_LEGACY_CAPABLE) - printf("TRUE}\n"); - else - printf("FALSE}\n"); - printf("\tPCI Vendor ID=0x%04x\n", hpet->Id >> 16); - printf("\tMinimal Tick=%d\n", hpet->MinimumTick); - printf("\tFlags=0x%02x\n", hpet->Flags); - printf(END_COMMENT); -} - -static void -acpi_handle_ecdt(ACPI_TABLE_HEADER *sdp) -{ - ACPI_TABLE_ECDT *ecdt; - - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - ecdt = (ACPI_TABLE_ECDT *)sdp; - printf("\tEC_CONTROL="); - acpi_print_gas(&ecdt->Control); - printf("\n\tEC_DATA="); - acpi_print_gas(&ecdt->Data); - printf("\n\tUID=%#x, ", ecdt->Uid); - printf("GPE_BIT=%#x\n", ecdt->Gpe); - printf("\tEC_ID=%s\n", ecdt->Id); - printf(END_COMMENT); -} - -static void -acpi_handle_mcfg(ACPI_TABLE_HEADER *sdp) -{ - ACPI_TABLE_MCFG *mcfg; - ACPI_MCFG_ALLOCATION *alloc; - u_int i, entries; - - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - mcfg = (ACPI_TABLE_MCFG *)sdp; - entries = (sdp->Length - sizeof(ACPI_TABLE_MCFG)) / - sizeof(ACPI_MCFG_ALLOCATION); - alloc = (ACPI_MCFG_ALLOCATION *)(mcfg + 1); - for (i = 0; i < entries; i++, alloc++) { - printf("\n"); - printf("\tBase Address=0x%016jx\n", (uintmax_t)alloc->Address); - printf("\tSegment Group=0x%04x\n", alloc->PciSegment); - printf("\tStart Bus=%d\n", alloc->StartBusNumber); - printf("\tEnd Bus=%d\n", alloc->EndBusNumber); - } - printf(END_COMMENT); -} - -static void -acpi_handle_slit(ACPI_TABLE_HEADER *sdp) -{ - ACPI_TABLE_SLIT *slit; - UINT64 i, j; - - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - slit = (ACPI_TABLE_SLIT *)sdp; - printf("\tLocality Count=%ju\n", (uintmax_t)slit->LocalityCount); - printf("\n\t "); - for (i = 0; i < slit->LocalityCount; i++) - printf(" %3ju", (uintmax_t)i); - printf("\n\t +"); - for (i = 0; i < slit->LocalityCount; i++) - printf("----"); - printf("\n"); - for (i = 0; i < slit->LocalityCount; i++) { - printf("\t %3ju |", (uintmax_t)i); - for (j = 0; j < slit->LocalityCount; j++) - printf(" %3d", - slit->Entry[i * slit->LocalityCount + j]); - printf("\n"); - } - printf(END_COMMENT); -} - -static void -acpi_print_srat_cpu(uint32_t apic_id, uint32_t proximity_domain, - uint32_t flags) -{ - - printf("\tFlags={"); - if (flags & ACPI_SRAT_CPU_ENABLED) - printf("ENABLED"); - else - printf("DISABLED"); - printf("}\n"); - printf("\tAPIC ID=%d\n", apic_id); - printf("\tProximity Domain=%d\n", proximity_domain); -} - -static char * -acpi_tcpa_evname(struct TCPAevent *event) -{ - struct TCPApc_event *pc_event; - char *eventname = NULL; - - pc_event = (struct TCPApc_event *)(event + 1); - - switch(event->event_type) { - case PREBOOT: - case POST_CODE: - case UNUSED: - case NO_ACTION: - case SEPARATOR: - case SCRTM_CONTENTS: - case SCRTM_VERSION: - case CPU_MICROCODE: - case PLATFORM_CONFIG_FLAGS: - case TABLE_OF_DEVICES: - case COMPACT_HASH: - case IPL: - case IPL_PARTITION_DATA: - case NONHOST_CODE: - case NONHOST_CONFIG: - case NONHOST_INFO: - asprintf(&eventname, "%s", - tcpa_event_type_strings[event->event_type]); - break; - - case ACTION: - eventname = calloc(event->event_size + 1, sizeof(char)); - memcpy(eventname, pc_event, event->event_size); - break; - - case EVENT_TAG: - switch (pc_event->event_id) { - case SMBIOS: - case BIS_CERT: - case CMOS: - case NVRAM: - case OPTION_ROM_EXEC: - case OPTION_ROM_CONFIG: - case S_CRTM_VERSION: - case POST_BIOS_ROM: - case ESCD: - case OPTION_ROM_MICROCODE: - case S_CRTM_CONTENTS: - case POST_CONTENTS: - asprintf(&eventname, "%s", - TCPA_pcclient_strings[pc_event->event_id]); - break; - - default: - asprintf(&eventname, "<unknown tag 0x%02x>", - pc_event->event_id); - break; - } - break; - - default: - asprintf(&eventname, "<unknown 0x%02x>", event->event_type); - break; - } - - return eventname; -} - -static void -acpi_print_tcpa(struct TCPAevent *event) -{ - int i; - char *eventname; - - eventname = acpi_tcpa_evname(event); - - printf("\t%d", event->pcr_index); - printf(" 0x"); - for (i = 0; i < 20; i++) - printf("%02x", event->pcr_value[i]); - printf(" [%s]\n", eventname ? eventname : "<unknown>"); - - free(eventname); -} - -static void -acpi_handle_tcpa(ACPI_TABLE_HEADER *sdp) -{ - struct TCPAbody *tcpa; - struct TCPAevent *event; - uintmax_t len, paddr; - unsigned char *vaddr = NULL; - unsigned char *vend = NULL; - - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - tcpa = (struct TCPAbody *) sdp; - - switch (tcpa->platform_class) { - case ACPI_TCPA_BIOS_CLIENT: - len = tcpa->client.log_max_len; - paddr = tcpa->client.log_start_addr; - break; - - case ACPI_TCPA_BIOS_SERVER: - len = tcpa->server.log_max_len; - paddr = tcpa->server.log_start_addr; - break; - - default: - printf("XXX"); - printf(END_COMMENT); - return; - } - printf("\tClass %u Base Address 0x%jx Length %ju\n\n", - tcpa->platform_class, paddr, len); - - if (len == 0) { - printf("\tEmpty TCPA table\n"); - printf(END_COMMENT); - return; - } - if(sdp->Revision == 1){ - printf("\tOLD TCPA spec log found. Dumping not supported.\n"); - printf(END_COMMENT); - return; - } - - vaddr = (unsigned char *)acpi_map_physical(paddr, len); - vend = vaddr + len; - - while (vaddr != NULL) { - if ((vaddr + sizeof(struct TCPAevent) >= vend)|| - (vaddr + sizeof(struct TCPAevent) < vaddr)) - break; - event = (struct TCPAevent *)(void *)vaddr; - if (vaddr + event->event_size >= vend) - break; - if (vaddr + event->event_size < vaddr) - break; - if (event->event_type == 0 && event->event_size == 0) - break; -#if 0 - { - unsigned int i, j, k; - - printf("\n\tsize %d\n\t\t%p ", event->event_size, vaddr); - for (j = 0, i = 0; i < - sizeof(struct TCPAevent) + event->event_size; i++) { - printf("%02x ", vaddr[i]); - if ((i+1) % 8 == 0) { - for (k = 0; k < 8; k++) - printf("%c", isprint(vaddr[j+k]) ? - vaddr[j+k] : '.'); - printf("\n\t\t%p ", &vaddr[i + 1]); - j = i + 1; - } - } - printf("\n"); } -#endif - acpi_print_tcpa(event); - - vaddr += sizeof(struct TCPAevent) + event->event_size; - } - - printf(END_COMMENT); -} - -static const char * -devscope_type2str(int type) -{ - static char typebuf[16]; - - switch (type) { - case 1: - return ("PCI Endpoint Device"); - case 2: - return ("PCI Sub-Hierarchy"); - case 3: - return ("IOAPIC"); - case 4: - return ("HPET"); - default: - snprintf(typebuf, sizeof(typebuf), "%d", type); - return (typebuf); - } -} - -static int -acpi_handle_dmar_devscope(void *addr, int remaining) -{ - char sep; - int pathlen; - ACPI_DMAR_PCI_PATH *path, *pathend; - ACPI_DMAR_DEVICE_SCOPE *devscope = addr; - - if (remaining < (int)sizeof(ACPI_DMAR_DEVICE_SCOPE)) - return (-1); - - if (remaining < devscope->Length) - return (-1); - - printf("\n"); - printf("\t\tType=%s\n", devscope_type2str(devscope->EntryType)); - printf("\t\tLength=%d\n", devscope->Length); - printf("\t\tEnumerationId=%d\n", devscope->EnumerationId); - printf("\t\tStartBusNumber=%d\n", devscope->Bus); - - path = (ACPI_DMAR_PCI_PATH *)(devscope + 1); - pathlen = devscope->Length - sizeof(ACPI_DMAR_DEVICE_SCOPE); - pathend = path + pathlen / sizeof(ACPI_DMAR_PCI_PATH); - if (path < pathend) { - sep = '{'; - printf("\t\tPath="); - do { - printf("%c%d:%d", sep, path->Device, path->Function); - sep=','; - path++; - } while (path < pathend); - printf("}\n"); - } - - return (devscope->Length); -} - -static void -acpi_handle_dmar_drhd(ACPI_DMAR_HARDWARE_UNIT *drhd) -{ - char *cp; - int remaining, consumed; - - printf("\n"); - printf("\tType=DRHD\n"); - printf("\tLength=%d\n", drhd->Header.Length); - -#define PRINTFLAG(var, flag) printflag((var), ACPI_DMAR_## flag, #flag) - - printf("\tFlags="); - PRINTFLAG(drhd->Flags, INCLUDE_ALL); - PRINTFLAG_END(); - -#undef PRINTFLAG - - printf("\tSegment=%d\n", drhd->Segment); - printf("\tAddress=0x%016jx\n", (uintmax_t)drhd->Address); - - remaining = drhd->Header.Length - sizeof(ACPI_DMAR_HARDWARE_UNIT); - if (remaining > 0) - printf("\tDevice Scope:"); - while (remaining > 0) { - cp = (char *)drhd + drhd->Header.Length - remaining; - consumed = acpi_handle_dmar_devscope(cp, remaining); - if (consumed <= 0) - break; - else - remaining -= consumed; - } -} - -static void -acpi_handle_dmar_rmrr(ACPI_DMAR_RESERVED_MEMORY *rmrr) -{ - char *cp; - int remaining, consumed; - - printf("\n"); - printf("\tType=RMRR\n"); - printf("\tLength=%d\n", rmrr->Header.Length); - printf("\tSegment=%d\n", rmrr->Segment); - printf("\tBaseAddress=0x%016jx\n", (uintmax_t)rmrr->BaseAddress); - printf("\tLimitAddress=0x%016jx\n", (uintmax_t)rmrr->EndAddress); - - remaining = rmrr->Header.Length - sizeof(ACPI_DMAR_RESERVED_MEMORY); - if (remaining > 0) - printf("\tDevice Scope:"); - while (remaining > 0) { - cp = (char *)rmrr + rmrr->Header.Length - remaining; - consumed = acpi_handle_dmar_devscope(cp, remaining); - if (consumed <= 0) - break; - else - remaining -= consumed; - } -} - -static void -acpi_handle_dmar_atsr(ACPI_DMAR_ATSR *atsr) -{ - char *cp; - int remaining, consumed; - - printf("\n"); - printf("\tType=ATSR\n"); - printf("\tLength=%d\n", atsr->Header.Length); - -#define PRINTFLAG(var, flag) printflag((var), ACPI_DMAR_## flag, #flag) - - printf("\tFlags="); - PRINTFLAG(atsr->Flags, ALL_PORTS); - PRINTFLAG_END(); - -#undef PRINTFLAG - - printf("\tSegment=%d\n", atsr->Segment); - - remaining = atsr->Header.Length - sizeof(ACPI_DMAR_ATSR); - if (remaining > 0) - printf("\tDevice Scope:"); - while (remaining > 0) { - cp = (char *)atsr + atsr->Header.Length - remaining; - consumed = acpi_handle_dmar_devscope(cp, remaining); - if (consumed <= 0) - break; - else - remaining -= consumed; - } -} - -static void -acpi_handle_dmar_rhsa(ACPI_DMAR_RHSA *rhsa) -{ - - printf("\n"); - printf("\tType=RHSA\n"); - printf("\tLength=%d\n", rhsa->Header.Length); - printf("\tBaseAddress=0x%016jx\n", (uintmax_t)rhsa->BaseAddress); - printf("\tProximityDomain=0x%08x\n", rhsa->ProximityDomain); -} - -static int -acpi_handle_dmar_remapping_structure(void *addr, int remaining) -{ - ACPI_DMAR_HEADER *hdr = addr; - - if (remaining < (int)sizeof(ACPI_DMAR_HEADER)) - return (-1); - - if (remaining < hdr->Length) - return (-1); - - switch (hdr->Type) { - case ACPI_DMAR_TYPE_HARDWARE_UNIT: - acpi_handle_dmar_drhd(addr); - break; - case ACPI_DMAR_TYPE_RESERVED_MEMORY: - acpi_handle_dmar_rmrr(addr); - break; - case ACPI_DMAR_TYPE_ROOT_ATS: - acpi_handle_dmar_atsr(addr); - break; - case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: - acpi_handle_dmar_rhsa(addr); - break; - default: - printf("\n"); - printf("\tType=%d\n", hdr->Type); - printf("\tLength=%d\n", hdr->Length); - break; - } - return (hdr->Length); -} - -#ifndef ACPI_DMAR_X2APIC_OPT_OUT -#define ACPI_DMAR_X2APIC_OPT_OUT (0x2) -#endif - -static void -acpi_handle_dmar(ACPI_TABLE_HEADER *sdp) -{ - char *cp; - int remaining, consumed; - ACPI_TABLE_DMAR *dmar; - - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - dmar = (ACPI_TABLE_DMAR *)sdp; - printf("\tHost Address Width=%d\n", dmar->Width + 1); - -#define PRINTFLAG(var, flag) printflag((var), ACPI_DMAR_## flag, #flag) - - printf("\tFlags="); - PRINTFLAG(dmar->Flags, INTR_REMAP); - PRINTFLAG(dmar->Flags, X2APIC_OPT_OUT); - PRINTFLAG_END(); - -#undef PRINTFLAG - - remaining = sdp->Length - sizeof(ACPI_TABLE_DMAR); - while (remaining > 0) { - cp = (char *)sdp + sdp->Length - remaining; - consumed = acpi_handle_dmar_remapping_structure(cp, remaining); - if (consumed <= 0) - break; - else - remaining -= consumed; - } - - printf(END_COMMENT); -} - -static void -acpi_print_srat_memory(ACPI_SRAT_MEM_AFFINITY *mp) -{ - - printf("\tFlags={"); - if (mp->Flags & ACPI_SRAT_MEM_ENABLED) - printf("ENABLED"); - else - printf("DISABLED"); - if (mp->Flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) - printf(",HOT_PLUGGABLE"); - if (mp->Flags & ACPI_SRAT_MEM_NON_VOLATILE) - printf(",NON_VOLATILE"); - printf("}\n"); - printf("\tBase Address=0x%016jx\n", (uintmax_t)mp->BaseAddress); - printf("\tLength=0x%016jx\n", (uintmax_t)mp->Length); - printf("\tProximity Domain=%d\n", mp->ProximityDomain); -} - -static const char *srat_types[] = { "CPU", "Memory", "X2APIC" }; - -static void -acpi_print_srat(ACPI_SUBTABLE_HEADER *srat) -{ - ACPI_SRAT_CPU_AFFINITY *cpu; - ACPI_SRAT_X2APIC_CPU_AFFINITY *x2apic; - - if (srat->Type < sizeof(srat_types) / sizeof(srat_types[0])) - printf("\tType=%s\n", srat_types[srat->Type]); - else - printf("\tType=%d (unknown)\n", srat->Type); - switch (srat->Type) { - case ACPI_SRAT_TYPE_CPU_AFFINITY: - cpu = (ACPI_SRAT_CPU_AFFINITY *)srat; - acpi_print_srat_cpu(cpu->ApicId, - cpu->ProximityDomainHi[2] << 24 | - cpu->ProximityDomainHi[1] << 16 | - cpu->ProximityDomainHi[0] << 0 | - cpu->ProximityDomainLo, cpu->Flags); - break; - case ACPI_SRAT_TYPE_MEMORY_AFFINITY: - acpi_print_srat_memory((ACPI_SRAT_MEM_AFFINITY *)srat); - break; - case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY: - x2apic = (ACPI_SRAT_X2APIC_CPU_AFFINITY *)srat; - acpi_print_srat_cpu(x2apic->ApicId, x2apic->ProximityDomain, - x2apic->Flags); - break; - } -} - -static void -acpi_handle_srat(ACPI_TABLE_HEADER *sdp) -{ - ACPI_TABLE_SRAT *srat; - - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - srat = (ACPI_TABLE_SRAT *)sdp; - printf("\tTable Revision=%d\n", srat->TableRevision); - acpi_walk_subtables(sdp, (srat + 1), acpi_print_srat); - printf(END_COMMENT); -} - -static void -acpi_print_sdt(ACPI_TABLE_HEADER *sdp) -{ - printf(" "); - acpi_print_string(sdp->Signature, ACPI_NAME_SIZE); - printf(": Length=%d, Revision=%d, Checksum=%d,\n", - sdp->Length, sdp->Revision, sdp->Checksum); - printf("\tOEMID="); - acpi_print_string(sdp->OemId, ACPI_OEM_ID_SIZE); - printf(", OEM Table ID="); - acpi_print_string(sdp->OemTableId, ACPI_OEM_TABLE_ID_SIZE); - printf(", OEM Revision=0x%x,\n", sdp->OemRevision); - printf("\tCreator ID="); - acpi_print_string(sdp->AslCompilerId, ACPI_NAME_SIZE); - printf(", Creator Revision=0x%x\n", sdp->AslCompilerRevision); -} - -static void -acpi_print_rsdt(ACPI_TABLE_HEADER *rsdp) -{ - ACPI_TABLE_RSDT *rsdt; - ACPI_TABLE_XSDT *xsdt; - int i, entries; - - rsdt = (ACPI_TABLE_RSDT *)rsdp; - xsdt = (ACPI_TABLE_XSDT *)rsdp; - printf(BEGIN_COMMENT); - acpi_print_sdt(rsdp); - entries = (rsdp->Length - sizeof(ACPI_TABLE_HEADER)) / addr_size; - printf("\tEntries={ "); - for (i = 0; i < entries; i++) { - if (i > 0) - printf(", "); - if (addr_size == 4) - printf("0x%08x", le32toh(rsdt->TableOffsetEntry[i])); - else - printf("0x%016jx", - (uintmax_t)le64toh(xsdt->TableOffsetEntry[i])); - } - printf(" }\n"); - printf(END_COMMENT); -} - -static const char *acpi_pm_profiles[] = { - "Unspecified", "Desktop", "Mobile", "Workstation", - "Enterprise Server", "SOHO Server", "Appliance PC" -}; - -static void -acpi_print_fadt(ACPI_TABLE_HEADER *sdp) -{ - ACPI_TABLE_FADT *fadt; - const char *pm; - - fadt = (ACPI_TABLE_FADT *)sdp; - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - printf(" \tFACS=0x%x, DSDT=0x%x\n", fadt->Facs, - fadt->Dsdt); - printf("\tINT_MODEL=%s\n", fadt->Model ? "APIC" : "PIC"); - if (fadt->PreferredProfile >= sizeof(acpi_pm_profiles) / sizeof(char *)) - pm = "Reserved"; - else - pm = acpi_pm_profiles[fadt->PreferredProfile]; - printf("\tPreferred_PM_Profile=%s (%d)\n", pm, fadt->PreferredProfile); - printf("\tSCI_INT=%d\n", fadt->SciInterrupt); - printf("\tSMI_CMD=0x%x, ", fadt->SmiCommand); - printf("ACPI_ENABLE=0x%x, ", fadt->AcpiEnable); - printf("ACPI_DISABLE=0x%x, ", fadt->AcpiDisable); - printf("S4BIOS_REQ=0x%x\n", fadt->S4BiosRequest); - printf("\tPSTATE_CNT=0x%x\n", fadt->PstateControl); - printf("\tPM1a_EVT_BLK=0x%x-0x%x\n", - fadt->Pm1aEventBlock, - fadt->Pm1aEventBlock + fadt->Pm1EventLength - 1); - if (fadt->Pm1bEventBlock != 0) - printf("\tPM1b_EVT_BLK=0x%x-0x%x\n", - fadt->Pm1bEventBlock, - fadt->Pm1bEventBlock + fadt->Pm1EventLength - 1); - printf("\tPM1a_CNT_BLK=0x%x-0x%x\n", - fadt->Pm1aControlBlock, - fadt->Pm1aControlBlock + fadt->Pm1ControlLength - 1); - if (fadt->Pm1bControlBlock != 0) - printf("\tPM1b_CNT_BLK=0x%x-0x%x\n", - fadt->Pm1bControlBlock, - fadt->Pm1bControlBlock + fadt->Pm1ControlLength - 1); - if (fadt->Pm2ControlBlock != 0) - printf("\tPM2_CNT_BLK=0x%x-0x%x\n", - fadt->Pm2ControlBlock, - fadt->Pm2ControlBlock + fadt->Pm2ControlLength - 1); - printf("\tPM_TMR_BLK=0x%x-0x%x\n", - fadt->PmTimerBlock, - fadt->PmTimerBlock + fadt->PmTimerLength - 1); - if (fadt->Gpe0Block != 0) - printf("\tGPE0_BLK=0x%x-0x%x\n", - fadt->Gpe0Block, - fadt->Gpe0Block + fadt->Gpe0BlockLength - 1); - if (fadt->Gpe1Block != 0) - printf("\tGPE1_BLK=0x%x-0x%x, GPE1_BASE=%d\n", - fadt->Gpe1Block, - fadt->Gpe1Block + fadt->Gpe1BlockLength - 1, - fadt->Gpe1Base); - if (fadt->CstControl != 0) - printf("\tCST_CNT=0x%x\n", fadt->CstControl); - printf("\tP_LVL2_LAT=%d us, P_LVL3_LAT=%d us\n", - fadt->C2Latency, fadt->C3Latency); - printf("\tFLUSH_SIZE=%d, FLUSH_STRIDE=%d\n", - fadt->FlushSize, fadt->FlushStride); - printf("\tDUTY_OFFSET=%d, DUTY_WIDTH=%d\n", - fadt->DutyOffset, fadt->DutyWidth); - printf("\tDAY_ALRM=%d, MON_ALRM=%d, CENTURY=%d\n", - fadt->DayAlarm, fadt->MonthAlarm, fadt->Century); - -#define PRINTFLAG(var, flag) printflag((var), ACPI_FADT_## flag, #flag) - - printf("\tIAPC_BOOT_ARCH="); - PRINTFLAG(fadt->BootFlags, LEGACY_DEVICES); - PRINTFLAG(fadt->BootFlags, 8042); - PRINTFLAG(fadt->BootFlags, NO_VGA); - PRINTFLAG(fadt->BootFlags, NO_MSI); - PRINTFLAG(fadt->BootFlags, NO_ASPM); - PRINTFLAG_END(); - - printf("\tFlags="); - PRINTFLAG(fadt->Flags, WBINVD); - PRINTFLAG(fadt->Flags, WBINVD_FLUSH); - PRINTFLAG(fadt->Flags, C1_SUPPORTED); - PRINTFLAG(fadt->Flags, C2_MP_SUPPORTED); - PRINTFLAG(fadt->Flags, POWER_BUTTON); - PRINTFLAG(fadt->Flags, SLEEP_BUTTON); - PRINTFLAG(fadt->Flags, FIXED_RTC); - PRINTFLAG(fadt->Flags, S4_RTC_WAKE); - PRINTFLAG(fadt->Flags, 32BIT_TIMER); - PRINTFLAG(fadt->Flags, DOCKING_SUPPORTED); - PRINTFLAG(fadt->Flags, RESET_REGISTER); - PRINTFLAG(fadt->Flags, SEALED_CASE); - PRINTFLAG(fadt->Flags, HEADLESS); - PRINTFLAG(fadt->Flags, SLEEP_TYPE); - PRINTFLAG(fadt->Flags, PCI_EXPRESS_WAKE); - PRINTFLAG(fadt->Flags, PLATFORM_CLOCK); - PRINTFLAG(fadt->Flags, S4_RTC_VALID); - PRINTFLAG(fadt->Flags, REMOTE_POWER_ON); - PRINTFLAG(fadt->Flags, APIC_CLUSTER); - PRINTFLAG(fadt->Flags, APIC_PHYSICAL); - PRINTFLAG_END(); - -#undef PRINTFLAG - - if (fadt->Flags & ACPI_FADT_RESET_REGISTER) { - printf("\tRESET_REG="); - acpi_print_gas(&fadt->ResetRegister); - printf(", RESET_VALUE=%#x\n", fadt->ResetValue); - } - if (acpi_get_fadt_revision(fadt) > 1) { - printf("\tX_FACS=0x%016jx, ", (uintmax_t)fadt->XFacs); - printf("X_DSDT=0x%016jx\n", (uintmax_t)fadt->XDsdt); - printf("\tX_PM1a_EVT_BLK="); - acpi_print_gas(&fadt->XPm1aEventBlock); - if (fadt->XPm1bEventBlock.Address != 0) { - printf("\n\tX_PM1b_EVT_BLK="); - acpi_print_gas(&fadt->XPm1bEventBlock); - } - printf("\n\tX_PM1a_CNT_BLK="); - acpi_print_gas(&fadt->XPm1aControlBlock); - if (fadt->XPm1bControlBlock.Address != 0) { - printf("\n\tX_PM1b_CNT_BLK="); - acpi_print_gas(&fadt->XPm1bControlBlock); - } - if (fadt->XPm2ControlBlock.Address != 0) { - printf("\n\tX_PM2_CNT_BLK="); - acpi_print_gas(&fadt->XPm2ControlBlock); - } - printf("\n\tX_PM_TMR_BLK="); - acpi_print_gas(&fadt->XPmTimerBlock); - if (fadt->XGpe0Block.Address != 0) { - printf("\n\tX_GPE0_BLK="); - acpi_print_gas(&fadt->XGpe0Block); - } - if (fadt->XGpe1Block.Address != 0) { - printf("\n\tX_GPE1_BLK="); - acpi_print_gas(&fadt->XGpe1Block); - } - printf("\n"); - } - - printf(END_COMMENT); -} - -static void -acpi_print_facs(ACPI_TABLE_FACS *facs) -{ - printf(BEGIN_COMMENT); - printf(" FACS:\tLength=%u, ", facs->Length); - printf("HwSig=0x%08x, ", facs->HardwareSignature); - printf("Firm_Wake_Vec=0x%08x\n", facs->FirmwareWakingVector); - - printf("\tGlobal_Lock="); - if (facs->GlobalLock != 0) { - if (facs->GlobalLock & ACPI_GLOCK_PENDING) - printf("PENDING,"); - if (facs->GlobalLock & ACPI_GLOCK_OWNED) - printf("OWNED"); - } - printf("\n"); - - printf("\tFlags="); - if (facs->Flags & ACPI_FACS_S4_BIOS_PRESENT) - printf("S4BIOS"); - printf("\n"); - - if (facs->XFirmwareWakingVector != 0) - printf("\tX_Firm_Wake_Vec=%016jx\n", - (uintmax_t)facs->XFirmwareWakingVector); - printf("\tVersion=%u\n", facs->Version); - - printf(END_COMMENT); -} - -static void -acpi_print_dsdt(ACPI_TABLE_HEADER *dsdp) -{ - printf(BEGIN_COMMENT); - acpi_print_sdt(dsdp); - printf(END_COMMENT); -} - -int -acpi_checksum(void *p, size_t length) -{ - uint8_t *bp; - uint8_t sum; - - bp = p; - sum = 0; - while (length--) - sum += *bp++; - - return (sum); -} - -static ACPI_TABLE_HEADER * -acpi_map_sdt(vm_offset_t pa) -{ - ACPI_TABLE_HEADER *sp; - - sp = acpi_map_physical(pa, sizeof(ACPI_TABLE_HEADER)); - sp = acpi_map_physical(pa, sp->Length); - return (sp); -} - -static void -acpi_print_rsd_ptr(ACPI_TABLE_RSDP *rp) -{ - printf(BEGIN_COMMENT); - printf(" RSD PTR: OEM="); - acpi_print_string(rp->OemId, ACPI_OEM_ID_SIZE); - printf(", ACPI_Rev=%s (%d)\n", rp->Revision < 2 ? "1.0x" : "2.0x", - rp->Revision); - if (rp->Revision < 2) { - printf("\tRSDT=0x%08x, cksum=%u\n", rp->RsdtPhysicalAddress, - rp->Checksum); - } else { - printf("\tXSDT=0x%016jx, length=%u, cksum=%u\n", - (uintmax_t)rp->XsdtPhysicalAddress, rp->Length, - rp->ExtendedChecksum); - } - printf(END_COMMENT); -} - -static void -acpi_handle_rsdt(ACPI_TABLE_HEADER *rsdp) -{ - ACPI_TABLE_HEADER *sdp; - ACPI_TABLE_RSDT *rsdt; - ACPI_TABLE_XSDT *xsdt; - vm_offset_t addr; - int entries, i; - - acpi_print_rsdt(rsdp); - rsdt = (ACPI_TABLE_RSDT *)rsdp; - xsdt = (ACPI_TABLE_XSDT *)rsdp; - entries = (rsdp->Length - sizeof(ACPI_TABLE_HEADER)) / addr_size; - for (i = 0; i < entries; i++) { - if (addr_size == 4) - addr = le32toh(rsdt->TableOffsetEntry[i]); - else - addr = le64toh(xsdt->TableOffsetEntry[i]); - if (addr == 0) - continue; - sdp = (ACPI_TABLE_HEADER *)acpi_map_sdt(addr); - if (acpi_checksum(sdp, sdp->Length)) { - warnx("RSDT entry %d (sig %.4s) is corrupt", i, - sdp->Signature); - continue; - } - if (!memcmp(sdp->Signature, ACPI_SIG_FADT, 4)) - acpi_handle_fadt(sdp); - else if (!memcmp(sdp->Signature, ACPI_SIG_MADT, 4)) - acpi_handle_madt(sdp); - else if (!memcmp(sdp->Signature, ACPI_SIG_HPET, 4)) - acpi_handle_hpet(sdp); - else if (!memcmp(sdp->Signature, ACPI_SIG_ECDT, 4)) - acpi_handle_ecdt(sdp); - else if (!memcmp(sdp->Signature, ACPI_SIG_MCFG, 4)) - acpi_handle_mcfg(sdp); - else if (!memcmp(sdp->Signature, ACPI_SIG_SLIT, 4)) - acpi_handle_slit(sdp); - else if (!memcmp(sdp->Signature, ACPI_SIG_SRAT, 4)) - acpi_handle_srat(sdp); - else if (!memcmp(sdp->Signature, ACPI_SIG_TCPA, 4)) - acpi_handle_tcpa(sdp); - else if (!memcmp(sdp->Signature, ACPI_SIG_DMAR, 4)) - acpi_handle_dmar(sdp); - else { - printf(BEGIN_COMMENT); - acpi_print_sdt(sdp); - printf(END_COMMENT); - } - } -} - -ACPI_TABLE_HEADER * -sdt_load_devmem(void) -{ - ACPI_TABLE_RSDP *rp; - ACPI_TABLE_HEADER *rsdp; - - rp = acpi_find_rsd_ptr(); - if (!rp) - errx(1, "Can't find ACPI information"); - - if (tflag) - acpi_print_rsd_ptr(rp); - if (rp->Revision < 2) { - rsdp = (ACPI_TABLE_HEADER *)acpi_map_sdt(rp->RsdtPhysicalAddress); - if (memcmp(rsdp->Signature, "RSDT", 4) != 0 || - acpi_checksum(rsdp, rsdp->Length) != 0) - errx(1, "RSDT is corrupted"); - addr_size = sizeof(uint32_t); - } else { - rsdp = (ACPI_TABLE_HEADER *)acpi_map_sdt(rp->XsdtPhysicalAddress); - if (memcmp(rsdp->Signature, "XSDT", 4) != 0 || - acpi_checksum(rsdp, rsdp->Length) != 0) - errx(1, "XSDT is corrupted"); - addr_size = sizeof(uint64_t); - } - return (rsdp); -} - -/* Write the DSDT to a file, concatenating any SSDTs (if present). */ -static int -write_dsdt(int fd, ACPI_TABLE_HEADER *rsdt, ACPI_TABLE_HEADER *dsdt) -{ - ACPI_TABLE_HEADER sdt; - ACPI_TABLE_HEADER *ssdt; - uint8_t sum; - - /* Create a new checksum to account for the DSDT and any SSDTs. */ - sdt = *dsdt; - if (rsdt != NULL) { - sdt.Checksum = 0; - sum = acpi_checksum(dsdt + 1, dsdt->Length - - sizeof(ACPI_TABLE_HEADER)); - ssdt = sdt_from_rsdt(rsdt, ACPI_SIG_SSDT, NULL); - while (ssdt != NULL) { - sdt.Length += ssdt->Length - sizeof(ACPI_TABLE_HEADER); - sum += acpi_checksum(ssdt + 1, - ssdt->Length - sizeof(ACPI_TABLE_HEADER)); - ssdt = sdt_from_rsdt(rsdt, ACPI_SIG_SSDT, ssdt); - } - sum += acpi_checksum(&sdt, sizeof(ACPI_TABLE_HEADER)); - sdt.Checksum -= sum; - } - - /* Write out the DSDT header and body. */ - write(fd, &sdt, sizeof(ACPI_TABLE_HEADER)); - write(fd, dsdt + 1, dsdt->Length - sizeof(ACPI_TABLE_HEADER)); - - /* Write out any SSDTs (if present.) */ - if (rsdt != NULL) { - ssdt = sdt_from_rsdt(rsdt, "SSDT", NULL); - while (ssdt != NULL) { - write(fd, ssdt + 1, ssdt->Length - - sizeof(ACPI_TABLE_HEADER)); - ssdt = sdt_from_rsdt(rsdt, "SSDT", ssdt); - } - } - return (0); -} - -void -dsdt_save_file(char *outfile, ACPI_TABLE_HEADER *rsdt, ACPI_TABLE_HEADER *dsdp) -{ - int fd; - mode_t mode; - - assert(outfile != NULL); - mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; - fd = open(outfile, O_WRONLY | O_CREAT | O_TRUNC, mode); - if (fd == -1) { - perror("dsdt_save_file"); - return; - } - write_dsdt(fd, rsdt, dsdp); - close(fd); -} - -void -aml_disassemble(ACPI_TABLE_HEADER *rsdt, ACPI_TABLE_HEADER *dsdp) -{ - char buf[PATH_MAX], tmpstr[PATH_MAX], wrkdir[PATH_MAX]; - const char *iname = "/acpdump.din"; - const char *oname = "/acpdump.dsl"; - const char *tmpdir; - FILE *fp; - size_t len; - int fd, status; - pid_t pid; - - tmpdir = getenv("TMPDIR"); - if (tmpdir == NULL) - tmpdir = _PATH_TMP; - if (realpath(tmpdir, buf) == NULL) { - perror("realpath tmp dir"); - return; - } - len = sizeof(wrkdir) - strlen(iname); - if ((size_t)snprintf(wrkdir, len, "%s/acpidump.XXXXXX", buf) > len-1 ) { - fprintf(stderr, "$TMPDIR too long\n"); - return; - } - if (mkdtemp(wrkdir) == NULL) { - perror("mkdtemp tmp working dir"); - return; - } - assert((size_t)snprintf(tmpstr, sizeof(tmpstr), "%s%s", wrkdir, iname) - <= sizeof(tmpstr) - 1); - fd = open(tmpstr, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); - if (fd < 0) { - perror("iasl tmp file"); - return; - } - write_dsdt(fd, rsdt, dsdp); - close(fd); - - /* Run iasl -d on the temp file */ - if ((pid = fork()) == 0) { - close(STDOUT_FILENO); - if (vflag == 0) - close(STDERR_FILENO); - execl("/usr/sbin/iasl", "iasl", "-d", tmpstr, NULL); - err(1, "exec"); - } - if (pid > 0) - wait(&status); - if (unlink(tmpstr) < 0) { - perror("unlink"); - goto out; - } - if (pid < 0) { - perror("fork"); - goto out; - } - if (status != 0) { - fprintf(stderr, "iast exit status = %d\n", status); - } - - /* Dump iasl's output to stdout */ - assert((size_t)snprintf(tmpstr, sizeof(tmpstr), "%s%s", wrkdir, oname) - <= sizeof(tmpstr) -1); - fp = fopen(tmpstr, "r"); - if (unlink(tmpstr) < 0) { - perror("unlink"); - goto out; - } - if (fp == NULL) { - perror("iasl tmp file (read)"); - goto out; - } - while ((len = fread(buf, 1, sizeof(buf), fp)) > 0) - fwrite(buf, 1, len, stdout); - fclose(fp); - - out: - if (rmdir(wrkdir) < 0) - perror("rmdir"); -} - -void -sdt_print_all(ACPI_TABLE_HEADER *rsdp) -{ - acpi_handle_rsdt(rsdp); -} - -/* Fetch a table matching the given signature via the RSDT. */ -ACPI_TABLE_HEADER * -sdt_from_rsdt(ACPI_TABLE_HEADER *rsdp, const char *sig, ACPI_TABLE_HEADER *last) -{ - ACPI_TABLE_HEADER *sdt; - ACPI_TABLE_RSDT *rsdt; - ACPI_TABLE_XSDT *xsdt; - vm_offset_t addr; - int entries, i; - - rsdt = (ACPI_TABLE_RSDT *)rsdp; - xsdt = (ACPI_TABLE_XSDT *)rsdp; - entries = (rsdp->Length - sizeof(ACPI_TABLE_HEADER)) / addr_size; - for (i = 0; i < entries; i++) { - if (addr_size == 4) - addr = le32toh(rsdt->TableOffsetEntry[i]); - else - addr = le64toh(xsdt->TableOffsetEntry[i]); - if (addr == 0) - continue; - sdt = (ACPI_TABLE_HEADER *)acpi_map_sdt(addr); - if (last != NULL) { - if (sdt == last) - last = NULL; - continue; - } - if (memcmp(sdt->Signature, sig, strlen(sig))) - continue; - if (acpi_checksum(sdt, sdt->Length)) - errx(1, "RSDT entry %d is corrupt", i); - return (sdt); - } - - return (NULL); -} - -ACPI_TABLE_HEADER * -dsdt_from_fadt(ACPI_TABLE_FADT *fadt) -{ - ACPI_TABLE_HEADER *sdt; - - /* Use the DSDT address if it is version 1, otherwise use XDSDT. */ - if (acpi_get_fadt_revision(fadt) == 1) - sdt = (ACPI_TABLE_HEADER *)acpi_map_sdt(fadt->Dsdt); - else - sdt = (ACPI_TABLE_HEADER *)acpi_map_sdt(fadt->XDsdt); - if (acpi_checksum(sdt, sdt->Length)) - errx(1, "DSDT is corrupt\n"); - return (sdt); -} diff --git a/usr.sbin/acpi/acpidump/acpi_user.c b/usr.sbin/acpi/acpidump/acpi_user.c deleted file mode 100644 index d759ea7..0000000 --- a/usr.sbin/acpi/acpidump/acpi_user.c +++ /dev/null @@ -1,222 +0,0 @@ -/*- - * Copyright (c) 1999 Doug Rabson - * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include <sys/param.h> -#include <sys/mman.h> -#include <sys/queue.h> -#include <sys/stat.h> -#include <sys/sysctl.h> - -#include <err.h> -#include <fcntl.h> -#include <kenv.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include "acpidump.h" - -static char hint_acpi_0_rsdp[] = "hint.acpi.0.rsdp"; -static char machdep_acpi_root[] = "machdep.acpi_root"; -static int acpi_mem_fd = -1; - -struct acpi_user_mapping { - LIST_ENTRY(acpi_user_mapping) link; - vm_offset_t pa; - caddr_t va; - size_t size; -}; - -static LIST_HEAD(acpi_user_mapping_list, acpi_user_mapping) maplist; - -static void -acpi_user_init(void) -{ - - if (acpi_mem_fd == -1) { - acpi_mem_fd = open("/dev/mem", O_RDONLY); - if (acpi_mem_fd == -1) - err(1, "opening /dev/mem"); - LIST_INIT(&maplist); - } -} - -static struct acpi_user_mapping * -acpi_user_find_mapping(vm_offset_t pa, size_t size) -{ - struct acpi_user_mapping *map; - - /* First search for an existing mapping */ - for (map = LIST_FIRST(&maplist); map; map = LIST_NEXT(map, link)) { - if (map->pa <= pa && map->size >= pa + size - map->pa) - return (map); - } - - /* Then create a new one */ - size = round_page(pa + size) - trunc_page(pa); - pa = trunc_page(pa); - map = malloc(sizeof(struct acpi_user_mapping)); - if (!map) - errx(1, "out of memory"); - map->pa = pa; - map->va = mmap(0, size, PROT_READ, MAP_SHARED, acpi_mem_fd, pa); - map->size = size; - if ((intptr_t) map->va == -1) - err(1, "can't map address"); - LIST_INSERT_HEAD(&maplist, map, link); - - return (map); -} - -static ACPI_TABLE_RSDP * -acpi_get_rsdp(u_long addr) -{ - ACPI_TABLE_RSDP rsdp; - size_t len; - - /* Read in the table signature and check it. */ - pread(acpi_mem_fd, &rsdp, 8, addr); - if (memcmp(rsdp.Signature, "RSD PTR ", 8)) - return (NULL); - - /* Read the entire table. */ - pread(acpi_mem_fd, &rsdp, sizeof(rsdp), addr); - - /* Check the standard checksum. */ - if (acpi_checksum(&rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0) - return (NULL); - - /* Check extended checksum if table version >= 2. */ - if (rsdp.Revision >= 2 && - acpi_checksum(&rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) != 0) - return (NULL); - - /* If the revision is 0, assume a version 1 length. */ - if (rsdp.Revision == 0) - len = sizeof(ACPI_RSDP_COMMON); - else - len = rsdp.Length; - - return (acpi_map_physical(addr, len)); -} - -static ACPI_TABLE_RSDP * -acpi_scan_rsd_ptr(void) -{ -#if defined(__amd64__) || defined(__i386__) - ACPI_TABLE_RSDP *rsdp; - u_long addr, end; - - /* - * On ia32, scan physical memory for the RSD PTR if above failed. - * According to section 5.2.2 of the ACPI spec, we only consider - * two regions for the base address: - * 1. EBDA (1 KB area addressed by the 16 bit pointer at 0x40E - * 2. High memory (0xE0000 - 0xFFFFF) - */ - addr = ACPI_EBDA_PTR_LOCATION; - pread(acpi_mem_fd, &addr, sizeof(uint16_t), addr); - addr <<= 4; - end = addr + ACPI_EBDA_WINDOW_SIZE; - for (; addr < end; addr += 16) - if ((rsdp = acpi_get_rsdp(addr)) != NULL) - return (rsdp); - addr = ACPI_HI_RSDP_WINDOW_BASE; - end = addr + ACPI_HI_RSDP_WINDOW_SIZE; - for (; addr < end; addr += 16) - if ((rsdp = acpi_get_rsdp(addr)) != NULL) - return (rsdp); -#endif /* __amd64__ || __i386__ */ - return (NULL); -} - -/* - * Public interfaces - */ -ACPI_TABLE_RSDP * -acpi_find_rsd_ptr(void) -{ - ACPI_TABLE_RSDP *rsdp; - char buf[20]; - u_long addr; - size_t len; - - acpi_user_init(); - - addr = 0; - - /* Attempt to use kenv or sysctl to find RSD PTR record. */ - if (kenv(KENV_GET, hint_acpi_0_rsdp, buf, 20) > 0) - addr = strtoul(buf, NULL, 0); - if (addr == 0) { - len = sizeof(addr); - if (sysctlbyname(machdep_acpi_root, &addr, &len, NULL, 0) != 0) - addr = 0; - } - if (addr != 0 && (rsdp = acpi_get_rsdp(addr)) != NULL) - return (rsdp); - - return (acpi_scan_rsd_ptr()); -} - -void * -acpi_map_physical(vm_offset_t pa, size_t size) -{ - struct acpi_user_mapping *map; - - map = acpi_user_find_mapping(pa, size); - return (map->va + (pa - map->pa)); -} - -ACPI_TABLE_HEADER * -dsdt_load_file(char *infile) -{ - ACPI_TABLE_HEADER *sdt; - uint8_t *dp; - struct stat sb; - - if ((acpi_mem_fd = open(infile, O_RDONLY)) == -1) - errx(1, "opening %s", infile); - - LIST_INIT(&maplist); - - if (fstat(acpi_mem_fd, &sb) == -1) - errx(1, "fstat %s", infile); - - dp = mmap(0, sb.st_size, PROT_READ, MAP_PRIVATE, acpi_mem_fd, 0); - if (dp == NULL) - errx(1, "mmap %s", infile); - - sdt = (ACPI_TABLE_HEADER *)dp; - if (strncmp(dp, ACPI_SIG_DSDT, 4) != 0 || - acpi_checksum(sdt, sdt->Length) != 0) - return (NULL); - - return (sdt); -} diff --git a/usr.sbin/acpi/acpidump/acpidump.8 b/usr.sbin/acpi/acpidump/acpidump.8 deleted file mode 100644 index a03917a..0000000 --- a/usr.sbin/acpi/acpidump/acpidump.8 +++ /dev/null @@ -1,200 +0,0 @@ -.\" ACPI (ACPI Package) -.\" -.\" Copyright (c) 1999 Doug Rabson <dfr@FreeBSD.org> -.\" Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org> -.\" Copyright (c) 2000 Yasuo YOKOYAMA <yokoyama@jp.FreeBSD.org> -.\" Copyright (c) 2000 Hiroki Sato <hrs@FreeBSD.org> -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd February 14, 2005 -.Dt ACPIDUMP 8 -.Os -.Sh NAME -.Nm acpidump -.Nd dump ACPI tables and ASL -.Sh SYNOPSIS -.Nm -.Op Fl d -.Op Fl t -.Op Fl h -.Op Fl v -.Op Fl f Ar dsdt_input -.Op Fl o Ar dsdt_output -.Sh DESCRIPTION -The -.Nm -utility analyzes ACPI tables in physical memory and can dump them to a file. -In addition, -.Nm -can call -.Xr iasl 8 -to disassemble AML -(ACPI Machine Language) -found in these tables and dump them as ASL -(ACPI Source Language) -to stdout. -.Pp -ACPI tables have an essential data block (the DSDT, -Differentiated System Description Table) -that includes information used on the kernel side such as -detailed information about PnP hardware, procedures for controlling -power management support, and so on. -The -.Nm -utility can extract the DSDT data block from physical memory and store it into -an output file and optionally also disassemble it. -If any Secondary System Description Table -(SSDT) -entries exist, they will also be included in the output file and disassembly. -.Pp -When -.Nm -is invoked without the -.Fl f -option, it will read ACPI tables from physical memory via -.Pa /dev/mem . -First it searches for the RSDP -(Root System Description Pointer), -which has the signature -.Qq RSD PTR\ \& , -and then gets the RSDT -(Root System Description Table), -which includes a list of pointers to physical memory addresses -for other tables. -The RSDT itself and all other tables linked from RSDT are generically -called SDTs -(System Description Tables) -and their header has a common format which consists of items -such as Signature, Length, Revision, Checksum, OEMID, OEM Table ID, -OEM Revision, Creator ID and Creator Revision. -When invoked with the -.Fl t -flag, the -.Nm -utility dumps contents of the following tables: -.Pp -.Bl -tag -offset indent -width 12345 -compact -.It DMAR -.It DSDT -.It ECDT -.It FACS -.It FADT -.It HPET -.It MADT -.It MCFG -.It RSD PTR -.It RSDT -.El -.Pp -The RSDT contains a pointer to the physical memory address of the FACP -(Fixed ACPI Description Table). -The FACP defines static system information about power management support -(ACPI Hardware Register Implementation) -such as interrupt mode (INT_MODEL), -SCI interrupt number, SMI command port (SMI_CMD) -and the location of ACPI registers. -The FACP also has a pointer to a physical memory address for the DSDT. -While the other tables are fixed format, -the DSDT consists of free-formatted AML data. -.Sh OPTIONS -The following options are supported by -.Nm : -.Bl -tag -width indent -.It Fl d -Disassemble the DSDT into ASL using -.Xr iasl 8 -and print the results to stdout. -.It Fl t -Dump the contents of the various fixed tables listed above. -.It Fl h -Displays usage and exit. -.It Fl v -Enable verbose messages. -.It Fl f Ar dsdt_input -Load the DSDT from the specified file instead of physical memory. -Since only the DSDT is stored in the file, the -.Fl t -flag may not be used with this option. -.It Fl o Ar dsdt_output -Store the DSDT data block from physical memory into the specified file. -.El -.Sh FILES -.Bl -tag -width /dev/mem -.It Pa /dev/mem -.El -.Sh EXAMPLES -If a developer requests a copy of your ASL, please use the following -command to dump all tables and compress the result. -.Bd -literal -offset indent -# acpidump -dt | gzip -c9 > my_computer.asl.gz -.Ed -.Pp -This example dumps the DSDT from physical memory to foo.dsdt. -It also prints the contents of various system tables and disassembles -the AML contained in the DSDT to stdout, redirecting the output -to foo.asl. -.Bd -literal -offset indent -# acpidump -t -d -o foo.dsdt > foo.asl -.Ed -.Pp -This example reads a DSDT file and disassembles it to stdout. -Verbose messages are enabled. -.Bd -literal -offset indent -# acpidump -v -d -f foo.dsdt -.Ed -.Sh SEE ALSO -.Xr acpi 4 , -.Xr mem 4 , -.Xr acpiconf 8 , -.Xr acpidb 8 , -.Xr iasl 8 -.Sh HISTORY -The -.Nm -utility first appeared in -.Fx 5.0 -and was rewritten to use -.Xr iasl 8 -for -.Fx 5.2 . -.Sh AUTHORS -.An Doug Rabson Aq Mt dfr@FreeBSD.org -.An Mitsuru IWASAKI Aq Mt iwasaki@FreeBSD.org -.An Yasuo YOKOYAMA Aq Mt yokoyama@jp.FreeBSD.org -.An Nate Lawson Aq Mt njl@FreeBSD.org -.Pp -.An -nosplit -Some contributions made by -.An Chitoshi Ohsawa Aq Mt ohsawa@catv1.ccn-net.ne.jp , -.An Takayasu IWANASHI Aq Mt takayasu@wendy.a.perfect-liberty.or.jp , -.An Yoshihiko SARUMARU Aq Mt mistral@imasy.or.jp , -.An Hiroki Sato Aq Mt hrs@FreeBSD.org , -.An Michael Lucas Aq Mt mwlucas@blackhelicopters.org -and -.An Michael Smith Aq Mt msmith@FreeBSD.org . -.Sh BUGS -The current implementation does not dump the BOOT structure or -other miscellaneous tables. diff --git a/usr.sbin/acpi/acpidump/acpidump.c b/usr.sbin/acpi/acpidump/acpidump.c deleted file mode 100644 index 38844b6..0000000 --- a/usr.sbin/acpi/acpidump/acpidump.c +++ /dev/null @@ -1,144 +0,0 @@ -/*- - * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include <sys/param.h> -#include <assert.h> -#include <err.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include "acpidump.h" - -int dflag; /* Disassemble AML using iasl(8) */ -int tflag; /* Dump contents of SDT tables */ -int vflag; /* Use verbose messages */ - -static void -usage(const char *progname) -{ - - 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(1); -} - -int -main(int argc, char *argv[]) -{ - ACPI_TABLE_HEADER *rsdt, *sdt; - char c, *progname; - char *dsdt_input_file, *dsdt_output_file; - - dsdt_input_file = dsdt_output_file = NULL; - progname = argv[0]; - - if (argc < 2) - usage(progname); - - 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': - dsdt_input_file = optarg; - break; - case 'o': - dsdt_output_file = optarg; - break; - case 'h': - default: - usage(progname); - /* NOTREACHED */ - } - } - argc -= optind; - argv += optind; - - /* 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(progname); - } else if (tflag != 0) { - warnx("Can't use -t with DSDT input file"); - usage(progname); - } - 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(0); -} diff --git a/usr.sbin/acpi/acpidump/acpidump.h b/usr.sbin/acpi/acpidump/acpidump.h deleted file mode 100644 index 3421519..0000000 --- a/usr.sbin/acpi/acpidump/acpidump.h +++ /dev/null @@ -1,158 +0,0 @@ -/*- - * Copyright (c) 1999 Doug Rabson - * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _ACPIDUMP_H_ -#define _ACPIDUMP_H_ - -#include <contrib/dev/acpica/include/acpi.h> -#include <contrib/dev/acpica/include/acconfig.h> -#include <contrib/dev/acpica/include/actbl1.h> - -/* 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 - -/* 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); - -/* TCPA */ -struct TCPAbody { - ACPI_TABLE_HEADER header; - uint16_t platform_class; -#define ACPI_TCPA_BIOS_CLIENT 0x00 -#define ACPI_TCPA_BIOS_SERVER 0x01 - union { - struct client_hdr { - uint32_t log_max_len __packed; - uint64_t log_start_addr __packed; - } client; - struct server_hdr { - uint16_t reserved; - uint64_t log_max_len __packed; - uint64_t log_start_addr __packed; - } server; - }; -} __packed; - -struct TCPAevent { - u_int32_t pcr_index; - u_int32_t event_type; - u_int8_t pcr_value[20]; - u_int32_t event_size; - u_int8_t event_data[0]; -}; - -struct TCPApc_event { - u_int32_t event_id; - u_int32_t event_size; - u_int8_t event_data[0]; -}; - -enum TCPAevent_types { - PREBOOT = 0, - POST_CODE, - UNUSED, - NO_ACTION, - SEPARATOR, - ACTION, - EVENT_TAG, - SCRTM_CONTENTS, - SCRTM_VERSION, - CPU_MICROCODE, - PLATFORM_CONFIG_FLAGS, - TABLE_OF_DEVICES, - COMPACT_HASH, - IPL, - IPL_PARTITION_DATA, - NONHOST_CODE, - NONHOST_CONFIG, - NONHOST_INFO, - EVENT_TYPE_MAX, -}; - -enum TCPApcclient_ids { - SMBIOS = 1, - BIS_CERT, - POST_BIOS_ROM, - ESCD, - CMOS, - NVRAM, - OPTION_ROM_EXEC, - OPTION_ROM_CONFIG, - OPTION_ROM_MICROCODE = 10, - S_CRTM_VERSION, - S_CRTM_CONTENTS, - POST_CONTENTS, - HOST_TABLE_OF_DEVICES, - PCCLIENT_ID_MAX, -}; - -/* - * Load the DSDT from a previous save file. Note that other tables are - * not saved (i.e. FADT) - */ -ACPI_TABLE_HEADER *dsdt_load_file(char *); - -/* Save the DSDT to a file */ -void dsdt_save_file(char *, ACPI_TABLE_HEADER *, ACPI_TABLE_HEADER *); - -/* Print out as many fixed tables as possible, given the RSD PTR */ -void sdt_print_all(ACPI_TABLE_HEADER *); - -/* Disassemble the AML in the DSDT */ -void aml_disassemble(ACPI_TABLE_HEADER *, ACPI_TABLE_HEADER *); - -/* Routines for accessing tables in physical memory */ -ACPI_TABLE_RSDP *acpi_find_rsd_ptr(void); -void *acpi_map_physical(vm_offset_t, size_t); -ACPI_TABLE_HEADER *sdt_from_rsdt(ACPI_TABLE_HEADER *, const char *, - ACPI_TABLE_HEADER *); -ACPI_TABLE_HEADER *dsdt_from_fadt(ACPI_TABLE_FADT *); -int acpi_checksum(void *, size_t); - -/* Command line flags */ -extern int dflag; -extern int tflag; -extern int vflag; - -#endif /* !_ACPIDUMP_H_ */ diff --git a/usr.sbin/acpi/iasl/Makefile b/usr.sbin/acpi/iasl/Makefile deleted file mode 100644 index 7ba08ff..0000000 --- a/usr.sbin/acpi/iasl/Makefile +++ /dev/null @@ -1,126 +0,0 @@ -# $FreeBSD$ - -PROG= iasl - -# common -SRCS= acfileio.c adfile.c adisasm.c adwalk.c ahids.c \ - ahpredef.c ahtable.c ahuuids.c cmfsize.c dmextern.c \ - dmrestag.c dmtable.c dmtables.c dmtbdump.c dmtbinfo.c \ - getopt.c - -# compiler -SRCS+= aslanalyze.c aslascii.c aslbtypes.c aslcodegen.c \ - aslcompile.c aslcompiler.y.h aslcompilerlex.c \ - aslcompilerparse.c asldebug.c aslerror.c aslexternal.c \ - aslfileio.c aslfiles.c aslfold.c aslhex.c asllength.c \ - asllisting.c asllistsup.c aslload.c asllookup.c \ - aslmain.c aslmap.c aslmapenter.c aslmapoutput.c \ - aslmaputils.c aslmessages.c aslmethod.c aslnamesp.c \ - asloffset.c aslopcodes.c asloperands.c aslopt.c \ - asloptions.c aslpld.c aslpredef.c aslprepkg.c \ - aslprintf.c aslprune.c aslresource.c aslrestype1.c \ - aslrestype1i.c aslrestype2.c aslrestype2d.c \ - aslrestype2e.c aslrestype2q.c aslrestype2s.c \ - aslrestype2w.c aslstartup.c aslstubs.c asltransform.c \ - asltree.c aslutils.c asluuid.c aslwalks.c aslxref.c \ - aslxrefout.c dtcompile.c dtexpress.c dtfield.c dtio.c \ - dtparser.y.h dtparserlex.c dtparserparse.c dtsubtable.c \ - dttable.c dttable1.c dttable2.c dttemplate.c dtutils.c \ - prexpress.c prmacros.c prparser.y.h prparserlex.c \ - prparserparse.c prscan.c prutils.c - -# components/debugger -SRCS+= dbfileio.c - -# components/disassembler -SRCS+= dmbuffer.c dmcstyle.c dmdeferred.c dmnames.c dmopcode.c \ - dmresrc.c dmresrcl.c dmresrcl2.c dmresrcs.c dmutils.c \ - dmwalk.c - -# components/dispatcher -SRCS+= dsargs.c dscontrol.c dsfield.c dsobject.c dsopcode.c \ - dsutils.c dswexec.c dswload.c dswload2.c dswscope.c \ - dswstate.c - -# components/executer -SRCS+= exconcat.c exconvrt.c excreate.c exdump.c exmisc.c \ - exmutex.c exnames.c exoparg1.c exoparg2.c exoparg3.c \ - exoparg6.c exprep.c exresnte.c exresolv.c exresop.c \ - exstore.c exstoren.c exstorob.c exsystem.c exutils.c - -# components/parser -SRCS+= psargs.c psloop.c psobject.c psopcode.c psopinfo.c \ - psparse.c psscope.c pstree.c psutils.c pswalk.c - -# components/namespace -SRCS+= nsaccess.c nsalloc.c nsdump.c nsnames.c nsobject.c \ - nsparse.c nssearch.c nsutils.c nswalk.c - -# components/tables -SRCS+= tbdata.c tbfadt.c tbinstal.c tbprint.c tbutils.c \ - tbxface.c tbxfload.c - -# components/utilities -SRCS+= utaddress.c utalloc.c utascii.c utbuffer.c utcache.c \ - utcopy.c utdebug.c utdecode.c utdelete.c uterror.c \ - utexcep.c utglobal.c uthex.c utinit.c utlock.c utmath.c \ - utmisc.c utmutex.c utnonansi.c utobject.c utownerid.c \ - utpredef.c utprint.c utresrc.c utstate.c utstring.c \ - utuuid.c utxface.c utxferror.c - -# os_specific/service_layers -SRCS+= oslibcfs.c osunixxf.c - -WARNS?= 2 - -MAN= iasl.8 - -CFLAGS+= -DACPI_ASL_COMPILER -I. -LFLAGS= -i -s -YFLAGS= -d - -CLEANFILES= aslcompiler.y aslcompiler.y.h aslcompilerlex.c \ - aslcompilerparse.c aslcompilerparse.h dtparser.y.h \ - dtparserlex.c dtparserparse.c dtparserparse.h \ - prparser.y.h prparserlex.c prparserparse.c \ - prparserparse.h - -PARSER= aslcstyle.y aslparser.y aslresources.y aslrules.y \ - aslsupport.y asltokens.y asltypes.y - -aslcompilerlex.c: aslcompiler.l aslsupport.l - ${LEX} ${LFLAGS} -PAslCompiler -o${.TARGET} \ - ${ACPICA_DIR}/compiler/aslcompiler.l - -aslcompiler.y: ${PARSER} - m4 -P -I${ACPICA_DIR}/compiler \ - ${ACPICA_DIR}/compiler/aslparser.y > ${.TARGET} - -.ORDER: aslcompilerparse.c aslcompilerparse.h -aslcompilerparse.c aslcompilerparse.h: aslcompiler.y - ${YACC} ${YFLAGS} -pAslCompiler -oaslcompilerparse.c ${.ALLSRC} - -aslcompiler.y.h: aslcompilerparse.h .NOMETA - ln -f ${.ALLSRC} ${.TARGET} - -dtparserlex.c: dtparser.l - ${LEX} ${LFLAGS} -PDtParser -o${.TARGET} ${.ALLSRC} - -.ORDER: dtparserparse.c dtparserparse.h -dtparserparse.c dtparserparse.h: dtparser.y - ${YACC} ${YFLAGS} -pDtParser -odtparserparse.c ${.ALLSRC} - -dtparser.y.h: dtparserparse.h .NOMETA - ln -f ${.ALLSRC} ${.TARGET} - -prparserlex.c: prparser.l - ${LEX} ${LFLAGS} -PPrParser -o${.TARGET} ${.ALLSRC} - -.ORDER: prparserparse.c prparserparse.h -prparserparse.c prparserparse.h: prparser.y - ${YACC} ${YFLAGS} -pPrParser -oprparserparse.c ${.ALLSRC} - -prparser.y.h: prparserparse.h .NOMETA - ln -f ${.ALLSRC} ${.TARGET} - -.include <bsd.prog.mk> diff --git a/usr.sbin/acpi/iasl/Makefile.depend b/usr.sbin/acpi/iasl/Makefile.depend deleted file mode 100644 index ca0b2f9..0000000 --- a/usr.sbin/acpi/iasl/Makefile.depend +++ /dev/null @@ -1,19 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - gnu/lib/csu \ - gnu/lib/libgcc \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - lib/libcompiler_rt \ - usr.bin/yacc.host \ - - -.include <dirdeps.mk> - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/usr.sbin/acpi/iasl/iasl.8 b/usr.sbin/acpi/iasl/iasl.8 deleted file mode 100644 index bf16c8c..0000000 --- a/usr.sbin/acpi/iasl/iasl.8 +++ /dev/null @@ -1,179 +0,0 @@ -.\"- -.\" Copyright (c) 2003 Nate Lawson -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer -.\" in this position and unchanged. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. The name of the author may not be used to endorse or promote products -.\" derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd May 20, 2008 -.Dt IASL 8 -.Os -.Sh NAME -.Nm iasl -.Nd Intel ACPI compiler/decompiler -.Sh SYNOPSIS -.Nm -.Op Fl 2cefghl -.Op Fl b Ar type -.Op Fl d Ar file -.Op Fl dc Ar file -.Op Fl hc -.Op Fl hr -.Op Fl i Ar type -.Op Fl ln -.Op Fl ls -.Op Fl oa -.Op Fl of -.Op Fl oi -.Op Fl on -.Op Fl ot -.Op Fl p Ar prefix -.Op Fl s Ar type -.Op Fl t Ar type -.Op Fl vi -.Op Fl vo -.Op Fl vr -.Op Fl vs -.Op Fl x Ar level -.Op Fl w Ar level -.Ar input-file -.Sh DESCRIPTION -The -.Nm -utility is a compiler/decompiler for ACPI Source Language (ASL) -and ACPI Machine Language (AML). -Major features of -.Nm -include: -.Bl -bullet -offset indent -.It -Full support for the ACPI 3.0b Specification including ASL grammar -elements and operators. -.It -Extensive compiler syntax and semantic error checking, especially in -the area of control methods. -This reduces the number of errors that are -not discovered until the AML code is actually interpreted (i.e., the -compile-time error checking reduces the number of run-time errors). -.It -Multiple types of output files, including formatted listing files with -intermixed source, several types of AML files, and error messages. -.El -.Sh OPTIONS -.Bl -tag -width indent -.It Fl 2 -Emit ACPI 2.0 compatible ASL code. -.It Fl b Sm Cm p | t | b Sm -Create compiler debug/trace file -.Pq Pa *.txt . -Types: Parse/Tree/Both. -.It Fl c -Parse only, no output generation. -.It Fl d Ar file -Disassemble AML to ASL source code file -.Pq Pa *.dsl . -.It Fl dc Ar file -Disassemble AML and immediately compile it. -(Obtain DSDT from current system if no input file.) -.It Fl e -Generate -.Fn External -statements for unresolved symbols. -.It Fl f -Ignore errors, force creation of AML output file(s). -.It Fl g -Get ACPI tables and write to files -.Pq Pa *.dat . -.It Fl h -Additional help and compiler debug options. -.It Fl hc -Display operators allowed in constant expressions. -.It Fl hr -Display ACPI reserved method names. -.It Fl i Sm Cm a | c Sm -Create assembler or C include file -.Pa ( *.inc -or -.Pa *.h ) . -.It Fl l -Create mixed listing file (ASL source and AML) -.Pq Pa *.lst . -.It Fl ln -Create namespace file -.Pq Pa *.nsp . -.It Fl ls -Create combined source file (expanded includes) -.Pq Pa *.src . -.It Fl oa -Disable all optimizations (compatibility mode). -.It Fl of -Disable constant folding. -.It Fl oi -Disable integer optimization to Zero/One/Ones. -.It Fl on -Disable named reference string optimization. -.It Fl ot -Display compile times. -.It Fl p Ar prefix -Specify filename prefix for all output files (including -.Pa .aml ) . -.It Fl s Sm Cm a | c Sm -Create AML in assembler or C source file -.Pa ( *.asm -or -.Pa *.c ) . -.It Fl t Ar a|c -Create AML in assembler or C hex table -.Pq Pa *.hex . -.It Fl vi -Less verbose errors and warnings for use with IDEs. -.It Fl vo -Enable optimization comments. -.It Fl vr -Disable remarks. -.It Fl vs -Disable signon. -.It Fl x Ar level -Set debug level for trace output. -.It Fl w Ar level -Set warning level. -.El -.Sh SEE ALSO -.Xr acpi 4 , -.Xr acpidump 8 -.Sh HISTORY -The -.Nm -utility is provided with Intel ACPI-CA. -It first appeared in -.Fx 5.2 . -.Sh AUTHORS -.An -nosplit -The -.Nm -utility was written by -.An Intel . -This manual page was written by -.An Nate Lawson . |