-# $OpenBSD: Makefile,v 1.3 2005/06/04 02:25:53 cloder Exp $
+# $OpenBSD: Makefile,v 1.4 2010/08/05 17:30:28 marco Exp $
.if (${MACHINE} == "i386") || (${MACHINE} == "amd64")
-PROG= acpidump
-SRCS= acpi.c acpi_user.c asl_dump.c aml_dump.c acpidump.c
-SRCS+= aml_name.c aml_parse.c aml_amlmem.c aml_memman.c aml_obj.c
-SRCS+= aml_common.c aml_evalobj.c aml_store.c
+PROG= acpidump
+SRCS= acpidump.c
.else
-NOPROG= yes
+NOPROG= yes
.endif
-MAN= acpidump.8
+MAN= acpidump.8
VPATH=${.CURDIR}/aml
CFLAGS+=-I${.CURDIR}
+++ /dev/null
-/* $OpenBSD: acpi.c,v 1.7 2009/08/07 00:04:15 martynas Exp $ */
-/*-
- * 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.
- *
- * $Id: acpi.c,v 1.7 2009/08/07 00:04:15 martynas Exp $
- * $FreeBSD: src/usr.sbin/acpi/acpidump/acpi.c,v 1.3 2000/11/08 02:37:00 iwasaki Exp $
- */
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <assert.h>
-#include <err.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-
-#include "acpidump.h"
-
-#include "aml/aml_env.h"
-#include "aml/aml_common.h"
-#include "aml/aml_parse.h"
-
-#define BEGIN_COMMENT "/*\n"
-#define END_COMMENT " */\n"
-
-struct ACPIsdt dsdt_header = {
- "DSDT", 0, 1, 0, "OEMID", "OEMTBLID", 0x12345678, "CRTR", 0x12345678
-};
-
-static void
-acpi_trim_string(char *s, size_t length)
-{
-
- /* Trim trailing spaces and NULLs */
- while (length > 0 && (s[length - 1] == ' ' || s[length - 1] == '\0'))
- s[length-- - 1] = '\0';
-}
-
-static void
-acpi_print_dsdt_definition(void)
-{
- char oemid[6 + 1];
- char oemtblid[8 + 1];
-
- acpi_trim_string(dsdt_header.oemid, 6);
- acpi_trim_string(dsdt_header.oemtblid, 8);
- strncpy(oemid, dsdt_header.oemid, 6);
- oemid[6] = '\0';
- strncpy(oemtblid, dsdt_header.oemtblid, 8);
- oemtblid[8] = '\0';
-
- printf("DefinitionBlock (\n"
- "\"acpi_dsdt.aml\",\t//Output filename\n"
- "\"DSDT\",\t\t\t//Signature\n"
- "0x%x,\t\t\t//DSDT Revision\n"
- "\"%s\",\t\t\t//OEMID\n"
- "\"%s\",\t\t//TABLE ID\n"
- "0x%x\t\t\t//OEM Revision\n)\n",
- dsdt_header.rev, oemid, oemtblid, dsdt_header.oemrev);
-}
-
-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_handle_dsdt(struct ACPIsdt *dsdp)
-{
- u_int8_t *dp;
- u_int8_t *end;
-
- acpi_print_dsdt(dsdp);
-
- dp = (u_int8_t *)dsdp->body;
- end = (u_int8_t *)dsdp + dsdp->len;
-
- if (aml_dumpfile == NULL)
- acpi_dump_dsdt(dp, end);
-}
-
-static void
-acpi_handle_facp(struct FACPbody *facp)
-{
- struct ACPIsdt *dsdp;
-
- acpi_print_facp(facp);
- dsdp = (struct ACPIsdt *) acpi_map_sdt(facp->dsdt_ptr);
- if (acpi_checksum(dsdp, dsdp->len))
- errx(1, "DSDT is corrupt");
- acpi_handle_dsdt(dsdp);
- aml_dump(dsdp);
-}
-
-static void
-init_namespace()
-{
- struct aml_environ env;
- struct aml_name *newname;
-
- aml_new_name_group(AML_NAME_GROUP_OS_DEFINED);
- env.curname = aml_get_rootname();
- newname = aml_create_name(&env, "\\_OS_");
- newname->property = aml_alloc_object(aml_t_string, NULL);
- newname->property->str.needfree = 0;
- newname->property->str.string = "Microsoft Windows NT";
-}
-
-/*
- * Public interfaces
- */
-
-void
-acpi_dump_dsdt(u_int8_t *dp, u_int8_t *end)
-{
- extern struct aml_environ asl_env;
-
- acpi_print_dsdt_definition();
-
- /* 1st stage: parse only w/o printing */
- init_namespace();
- aml_new_name_group((long)dp);
- bzero(&asl_env, sizeof(asl_env));
-
- asl_env.dp = dp;
- asl_env.end = end;
- asl_env.curname = aml_get_rootname();
-
- aml_local_stack_push(aml_local_stack_create());
- aml_parse_objectlist(&asl_env, 0);
- aml_local_stack_delete(aml_local_stack_pop());
-
- assert(asl_env.dp == asl_env.end);
- asl_env.dp = dp;
-
- /* 2nd stage: dump whole object list */
- printf("\n{\n");
- asl_dump_objectlist(&dp, end, 0);
- printf("\n}\n");
- assert(dp == end);
-}
-
-void
-acpi_print_sdt(struct ACPIsdt *sdp)
-{
-
- printf(BEGIN_COMMENT);
- acpi_print_string(sdp->signature, 4);
- printf(": Length=%d, Revision=%d, Checksum=%d,\n",
- sdp->len, sdp->rev, sdp->check);
- printf("\tOEMID=");
- acpi_print_string(sdp->oemid, 6);
- printf(", OEM Table ID=");
- acpi_print_string(sdp->oemtblid, 8);
- printf(", OEM Revision=0x%x,\n", sdp->oemrev);
- printf("\tCreator ID=");
- acpi_print_string(sdp->creator, 4);
- printf(", Creator Revision=0x%x\n", sdp->crerev);
- printf(END_COMMENT);
- if (!memcmp(sdp->signature, "DSDT", 4)) {
- memcpy(&dsdt_header, sdp, sizeof(dsdt_header));
- }
-}
-
-void
-acpi_print_rsdt(struct ACPIsdt *rsdp)
-{
- int i, entries;
-
- acpi_print_sdt(rsdp);
- entries = (rsdp->len - SIZEOF_SDT_HDR) / sizeof(u_int32_t);
- printf(BEGIN_COMMENT);
- printf("\tEntries={ ");
- for (i = 0; i < entries; i++) {
- if (i > 0)
- printf(", ");
- printf("0x%08x", rsdp->body[i]);
- }
- printf(" }\n");
- printf(END_COMMENT);
-}
-
-void
-acpi_print_facp(struct FACPbody *facp)
-{
- char sep;
-
- printf(BEGIN_COMMENT);
- printf("\tDSDT=0x%x\n", facp->dsdt_ptr);
- printf("\tINT_MODEL=%s\n", facp->int_model ? "APIC" : "PIC");
- printf("\tSCI_INT=%d\n", facp->sci_int);
- printf("\tSMI_CMD=0x%x, ", facp->smi_cmd);
- printf("ACPI_ENABLE=0x%x, ", facp->acpi_enable);
- printf("ACPI_DISABLE=0x%x, ", facp->acpi_disable);
- printf("S4BIOS_REQ=0x%x\n", facp->s4biosreq);
- if (facp->pm1a_evt_blk)
- printf("\tPM1a_EVT_BLK=0x%x-0x%x\n",
- facp->pm1a_evt_blk,
- facp->pm1a_evt_blk + facp->pm1_evt_len - 1);
- if (facp->pm1b_evt_blk)
- printf("\tPM1b_EVT_BLK=0x%x-0x%x\n",
- facp->pm1b_evt_blk,
- facp->pm1b_evt_blk + facp->pm1_evt_len - 1);
- if (facp->pm1a_cnt_blk)
- printf("\tPM1a_CNT_BLK=0x%x-0x%x\n",
- facp->pm1a_cnt_blk,
- facp->pm1a_cnt_blk + facp->pm1_cnt_len - 1);
- if (facp->pm1b_cnt_blk)
- printf("\tPM1b_CNT_BLK=0x%x-0x%x\n",
- facp->pm1b_cnt_blk,
- facp->pm1b_cnt_blk + facp->pm1_cnt_len - 1);
- if (facp->pm2_cnt_blk)
- printf("\tPM2_CNT_BLK=0x%x-0x%x\n",
- facp->pm2_cnt_blk,
- facp->pm2_cnt_blk + facp->pm2_cnt_len - 1);
- if (facp->pm_tmr_blk)
- printf("\tPM2_TMR_BLK=0x%x-0x%x\n",
- facp->pm_tmr_blk,
- facp->pm_tmr_blk + facp->pm_tmr_len - 1);
- if (facp->gpe0_blk)
- printf("\tPM2_GPE0_BLK=0x%x-0x%x\n",
- facp->gpe0_blk,
- facp->gpe0_blk + facp->gpe0_len - 1);
- if (facp->gpe1_blk)
- printf("\tPM2_GPE1_BLK=0x%x-0x%x, GPE1_BASE=%d\n",
- facp->gpe1_blk,
- facp->gpe1_blk + facp->gpe1_len - 1,
- facp->gpe1_base);
- printf("\tP_LVL2_LAT=%dms, P_LVL3_LAT=%dms\n",
- facp->p_lvl2_lat, facp->p_lvl3_lat);
- printf("\tFLUSH_SIZE=%d, FLUSH_STRIDE=%d\n",
- facp->flush_size, facp->flush_stride);
- printf("\tDUTY_OFFSET=%d, DUTY_WIDTH=%d\n",
- facp->duty_off, facp->duty_width);
- printf("\tDAY_ALRM=%d, MON_ALRM=%d, CENTURY=%d\n",
- facp->day_alrm, facp->mon_alrm, facp->century);
- printf("\tFlags=");
- sep = '{';
-
-#define PRINTFLAG(xx) do { \
- if (facp->flags & ACPI_FACP_FLAG_## xx) { \
- printf("%c%s", sep, #xx); sep = ','; \
- } \
-} while (0)
-
- PRINTFLAG(WBINVD);
- PRINTFLAG(WBINVD_FLUSH);
- PRINTFLAG(PROC_C1);
- PRINTFLAG(P_LVL2_UP);
- PRINTFLAG(PWR_BUTTON);
- PRINTFLAG(SLP_BUTTON);
- PRINTFLAG(FIX_RTC);
- PRINTFLAG(RTC_S4);
- PRINTFLAG(TMR_VAL_EXT);
- PRINTFLAG(DCK_CAP);
-
-#undef PRINTFLAG
-
- printf("}\n");
- printf(END_COMMENT);
-}
-
-void
-acpi_print_dsdt(struct ACPIsdt *dsdp)
-{
-
- acpi_print_sdt(dsdp);
-}
-
-int
-acpi_checksum(void *p, size_t length)
-{
- u_int8_t *bp;
- u_int8_t sum;
-
- bp = p;
- sum = 0;
- while (length--)
- sum += *bp++;
-
- return (sum);
-}
-
-struct ACPIsdt *
-acpi_map_sdt(vm_offset_t pa)
-{
- struct ACPIsdt *sp;
-
- sp = acpi_map_physical(pa, sizeof(struct ACPIsdt));
- sp = acpi_map_physical(pa, sp->len);
- return (sp);
-}
-
-void
-acpi_print_rsd_ptr(struct ACPIrsdp *rp)
-{
-
- printf(BEGIN_COMMENT);
- printf("RSD PTR: Checksum=%d, OEMID=", rp->sum);
- acpi_print_string(rp->oem, 6);
- printf(", RsdtAddress=0x%08x\n", rp->addr);
- printf(END_COMMENT);
-}
-
-void
-acpi_handle_rsdt(struct ACPIsdt *rsdp)
-{
- int i;
- int entries;
- struct ACPIsdt *sdp;
-
- aml_dump(rsdp);
- entries = (rsdp->len - SIZEOF_SDT_HDR) / sizeof(u_int32_t);
- acpi_print_rsdt(rsdp);
- for (i = 0; i < entries; i++) {
- sdp = (struct ACPIsdt *) acpi_map_sdt(rsdp->body[i]);
- if (acpi_checksum(sdp, sdp->len))
- errx(1, "RSDT entry %d is corrupt", i);
- aml_dump(sdp);
- if (!memcmp(sdp->signature, "FACP", 4)) {
- acpi_handle_facp((struct FACPbody *) sdp->body);
- } else {
- acpi_print_sdt(sdp);
- }
- }
-}
-
-/*
- * Dummy functions
- */
-
-void
-aml_dbgr(struct aml_environ *env1, struct aml_environ *env2)
-{
- /* do nothing */
-}
-
-int
-aml_region_read_simple(struct aml_region_handle *h, vm_offset_t offset,
- u_int32_t *valuep)
-{
- return (0);
-}
-
-int
-aml_region_write_simple(struct aml_region_handle *h, vm_offset_t offset,
- u_int32_t value)
-{
- return (0);
-}
-
-u_int32_t
-aml_region_prompt_read(struct aml_region_handle *h, u_int32_t value)
-{
- return (0);
-}
-
-u_int32_t
-aml_region_prompt_write(struct aml_region_handle *h, u_int32_t value)
-{
- return (0);
-}
-
-int
-aml_region_prompt_update_value(u_int32_t orgval, u_int32_t value,
- struct aml_region_handle *h)
-{
- return (0);
-}
-
-u_int32_t
-aml_region_read(struct aml_environ *env, int regtype, u_int32_t flags,
- u_int32_t addr, u_int32_t bitoffset, u_int32_t bitlen)
-{
- return (0);
-}
-
-int
-aml_region_write(struct aml_environ *env, int regtype, u_int32_t flags,
- u_int32_t value, u_int32_t addr, u_int32_t bitoffset, u_int32_t bitlen)
-{
- return (0);
-}
-
-int
-aml_region_write_from_buffer(struct aml_environ *env, int regtype,
- u_int32_t flags, u_int8_t *buffer, u_int32_t addr, u_int32_t bitoffset,
- u_int32_t bitlen)
-{
- return (0);
-}
-
-int
-aml_region_bcopy(struct aml_environ *env, int regtype, u_int32_t flags,
- u_int32_t addr, u_int32_t bitoffset, u_int32_t bitlen,
- u_int32_t dflags, u_int32_t daddr,
- u_int32_t dbitoffset, u_int32_t dbitlen)
-{
- return (0);
-}
-
-int
-aml_region_read_into_buffer(struct aml_environ *env, int regtype,
- u_int32_t flags, u_int32_t addr, u_int32_t bitoffset,
- u_int32_t bitlen, u_int8_t *buffer)
-{
- return (0);
-}
-
+++ /dev/null
-/* $OpenBSD: acpi_user.c,v 1.6 2008/06/06 10:16:03 marco Exp $ */
-/*-
- * 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.
- *
- * $Id: acpi_user.c,v 1.6 2008/06/06 10:16:03 marco Exp $
- * $FreeBSD: src/usr.sbin/acpi/acpidump/acpi_user.c,v 1.3 2000/11/08 02:37:00 iwasaki Exp $
- */
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/queue.h>
-#include <sys/stat.h>
-
-#include <uvm/uvm_extern.h>
-
-#include <err.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "acpidump.h"
-
-#define vm_page_size sysconf(_SC_PAGESIZE)
-
-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;
-};
-
-LIST_HEAD(acpi_user_mapping_list, acpi_user_mapping) maplist;
-
-static void
-acpi_user_init()
-{
-
- 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 (map->va == MAP_FAILED)
- err(1, "can't map address");
- LIST_INSERT_HEAD(&maplist, map, link);
-
- return (map);
-}
-
-/*
- * Public interfaces
- */
-
-struct ACPIrsdp *
-acpi_find_rsd_ptr()
-{
- int i;
- u_int8_t buf[sizeof(struct ACPIrsdp)];
-
- acpi_user_init();
- for (i = 0; i < 1024 * 1024; i += 16) {
- lseek(acpi_mem_fd, i, SEEK_SET);
- read(acpi_mem_fd, buf, 16);
- if (!memcmp(buf, "RSD PTR ", 8)) {
- /* Read the rest of the structure */
- read(acpi_mem_fd, buf + 16, sizeof(struct ACPIrsdp) - 16);
-
- /* Verify checksum before accepting it. */
- if (acpi_checksum(buf, sizeof(struct ACPIrsdp)))
- continue;
-
- return (acpi_map_physical(i, sizeof(struct ACPIrsdp)));
- }
- }
-
- return (0);
-}
-
-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));
-}
-
-void
-acpi_load_dsdt(char *dumpfile, u_int8_t **dpp, u_int8_t **endp)
-{
- u_int8_t *dp;
- u_int8_t *end;
- struct stat sb;
-
- if ((acpi_mem_fd = open(dumpfile, O_RDONLY)) == -1) {
- errx(1, "opening %s", dumpfile);
- }
-
- LIST_INIT(&maplist);
-
- if (fstat(acpi_mem_fd, &sb) == -1) {
- errx(1, "fstat %s", dumpfile);
- }
-
- dp = mmap(0, sb.st_size, PROT_READ, MAP_PRIVATE, acpi_mem_fd, 0);
- if (dp == MAP_FAILED) {
- errx(1, "mmap %s", dumpfile);
- }
-
- if (sb.st_size >= SIZEOF_SDT_HDR && strncmp(dp, "DSDT", 4) == 0) {
- memcpy(&dsdt_header, dp, SIZEOF_SDT_HDR);
- dp += SIZEOF_SDT_HDR;
- sb.st_size -= SIZEOF_SDT_HDR;
- }
-
- end = (u_int8_t *) dp + sb.st_size;
- *dpp = dp;
- *endp = end;
-}
-.\" $OpenBSD: acpidump.8,v 1.9 2008/10/30 22:08:57 sobrado Exp $
+.\" $OpenBSD: acpidump.8,v 1.10 2010/08/05 17:30:28 marco Exp $
.\"
.\" Copyright (c) 1999 Doug Rabson <dfr@FreeBSD.org>
.\" Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org>
.\"
.\" $FreeBSD: src/usr.sbin/acpi/acpidump/acpidump.8,v 1.9 2001/09/05 19:21:25 dd Exp $
.\"
-.Dd $Mdocdate: October 30 2008 $
+.Dd $Mdocdate: August 5 2010 $
.Dt ACPIDUMP 8
.Os
.Sh NAME
.Nd dump ACPI tables
.Sh SYNOPSIS
.Nm
-.Op Fl f Ar dsdt_file_for_input
-.Nm
.Op Fl o Ar prefix_for_output
.Sh DESCRIPTION
-The
-.Nm
-command analyzes ACPI tables in physical memory and dumps them to standard output.
-In addition,
-.Nm
-can disassemble some contents of the tables in AML
-(ACPI Machine Language)
-and dump them in ASL
-(ACPI Source Language).
-.Pp
-ACPI tables have an notably essential data block called 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.
-.Nm
-can extract a DSDT data block from physical memory and store it into
-a DSDT data file, and can also generate an output in ASL
-from a given DSDT data file.
-.Pp
-The options are as follows:
-.Bl -tag -width indent
-.It Fl f Ar dsdt_file_for_input
-Interpret AML data in DSDT from a file specified in
-.Ar dsdt_file_for_input
-and dumps them in ASL to standard output.
-.It Fl o Ar prefix_for_output
Store ACPI tables from physical memory into files specified by
.Ar prefix_for_output .
The files generated will
is the signature of the ACPI Table;
.Dq id
is unique for each table.
-.Pp
-The following are common table signatures (there may be others):
-RSDP, FACP, DSDT, SSDT, HPET, MCFG, SPMI, APIC, SPCR, SRAT, XSDT.
-.El
-.Pp
-When
-.Nm
-is invoked with no options, it will search ACPI tables from physical
-memory via a special file
-.Pa /dev/mem
-and dump them.
-First, it searches Root System Description Pointer,
-that has a signature
-.Qq RSD PTR\ \& ,
-and then gets RSDT
-(Root System Description Table),
-which includes a list of pointers to physical memory addresses
-for other tables.
-RSDT itself and all other tables linked from RSDT are generically
-called SDT
-(System Description Table)
-and their header has the common format which consists of items
-such as Signature, Length, Revision, Checksum, OEMID, OEM Table ID,
-OEM Revision, Creator ID, and Creator Revision.
-.Nm
-dumps the contents of these SDTs.
-For further information about the formats of each table,
-see chapter 5: ACPI Software Programming Model,
-.Dq Advanced Configuration and Power Interface Specification Revision 1.0b
-from Intel/Microsoft/Toshiba.
-.Pp
-There is always a pointer to a physical memory address in RSDT for FACP
-(Fixed ACPI Description Table).
-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.
-FACP also has a pointer to a physical memory address for DSDT,
-which includes information used on the kernel side such as
-PnP, power management support, and so on.
-While the other tables are described in a fixed format,
-DSDT consists of AML data which is compiled from sources
-written in free formatted ASL, a description language for ACPI.
-When
-.Nm
-outputs DSDT, it disassembles the AML data and
-translates them into ASL.
+Additionally a file called <prefix>.headers will be created that contains
+additional human readable information pertaining to this specific dump.
.Sh FILES
.Bl -tag -width /dev/mem
.It Pa /dev/mem
.El
.Sh SEE ALSO
-.\" .Xr acpi 4 ,
.Xr mem 4
-.\" .Xr acpiconf 8 ,
-.\" Xr amldb 8
-.Rs
-.%T Advanced Configuration and Power Interface Specification
-.%A Intel
-.%A Microsoft
-.%A Toshiba
-.%R Revision 1.0b
-.Re
.Sh HISTORY
The
.Nm
command first appeared in
.Ox 3.8 .
-.Sh AUTHORS
-.An Doug Rabson Aq dfr@FreeBSD.org
-.An Mitsuru IWASAKI Aq iwasaki@FreeBSD.org
-.An Yasuo YOKOYAMA Aq yokoyama@jp.FreeBSD.org
-.Pp
-Some contributions made by:
-.An Chitoshi Ohsawa Aq ohsawa@catv1.ccn-net.ne.jp ,
-.An Takayasu IWANASHI Aq takayasu@wendy.a.perfect-liberty.or.jp ,
-.An Yoshihiko SARUMARU Aq mistral@imasy.or.jp ,
-.An Hiroki Sato Aq hrs@FreeBSD.org ,
-.An Jordan Hargrave Aq jordan@openbsd.org
-and
-.An Michael Lucas Aq mwlucas@blackhelicopters.org .
-.Sh BUGS
-In the current implementation,
-.Nm
-doesn't dump any information of Firmware ACPI Control Structure
-(FACS)
-specified by a pointer in FACP.
-/* $OpenBSD: acpidump.c,v 1.5 2008/09/10 14:59:51 miod Exp $ */
-/*-
+/* $OpenBSD: acpidump.c,v 1.6 2010/08/05 17:30:28 marco Exp $ */
+/*
* Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@FreeBSD.org>
* All rights reserved.
*
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: acpidump.c,v 1.5 2008/09/10 14:59:51 miod Exp $
- * $FreeBSD: src/usr.sbin/acpi/acpidump/acpidump.c,v 1.3 2000/11/08 02:37:00 iwasaki Exp $
*/
#include <sys/types.h>
#include <assert.h>
#include <err.h>
+#include <fcntl.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "acpidump.h"
+#include <sys/mman.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/syslimits.h>
+
+#include <uvm/uvm_extern.h>
+
+#define vm_page_size sysconf(_SC_PAGESIZE)
+#define PRINTFLAG(xx) \
+ do { \
+ if (facp->flags & ACPI_FACP_FLAG_## xx) { \
+ fprintf(fhdr, "%c%s", sep, #xx); sep = ','; \
+ } \
+ } while (0)
+
+
+typedef unsigned long vm_offset_t;
+
+struct ACPIrsdp {
+ u_char signature[8];
+ u_char sum;
+ u_char oem[6];
+ u_char res;
+ u_int32_t addr;
+} __packed;
+
+struct ACPIsdt {
+ u_char signature[4];
+ u_int32_t len;
+ u_char rev;
+ u_char check;
+ u_char oemid[6];
+ u_char oemtblid[8];
+ u_int32_t oemrev;
+ u_char creator[4];
+ u_int32_t crerev;
+#define SIZEOF_SDT_HDR 36 /* struct size except body */
+ u_int32_t body[1];/* This member should be casted */
+} __packed;
+
+struct ACPIgas {
+ u_int8_t address_space_id;
+#define ACPI_GAS_MEMORY 0
+#define ACPI_GAS_IO 1
+#define ACPI_GAS_PCI 2
+#define ACPI_GAS_EMBEDDED 3
+#define ACPI_GAS_SMBUS 4
+#define ACPI_GAS_FIXED 0x7f
+ u_int8_t register_bit_width;
+ u_int8_t register_bit_offset;
+ u_int8_t res;
+ u_int64_t address;
+} __packed;
+
+struct FACPbody {
+ u_int32_t facs_ptr;
+ u_int32_t dsdt_ptr;
+ u_int8_t int_model;
+#define ACPI_FACP_INTMODEL_PIC 0 /* Standard PC-AT PIC */
+#define ACPI_FACP_INTMODEL_APIC 1 /* Multiple APIC */
+ u_char reserved1;
+ u_int16_t sci_int;
+ u_int32_t smi_cmd;
+ u_int8_t acpi_enable;
+ u_int8_t acpi_disable;
+ u_int8_t s4biosreq;
+ u_int8_t reserved2;
+ u_int32_t pm1a_evt_blk;
+ u_int32_t pm1b_evt_blk;
+ u_int32_t pm1a_cnt_blk;
+ u_int32_t pm1b_cnt_blk;
+ u_int32_t pm2_cnt_blk;
+ u_int32_t pm_tmr_blk;
+ u_int32_t gpe0_blk;
+ u_int32_t gpe1_blk;
+ u_int8_t pm1_evt_len;
+ u_int8_t pm1_cnt_len;
+ u_int8_t pm2_cnt_len;
+ u_int8_t pm_tmr_len;
+ u_int8_t gpe0_len;
+ u_int8_t gpe1_len;
+ u_int8_t gpe1_base;
+ u_int8_t reserved3;
+ u_int16_t p_lvl2_lat;
+ u_int16_t p_lvl3_lat;
+ u_int16_t flush_size;
+ u_int16_t flush_stride;
+ u_int8_t duty_off;
+ u_int8_t duty_width;
+ u_int8_t day_alrm;
+ u_int8_t mon_alrm;
+ u_int8_t century;
+ u_int16_t iapc_boot_arch;
+ u_char reserved4[1];
+ u_int32_t flags;
+#define ACPI_FACP_FLAG_WBINVD 1 /* WBINVD is correctly supported */
+#define ACPI_FACP_FLAG_WBINVD_FLUSH 2 /* WBINVD flushes caches */
+#define ACPI_FACP_FLAG_PROC_C1 4 /* C1 power state supported */
+#define ACPI_FACP_FLAG_P_LVL2_UP 8 /* C2 power state works on SMP */
+#define ACPI_FACP_FLAG_PWR_BUTTON 16 /* Power button uses control method */
+#define ACPI_FACP_FLAG_SLP_BUTTON 32 /* Sleep button uses control method */
+#define ACPI_FACP_FLAG_FIX_RTC 64 /* RTC wakeup not supported */
+#define ACPI_FACP_FLAG_RTC_S4 128 /* RTC can wakeup from S4 state */
+#define ACPI_FACP_FLAG_TMR_VAL_EXT 256 /* TMR_VAL is 32bit */
+#define ACPI_FACP_FLAG_DCK_CAP 512 /* Can support docking */
+ struct ACPIgas reset_reg;
+ u_int8_t reset_value;
+ u_int8_t reserved5[3];
+ u_int64_t x_firmware_ctrl;
+ u_int64_t x_dsdt;
+ struct ACPIgas x_pm1a_evt_blk;
+ struct ACPIgas x_pm1b_evt_blk;
+ struct ACPIgas x_pm1a_cnt_blk;
+ struct ACPIgas x_pm1b_cnt_blk;
+ struct ACPIgas x_pm2_cnt_blk;
+ struct ACPIgas x_pm_tmr_blk;
+ struct ACPIgas x_gpe0_blk;
+ struct ACPIgas x_gpe1_blk;
+} __packed;
+
+struct acpi_user_mapping {
+ LIST_ENTRY(acpi_user_mapping) link;
+ vm_offset_t pa;
+ caddr_t va;
+ size_t size;
+};
+
+LIST_HEAD(acpi_user_mapping_list, acpi_user_mapping) maplist;
+
+int acpi_mem_fd = -1;
+char *aml_dumpfile;
+FILE *fhdr;
+
+struct ACPIsdt dsdt_header = {
+ "DSDT", 0, 1, 0, "OEMID", "OEMTBLID", 0x12345678, "CRTR", 0x12345678
+};
-static void
-asl_dump_from_file(char *file)
+int
+acpi_checksum(void *p, size_t length)
+{
+ u_int8_t *bp;
+ u_int8_t sum;
+
+ bp = p;
+ sum = 0;
+ while (length--)
+ sum += *bp++;
+
+ return (sum);
+}
+
+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 (map->va == MAP_FAILED)
+ err(1, "can't map address");
+ LIST_INSERT_HEAD(&maplist, map, link);
+
+ return (map);
+}
+
+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));
+}
+
+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);
+ }
+}
+
+struct ACPIrsdp *
+acpi_find_rsd_ptr()
+{
+ int i;
+ u_int8_t buf[sizeof(struct ACPIrsdp)];
+
+ acpi_user_init();
+ for (i = 0; i < 1024 * 1024; i += 16) {
+ lseek(acpi_mem_fd, i, SEEK_SET);
+ read(acpi_mem_fd, buf, 16);
+ if (!memcmp(buf, "RSD PTR ", 8)) {
+ /* Read the rest of the structure */
+ read(acpi_mem_fd, buf + 16, sizeof(struct ACPIrsdp) - 16);
+
+ /* Verify checksum before accepting it. */
+ if (acpi_checksum(buf, sizeof(struct ACPIrsdp)))
+ continue;
+
+ return (acpi_map_physical(i, sizeof(struct ACPIrsdp)));
+ }
+ }
+
+ return (0);
+}
+
+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++;
+ fputc(c, fhdr);
+ }
+}
+
+void
+acpi_print_rsd_ptr(struct ACPIrsdp *rp)
+{
+ fprintf(fhdr, "\n");
+ fprintf(fhdr, "RSD PTR: Checksum=%d, OEMID=", rp->sum);
+ acpi_print_string(rp->oem, 6);
+ fprintf(fhdr, ", RsdtAddress=0x%08x\n", rp->addr);
+ fprintf(fhdr, "\n");
+}
+
+struct ACPIsdt *
+acpi_map_sdt(vm_offset_t pa)
+{
+ struct ACPIsdt *sp;
+
+ sp = acpi_map_physical(pa, sizeof(struct ACPIsdt));
+ sp = acpi_map_physical(pa, sp->len);
+ return (sp);
+}
+
+void
+aml_dump(struct ACPIsdt *hdr)
+{
+ static int hdr_index;
+ char name[PATH_MAX];
+ int fd;
+ mode_t mode;
+
+ snprintf(name, sizeof(name), "%s.%c%c%c%c.%d",
+ aml_dumpfile, hdr->signature[0], hdr->signature[1],
+ hdr->signature[2], hdr->signature[3],
+ hdr_index++);
+
+ mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ fd = open(name, O_WRONLY | O_CREAT | O_TRUNC, mode);
+ if (fd == -1)
+ err(1, "aml_dump");
+
+ write(fd, hdr, SIZEOF_SDT_HDR);
+ write(fd, hdr->body, hdr->len - SIZEOF_SDT_HDR);
+ close(fd);
+}
+
+void
+acpi_print_sdt(struct ACPIsdt *sdp)
+{
+ fprintf(fhdr, "\n");
+ acpi_print_string(sdp->signature, 4);
+ fprintf(fhdr, ": Length=%d, Revision=%d, Checksum=%d,\n",
+ sdp->len, sdp->rev, sdp->check);
+ fprintf(fhdr, "\tOEMID=");
+ acpi_print_string(sdp->oemid, 6);
+ fprintf(fhdr, ", OEM Table ID=");
+ acpi_print_string(sdp->oemtblid, 8);
+ fprintf(fhdr, ", OEM Revision=0x%x,\n", sdp->oemrev);
+ fprintf(fhdr, "\tCreator ID=");
+ acpi_print_string(sdp->creator, 4);
+ fprintf(fhdr, ", Creator Revision=0x%x\n", sdp->crerev);
+ fprintf(fhdr, "\n");
+ if (!memcmp(sdp->signature, "DSDT", 4))
+ memcpy(&dsdt_header, sdp, sizeof(dsdt_header));
+}
+
+void
+acpi_print_rsdt(struct ACPIsdt *rsdp)
+{
+ int i, entries;
+
+ acpi_print_sdt(rsdp);
+ entries = (rsdp->len - SIZEOF_SDT_HDR) / sizeof(u_int32_t);
+ fprintf(fhdr, "\n");
+ fprintf(fhdr, "\tEntries={ ");
+ for (i = 0; i < entries; i++) {
+ if (i > 0)
+ fprintf(fhdr, ", ");
+ fprintf(fhdr, "0x%08x", rsdp->body[i]);
+ }
+ fprintf(fhdr, " }\n");
+ fprintf(fhdr, "\n");
+}
+
+void
+acpi_print_facp(struct FACPbody *facp)
+{
+ char sep;
+
+ fprintf(fhdr, "\n");
+ fprintf(fhdr, "\tDSDT=0x%x\n", facp->dsdt_ptr);
+ fprintf(fhdr, "\tINT_MODEL=%s\n", facp->int_model ? "APIC" : "PIC");
+ fprintf(fhdr, "\tSCI_INT=%d\n", facp->sci_int);
+ fprintf(fhdr, "\tSMI_CMD=0x%x, ", facp->smi_cmd);
+ fprintf(fhdr, "ACPI_ENABLE=0x%x, ", facp->acpi_enable);
+ fprintf(fhdr, "ACPI_DISABLE=0x%x, ", facp->acpi_disable);
+ fprintf(fhdr, "S4BIOS_REQ=0x%x\n", facp->s4biosreq);
+ if (facp->pm1a_evt_blk)
+ fprintf(fhdr, "\tPM1a_EVT_BLK=0x%x-0x%x\n",
+ facp->pm1a_evt_blk,
+ facp->pm1a_evt_blk + facp->pm1_evt_len - 1);
+ if (facp->pm1b_evt_blk)
+ fprintf(fhdr, "\tPM1b_EVT_BLK=0x%x-0x%x\n",
+ facp->pm1b_evt_blk,
+ facp->pm1b_evt_blk + facp->pm1_evt_len - 1);
+ if (facp->pm1a_cnt_blk)
+ fprintf(fhdr, "\tPM1a_CNT_BLK=0x%x-0x%x\n",
+ facp->pm1a_cnt_blk,
+ facp->pm1a_cnt_blk + facp->pm1_cnt_len - 1);
+ if (facp->pm1b_cnt_blk)
+ fprintf(fhdr, "\tPM1b_CNT_BLK=0x%x-0x%x\n",
+ facp->pm1b_cnt_blk,
+ facp->pm1b_cnt_blk + facp->pm1_cnt_len - 1);
+ if (facp->pm2_cnt_blk)
+ fprintf(fhdr, "\tPM2_CNT_BLK=0x%x-0x%x\n",
+ facp->pm2_cnt_blk,
+ facp->pm2_cnt_blk + facp->pm2_cnt_len - 1);
+ if (facp->pm_tmr_blk)
+ fprintf(fhdr, "\tPM2_TMR_BLK=0x%x-0x%x\n",
+ facp->pm_tmr_blk,
+ facp->pm_tmr_blk + facp->pm_tmr_len - 1);
+ if (facp->gpe0_blk)
+ fprintf(fhdr, "\tPM2_GPE0_BLK=0x%x-0x%x\n",
+ facp->gpe0_blk,
+ facp->gpe0_blk + facp->gpe0_len - 1);
+ if (facp->gpe1_blk)
+ fprintf(fhdr, "\tPM2_GPE1_BLK=0x%x-0x%x, GPE1_BASE=%d\n",
+ facp->gpe1_blk,
+ facp->gpe1_blk + facp->gpe1_len - 1,
+ facp->gpe1_base);
+ fprintf(fhdr, "\tP_LVL2_LAT=%dms, P_LVL3_LAT=%dms\n",
+ facp->p_lvl2_lat, facp->p_lvl3_lat);
+ fprintf(fhdr, "\tFLUSH_SIZE=%d, FLUSH_STRIDE=%d\n",
+ facp->flush_size, facp->flush_stride);
+ fprintf(fhdr, "\tDUTY_OFFSET=%d, DUTY_WIDTH=%d\n",
+ facp->duty_off, facp->duty_width);
+ fprintf(fhdr, "\tDAY_ALRM=%d, MON_ALRM=%d, CENTURY=%d\n",
+ facp->day_alrm, facp->mon_alrm, facp->century);
+ fprintf(fhdr, "\tFlags=");
+ sep = '{';
+
+ PRINTFLAG(WBINVD);
+ PRINTFLAG(WBINVD_FLUSH);
+ PRINTFLAG(PROC_C1);
+ PRINTFLAG(P_LVL2_UP);
+ PRINTFLAG(PWR_BUTTON);
+ PRINTFLAG(SLP_BUTTON);
+ PRINTFLAG(FIX_RTC);
+ PRINTFLAG(RTC_S4);
+ PRINTFLAG(TMR_VAL_EXT);
+ PRINTFLAG(DCK_CAP);
+
+ fprintf(fhdr, "}\n");
+ fprintf(fhdr, "\n");
+}
+
+void
+acpi_print_dsdt(struct ACPIsdt *dsdp)
+{
+ acpi_print_sdt(dsdp);
+}
+
+void
+acpi_handle_dsdt(struct ACPIsdt *dsdp)
{
u_int8_t *dp;
u_int8_t *end;
- acpi_load_dsdt(file, &dp, &end);
- acpi_dump_dsdt(dp, end);
+ acpi_print_dsdt(dsdp);
+
+ dp = (u_int8_t *)dsdp->body;
+ end = (u_int8_t *)dsdp + dsdp->len;
+}
+
+void
+acpi_handle_facp(struct FACPbody *facp)
+{
+ struct ACPIsdt *dsdp;
+
+ acpi_print_facp(facp);
+ dsdp = (struct ACPIsdt *) acpi_map_sdt(facp->dsdt_ptr);
+ if (acpi_checksum(dsdp, dsdp->len))
+ errx(1, "DSDT is corrupt");
+ acpi_handle_dsdt(dsdp);
+ aml_dump(dsdp);
}
-static void
-asl_dump_from_devmem()
+void
+acpi_handle_rsdt(struct ACPIsdt *rsdp)
{
- struct ACPIrsdp *rp;
- struct ACPIsdt *rsdp;
+ int i;
+ int entries;
+ struct ACPIsdt *sdp;
+
+ aml_dump(rsdp);
+ entries = (rsdp->len - SIZEOF_SDT_HDR) / sizeof(u_int32_t);
+ acpi_print_rsdt(rsdp);
+ for (i = 0; i < entries; i++) {
+ sdp = (struct ACPIsdt *) acpi_map_sdt(rsdp->body[i]);
+ if (acpi_checksum(sdp, sdp->len))
+ errx(1, "RSDT entry %d is corrupt", i);
+ aml_dump(sdp);
+ if (!memcmp(sdp->signature, "FACP", 4)) {
+ acpi_handle_facp((struct FACPbody *) sdp->body);
+ } else {
+ acpi_print_sdt(sdp);
+ }
+ }
+}
+
+void
+asl_dump_from_devmem(void)
+{
+ struct ACPIrsdp *rp;
+ struct ACPIsdt *rsdp;
+ char name[PATH_MAX];
+
+ snprintf(name, sizeof(name), "%s.headers", aml_dumpfile);
rp = acpi_find_rsd_ptr();
if (!rp)
errx(1, "Can't find ACPI information");
+ fhdr = fopen(name, "w");
+ if (fhdr == NULL)
+ err(1, "asl_dump_from_devmem");
+
acpi_print_rsd_ptr(rp);
rsdp = (struct ACPIsdt *) acpi_map_sdt(rp->addr);
if (memcmp(rsdp->signature, "RSDT", 4) ||
errx(1, "RSDT is corrupted");
acpi_handle_rsdt(rsdp);
+
+ fclose(fhdr);
}
-static void
+void
usage(void)
{
+ extern char *__progname;
- printf("usage: acpidump [-o dsdt_file_for_output]\n");
- printf(" acpidump [-f dsdt_file_for_input]\n");
+ fprintf(stderr, "%s [-o prefix_for_output]\n", __progname);
exit(1);
}
int
main(int argc, char *argv[])
{
- char c;
+ char c;
- while ((c = getopt(argc, argv, "f:o:")) != -1) {
- switch (c) {
- case 'f':
- asl_dump_from_file(optarg);
- return (0);
- case 'o':
+ while ((c = getopt(argc, argv, "o:")) != -1) {
+ if (c == 'o')
aml_dumpfile = optarg;
- break;
- default:
+ else
usage();
- }
}
+ if (aml_dumpfile == NULL)
+ usage();
+
asl_dump_from_devmem();
+
return (0);
}
+++ /dev/null
-/* $OpenBSD: acpidump.h,v 1.3 2007/10/08 08:20:49 gilles Exp $ */
-/*-
- * 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.
- *
- * $Id: acpidump.h,v 1.3 2007/10/08 08:20:49 gilles Exp $
- * $FreeBSD: src/usr.sbin/acpi/acpidump/acpidump.h,v 1.2 2000/11/08 02:37:00 iwasaki Exp $
- */
-
-#ifndef _ACPIDUMP_H_
-#define _ACPIDUMP_H_
-#include <stdlib.h>
-
-typedef unsigned long vm_offset_t;
-
-/* Generic Address structure */
-struct ACPIgas {
- u_int8_t address_space_id;
-#define ACPI_GAS_MEMORY 0
-#define ACPI_GAS_IO 1
-#define ACPI_GAS_PCI 2
-#define ACPI_GAS_EMBEDDED 3
-#define ACPI_GAS_SMBUS 4
-#define ACPI_GAS_FIXED 0x7f
- u_int8_t register_bit_width;
- u_int8_t register_bit_offset;
- u_int8_t res;
- u_int64_t address;
-} __packed;
-
-/* Root System Description Pointer */
-struct ACPIrsdp {
- u_char signature[8];
- u_char sum;
- u_char oem[6];
- u_char res;
- u_int32_t addr;
-} __packed;
-
-/* System Description Table */
-struct ACPIsdt {
- u_char signature[4];
- u_int32_t len;
- u_char rev;
- u_char check;
- u_char oemid[6];
- u_char oemtblid[8];
- u_int32_t oemrev;
- u_char creator[4];
- u_int32_t crerev;
-#define SIZEOF_SDT_HDR 36 /* struct size except body */
- u_int32_t body[1];/* This member should be casted */
-} __packed;
-
-/* Fixed ACPI Description Table (body) */
-struct FACPbody {
- u_int32_t facs_ptr;
- u_int32_t dsdt_ptr;
- u_int8_t int_model;
-#define ACPI_FACP_INTMODEL_PIC 0 /* Standard PC-AT PIC */
-#define ACPI_FACP_INTMODEL_APIC 1 /* Multiple APIC */
- u_char reserved1;
- u_int16_t sci_int;
- u_int32_t smi_cmd;
- u_int8_t acpi_enable;
- u_int8_t acpi_disable;
- u_int8_t s4biosreq;
- u_int8_t reserved2;
- u_int32_t pm1a_evt_blk;
- u_int32_t pm1b_evt_blk;
- u_int32_t pm1a_cnt_blk;
- u_int32_t pm1b_cnt_blk;
- u_int32_t pm2_cnt_blk;
- u_int32_t pm_tmr_blk;
- u_int32_t gpe0_blk;
- u_int32_t gpe1_blk;
- u_int8_t pm1_evt_len;
- u_int8_t pm1_cnt_len;
- u_int8_t pm2_cnt_len;
- u_int8_t pm_tmr_len;
- u_int8_t gpe0_len;
- u_int8_t gpe1_len;
- u_int8_t gpe1_base;
- u_int8_t reserved3;
- u_int16_t p_lvl2_lat;
- u_int16_t p_lvl3_lat;
- u_int16_t flush_size;
- u_int16_t flush_stride;
- u_int8_t duty_off;
- u_int8_t duty_width;
- u_int8_t day_alrm;
- u_int8_t mon_alrm;
- u_int8_t century;
- u_int16_t iapc_boot_arch;
- u_char reserved4[1];
- u_int32_t flags;
-#define ACPI_FACP_FLAG_WBINVD 1 /* WBINVD is correctly supported */
-#define ACPI_FACP_FLAG_WBINVD_FLUSH 2 /* WBINVD flushes caches */
-#define ACPI_FACP_FLAG_PROC_C1 4 /* C1 power state supported */
-#define ACPI_FACP_FLAG_P_LVL2_UP 8 /* C2 power state works on SMP */
-#define ACPI_FACP_FLAG_PWR_BUTTON 16 /* Power button uses control method */
-#define ACPI_FACP_FLAG_SLP_BUTTON 32 /* Sleep button uses control method */
-#define ACPI_FACP_FLAG_FIX_RTC 64 /* RTC wakeup not supported */
-#define ACPI_FACP_FLAG_RTC_S4 128 /* RTC can wakeup from S4 state */
-#define ACPI_FACP_FLAG_TMR_VAL_EXT 256 /* TMR_VAL is 32bit */
-#define ACPI_FACP_FLAG_DCK_CAP 512 /* Can support docking */
- struct ACPIgas reset_reg;
- u_int8_t reset_value;
- u_int8_t reserved5[3];
- u_int64_t x_firmware_ctrl;
- u_int64_t x_dsdt;
- struct ACPIgas x_pm1a_evt_blk;
- struct ACPIgas x_pm1b_evt_blk;
- struct ACPIgas x_pm1a_cnt_blk;
- struct ACPIgas x_pm1b_cnt_blk;
- struct ACPIgas x_pm2_cnt_blk;
- struct ACPIgas x_pm_tmr_blk;
- struct ACPIgas x_gpe0_blk;
- struct ACPIgas x_gpe1_blk;
-} __packed;
-
-/* Firmware ACPI Control Structure */
-struct FACS {
- u_char signature[4];
- u_int32_t len;
- u_char hard_sig[4];
- /*
- * NOTE This should be filled with physical address below 1MB!!
- * sigh....
- */
- u_int32_t firm_wake_vec;
- u_int32_t g_lock; /* bit field */
- /* 5.2.6.1 Global Lock */
-#define ACPI_GLOBAL_LOCK_PENDING 1
-#define ACPI_GLOBAL_LOCK_OWNED 2
- u_int32_t flags; /* bit field */
-#define ACPI_FACS_FLAG_S4BIOS_F 1 /* Supports S4BIOS_SEQ */
- char reserved[40];
-} __packed;
-
-void *acpi_map_physical(vm_offset_t, size_t);
-struct ACPIrsdp *acpi_find_rsd_ptr(void);
-int acpi_checksum(void *, size_t)
- __attribute__ ((__bounded__(__buffer__,1,2)));
-struct ACPIsdt *acpi_map_sdt(vm_offset_t);
-void acpi_print_rsd_ptr(struct ACPIrsdp *);
-void acpi_print_sdt(struct ACPIsdt *);
-void acpi_print_rsdt(struct ACPIsdt *);
-void acpi_print_facp(struct FACPbody *);
-void acpi_print_dsdt(struct ACPIsdt *);
-
-void asl_dump_termobj(u_int8_t **, int);
-void asl_dump_objectlist(u_int8_t **, u_int8_t *, int);
-
-void aml_dump(struct ACPIsdt *);
-
-void acpi_handle_rsdt(struct ACPIsdt *);
-void acpi_load_dsdt(char *, u_int8_t **, u_int8_t **);
-void acpi_dump_dsdt(u_int8_t *, u_int8_t *);
-extern char *aml_dumpfile;
-extern struct ACPIsdt dsdt_header;
-
-#endif /* !_ACPIDUMP_H_ */
+++ /dev/null
-/* $OpenBSD: aml_dump.c,v 1.2 2007/02/22 19:09:26 jordan Exp $ */
-/*-
- * 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.
- *
- * $Id: aml_dump.c,v 1.2 2007/02/22 19:09:26 jordan Exp $
- * $FreeBSD: src/usr.sbin/acpi/acpidump/aml_dump.c,v 1.3 2000/11/08 02:37:00 iwasaki Exp $
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include "acpidump.h"
-
-char *aml_dumpfile = NULL;
-
-void
-aml_dump(struct ACPIsdt *hdr)
-{
- static int hdr_index;
- char name[128];
- int fd;
- mode_t mode;
-
- if (aml_dumpfile == NULL) {
- return;
- }
-
- snprintf(name, sizeof(name), "%s.%c%c%c%c.%d",
- aml_dumpfile, hdr->signature[0], hdr->signature[1],
- hdr->signature[2], hdr->signature[3],
- hdr_index++);
-
- mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
- fd = open(name, O_WRONLY | O_CREAT | O_TRUNC, mode);
- if (fd == -1) {
- return;
- }
- write(fd, hdr, SIZEOF_SDT_HDR);
- write(fd, hdr->body, hdr->len - SIZEOF_SDT_HDR);
- close(fd);
-}
+++ /dev/null
-/* $OpenBSD: asl_dump.c,v 1.8 2008/06/06 10:16:47 marco Exp $ */
-/*-
- * 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.
- *
- * $Id: asl_dump.c,v 1.8 2008/06/06 10:16:47 marco Exp $
- * $FreeBSD: src/usr.sbin/acpi/acpidump/asl_dump.c,v 1.5 2001/10/23 14:53:58 takawata Exp $
- */
-
-#include <sys/param.h>
-
-#include <assert.h>
-#include <err.h>
-#include <stdio.h>
-
-#include "acpidump.h"
-
-#include "aml/aml_env.h"
-
-struct aml_environ asl_env;
-
-static u_int32_t
-asl_dump_pkglength(u_int8_t **dpp)
-{
- u_int8_t *dp;
- u_int32_t pkglength;
-
- dp = *dpp;
- pkglength = *dp++;
- switch (pkglength >> 6) {
- case 0:
- break;
- case 1:
- pkglength = (pkglength & 0xf) + (dp[0] << 4);
- dp += 1;
- break;
- case 2:
- pkglength = (pkglength & 0xf) + (dp[0] << 4) + (dp[1] << 12);
- dp += 2;
- break;
- case 3:
- pkglength = (pkglength & 0xf)
- + (dp[0] << 4) + (dp[1] << 12) + (dp[2] << 20);
- dp += 3;
- break;
- }
-
- *dpp = dp;
- return (pkglength);
-}
-
-static void
-print_nameseg(u_int8_t *dp)
-{
-
- if (dp[3] != '_')
- printf("%c%c%c%c", dp[0], dp[1], dp[2], dp[3]);
- else if (dp[2] != '_')
- printf("%c%c%c_", dp[0], dp[1], dp[2]);
- else if (dp[1] != '_')
- printf("%c%c__", dp[0], dp[1]);
- else if (dp[0] != '_')
- printf("%c___", dp[0]);
-}
-
-static u_int8_t
-asl_dump_bytedata(u_int8_t **dpp)
-{
- u_int8_t *dp;
- u_int8_t data;
-
- dp = *dpp;
- data = dp[0];
- *dpp = dp + 1;
- return (data);
-}
-
-static u_int16_t
-asl_dump_worddata(u_int8_t **dpp)
-{
- u_int8_t *dp;
- u_int16_t data;
-
- dp = *dpp;
- data = dp[0] + (dp[1] << 8);
- *dpp = dp + 2;
- return (data);
-}
-
-static u_int32_t
-asl_dump_dworddata(u_int8_t **dpp)
-{
- u_int8_t *dp;
- u_int32_t data;
-
- dp = *dpp;
- data = dp[0] + (dp[1] << 8) + (dp[2] << 16) + (dp[3] << 24);
- *dpp = dp + 4;
- return (data);
-}
-
-static u_int8_t *
-asl_dump_namestring(u_int8_t **dpp)
-{
- u_int8_t *dp;
- u_int8_t *name;
-
- dp = *dpp;
- name = dp;
- if (dp[0] == '\\')
- dp++;
- else if (dp[0] == '^')
- while (dp[0] == '^')
- dp++;
- if (dp[0] == 0x00) /* NullName */
- dp++;
- else if (dp[0] == 0x2e) /* DualNamePrefix */
- dp += 1 + 4 + 4;/* NameSeg, NameSeg */
- else if (dp[0] == 0x2f) { /* MultiNamePrefix */
- int segcount = dp[1];
- dp += 1 + 1 + segcount * 4; /* segcount * NameSeg */
- } else
- dp += 4; /* NameSeg */
-
- *dpp = dp;
- return (name);
-}
-
-static void
-print_namestring(u_int8_t *dp)
-{
-
- if (dp[0] == '\\') {
- putchar(dp[0]);
- dp++;
- } else if (dp[0] == '^') {
- while (dp[0] == '^') {
- putchar(dp[0]);
- dp++;
- }
- }
- if (dp[0] == 0x00) { /* NullName */
- /* printf("<null>"); */
- dp++;
- } else if (dp[0] == 0x2e) { /* DualNamePrefix */
- print_nameseg(dp + 1);
- putchar('.');
- print_nameseg(dp + 5);
- } else if (dp[0] == 0x2f) { /* MultiNamePrefix */
- int segcount = dp[1];
- int i;
- for (i = 0, dp += 2; i < segcount; i++, dp += 4) {
- if (i > 0)
- putchar('.');
- print_nameseg(dp);
- }
- } else /* NameSeg */
- print_nameseg(dp);
-}
-
-static void
-print_indent(int indent)
-{
- int i;
-
- for (i = 0; i < indent; i++)
- printf(" ");
-}
-
-#define ASL_ENTER_SCOPE(dp_orig, old_name) do { \
- u_int8_t *dp_copy; \
- u_int8_t *name; \
- old_name = asl_env.curname; \
- dp_copy = dp_orig; \
- name = asl_dump_namestring(&dp_copy); \
- asl_env.curname = aml_search_name(&asl_env, name); \
-} while(0)
-
-#define ASL_LEAVE_SCOPE(old_name) do { \
- asl_env.curname = old_name; \
-} while(0)
-
-#define ASL_CREATE_LOCALNAMEOBJ(dp) do { \
- if(scope_within_method){ \
- aml_create_name(&asl_env, dp); \
- } \
-}while(0);
-
-static void
-asl_dump_defscope(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int32_t pkglength;
- struct aml_name *oname;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
-
- printf("Scope(");
- ASL_ENTER_SCOPE(dp, oname);
- asl_dump_termobj(&dp, indent);
- printf(") {\n");
- end = start + pkglength;
- asl_dump_objectlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
- ASL_LEAVE_SCOPE(oname);
- *dpp = dp;
-}
-
-static void
-asl_dump_defbuffer(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int32_t pkglength;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
- printf("Buffer(");
- asl_dump_termobj(&dp, indent);
- printf(") {");
- while (dp < end) {
- printf("0x%x", *dp++);
- if (dp < end)
- printf(", ");
- }
- printf(" }");
-
- *dpp = dp;
-}
-
-static void
-asl_dump_defpackage(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int8_t numelements;
- u_int32_t pkglength;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- numelements = asl_dump_bytedata(&dp);
- end = start + pkglength;
- printf("Package(0x%x) {\n", numelements);
- while (dp < end) {
- print_indent(indent + 1);
- asl_dump_termobj(&dp, indent + 1);
- printf(",\n");
- }
-
- print_indent(indent);
- printf("}");
-
- dp = end;
-
- *dpp = dp;
-}
-
-int scope_within_method = 0;
-
-static void
-asl_dump_defmethod(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int8_t flags;
- u_int32_t pkglength;
- struct aml_name *oname;
- int swi;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
-
- swi = scope_within_method;
- scope_within_method = 0;
-
- printf("Method(");
- ASL_ENTER_SCOPE(dp, oname);
- asl_dump_termobj(&dp, indent);
- flags = *dp++;
- if (flags) {
- printf(", %d", flags & 7);
- if (flags & 8) {
- printf(", Serialized");
- }
- }
- printf(") {\n");
- end = start + pkglength;
- scope_within_method = 1;
- asl_dump_objectlist(&dp, end, indent + 1);
- scope_within_method = swi;
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
- ASL_LEAVE_SCOPE(oname);
- *dpp = dp;
-}
-
-
-static void
-asl_dump_defopregion(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- const char *regions[] = {
- "SystemMemory",
- "SystemIO",
- "PCI_Config",
- "EmbeddedControl",
- "SMBus",
- };
-
- dp = *dpp;
- printf("OperationRegion(");
- ASL_CREATE_LOCALNAMEOBJ(dp);
- asl_dump_termobj(&dp, indent); /* Name */
- printf(", %s, ", regions[*dp++]); /* Space */
- asl_dump_termobj(&dp, indent); /* Offset */
- printf(", ");
- asl_dump_termobj(&dp, indent); /* Length */
- printf(")");
-
- *dpp = dp;
-}
-
-static const char *accessnames[] = {
- "AnyAcc",
- "ByteAcc",
- "WordAcc",
- "DWordAcc",
- "BlockAcc",
- "SMBSendRecvAcc",
- "SMBQuickAcc"
-};
-
-static int
-asl_dump_field(u_int8_t **dpp, u_int32_t offset)
-{
- u_int8_t *dp;
- u_int8_t *name;
- u_int8_t access, attribute;
- u_int32_t width;
-
- dp = *dpp;
- switch (*dp) {
- case '\\':
- case '^':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case '.':
- case '/':
- ASL_CREATE_LOCALNAMEOBJ(dp);
- name = asl_dump_namestring(&dp);
- width = asl_dump_pkglength(&dp);
- offset += width;
- print_namestring(name);
- printf(",\t%d", width);
- break;
- case 0x00:
- dp++;
- width = asl_dump_pkglength(&dp);
- offset += width;
- if ((offset % 8) == 0) {
- printf("Offset(0x%x)", offset / 8);
- } else {
- printf(",\t%d", width);
- }
- break;
- case 0x01:
- access = dp[1];
- attribute = dp[2];
- dp += 3;
- printf("AccessAs(%s, %d)", accessnames[access], attribute);
- break;
- }
-
- *dpp = dp;
- return (offset);
-}
-
-static void
-asl_dump_fieldlist(u_int8_t **dpp, u_int8_t *end, int indent)
-{
- u_int8_t *dp;
- u_int32_t offset;
-
- dp = *dpp;
- offset = 0;
- while (dp < end) {
- print_indent(indent);
- offset = asl_dump_field(&dp, offset);
- if (dp < end)
- printf(",\n");
- else
- printf("\n");
- }
-
- *dpp = dp;
-}
-
-static void
-asl_dump_deffield(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int8_t flags;
- u_int32_t pkglength;
- static const char *lockrules[] = {"NoLock", "Lock"};
- static const char *updaterules[] = {"Preserve", "WriteAsOnes",
- "WriteAsZeros", "*Error*"};
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("Field(");
- asl_dump_termobj(&dp, indent); /* Name */
- flags = asl_dump_bytedata(&dp);
- printf(", %s, %s, %s) {\n",
- accessnames[flags & 0xf],
- lockrules[(flags >> 4) & 1],
- updaterules[(flags >> 5) & 3]);
- asl_dump_fieldlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- *dpp = dp;
-}
-
-static void
-asl_dump_defindexfield(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int8_t flags;
- u_int32_t pkglength;
- static const char *lockrules[] = {"NoLock", "Lock"};
- static const char *updaterules[] = {"Preserve", "WriteAsOnes",
- "WriteAsZeros", "*Error*"};
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("IndexField(");
- asl_dump_termobj(&dp, indent); /* Name1 */
- printf(", ");
- asl_dump_termobj(&dp, indent); /* Name2 */
- flags = asl_dump_bytedata(&dp);
- printf(", %s, %s, %s) {\n",
- accessnames[flags & 0xf],
- lockrules[(flags >> 4) & 1],
- updaterules[(flags >> 5) & 3]);
- asl_dump_fieldlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- *dpp = dp;
-}
-
-static void
-asl_dump_defbankfield(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int8_t flags;
- u_int32_t pkglength;
- static const char *lockrules[] = {"NoLock", "Lock"};
- static const char *updaterules[] = {"Preserve", "WriteAsOnes",
- "WriteAsZeros", "*Error*"};
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
- printf("BankField(");
- asl_dump_termobj(&dp, indent); /* Name1 */
- printf(", ");
- asl_dump_termobj(&dp, indent); /* Name2 */
- printf(", ");
- asl_dump_termobj(&dp, indent); /* BankValue */
- flags = asl_dump_bytedata(&dp);
- printf(", %s, %s, %s) {\n",
- accessnames[flags & 0xf],
- lockrules[(flags >> 4) & 1],
- updaterules[(flags >> 5) & 3]);
- asl_dump_fieldlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- *dpp = dp;
-}
-
-static void
-asl_dump_defdevice(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int32_t pkglength;
- struct aml_name *oname;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("Device(");
- ASL_ENTER_SCOPE(dp, oname);
- asl_dump_termobj(&dp, indent);
- printf(") {\n");
- asl_dump_objectlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- ASL_LEAVE_SCOPE(oname);
- *dpp = dp;
-}
-
-static void
-asl_dump_defprocessor(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int8_t procid;
- u_int8_t pblklen;
- u_int32_t pkglength;
- u_int32_t pblkaddr;
- struct aml_name *oname;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("Processor(");
- ASL_ENTER_SCOPE(dp, oname);
- asl_dump_termobj(&dp, indent);
- procid = asl_dump_bytedata(&dp);
- pblkaddr = asl_dump_dworddata(&dp);
- pblklen = asl_dump_bytedata(&dp);
- printf(", %d, 0x%x, 0x%x) {\n", procid, pblkaddr, pblklen);
- asl_dump_objectlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- ASL_LEAVE_SCOPE(oname);
- *dpp = dp;
-}
-
-static void
-asl_dump_defpowerres(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int8_t systemlevel;
- u_int16_t resourceorder;
- u_int32_t pkglength;
- struct aml_name *oname;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("PowerResource(");
- ASL_ENTER_SCOPE(dp, oname);
- asl_dump_termobj(&dp, indent);
- systemlevel = asl_dump_bytedata(&dp);
- resourceorder = asl_dump_worddata(&dp);
- printf(", %d, %d) {\n", systemlevel, resourceorder);
- asl_dump_objectlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- ASL_LEAVE_SCOPE(oname);
- *dpp = dp;
-}
-
-static void
-asl_dump_defthermalzone(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int32_t pkglength;
- struct aml_name *oname;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("ThermalZone(");
- ASL_ENTER_SCOPE(dp, oname);
- asl_dump_termobj(&dp, indent);
- printf(") {\n");
- asl_dump_objectlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- ASL_LEAVE_SCOPE(oname);
- *dpp = dp;
-}
-
-static void
-asl_dump_defif(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int32_t pkglength;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("If(");
- asl_dump_termobj(&dp, indent);
- printf(") {\n");
- asl_dump_objectlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- *dpp = dp;
-}
-
-static void
-asl_dump_defelse(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int32_t pkglength;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("Else {\n");
- asl_dump_objectlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- *dpp = dp;
-}
-
-static void
-asl_dump_defwhile(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *start;
- u_int8_t *end;
- u_int32_t pkglength;
-
- dp = *dpp;
- start = dp;
- pkglength = asl_dump_pkglength(&dp);
- end = start + pkglength;
-
- printf("While(");
- asl_dump_termobj(&dp, indent);
- printf(") {\n");
- asl_dump_objectlist(&dp, end, indent + 1);
- print_indent(indent);
- printf("}");
-
- assert(dp == end);
-
- *dpp = dp;
-}
-
-static void
-asl_dump_oparg(u_int8_t **dpp, int indent, const char *mnem,
- const char *fmt)
-{
- int idx;
- const char *pfx="";
-
- printf("%s(", mnem);
- for (idx=0; fmt[idx]; idx++) {
- if (fmt[idx] == 'N') {
- ASL_CREATE_LOCALNAMEOBJ(*dpp);
- }
- else if (fmt[idx] == 'o' && **dpp == 0x00) {
- /* Optional Argument */
- (*dpp)++;
- continue;
- }
-
- printf(pfx);
- if (fmt[idx] == 'b')
- printf("0x%x", asl_dump_bytedata(dpp));
- else if (fmt[idx] == 'w')
- printf("0x%x", asl_dump_worddata(dpp));
- else if (fmt[idx] == 'd')
- printf("0x%x", asl_dump_dworddata(dpp));
- else
- asl_dump_termobj(dpp, indent);
- pfx = ", ";
- }
- printf(")");
-}
-/*
- * Public interfaces
- */
-void
-asl_dump_termobj(u_int8_t **dpp, int indent)
-{
- u_int8_t *dp;
- u_int8_t *name;
- u_int8_t opcode;
- struct aml_name *method;
- const char *matchstr[] = {
- "MTR", "MEQ", "MLE", "MLT", "MGE", "MGT",
- };
-
-#define OPTARG() do { \
- if (*dp == 0x00) { \
- dp++; \
- } else { \
- printf(", "); \
- asl_dump_termobj(&dp, indent); \
- } \
-} while (0)
-
- dp = *dpp;
- opcode = *dp++;
- switch (opcode) {
- case '\\':
- case '^':
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
- case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N':
- case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U':
- case 'V': case 'W': case 'X': case 'Y': case 'Z':
- case '_':
- case '.':
- case '/':
- dp--;
- print_namestring((name = asl_dump_namestring(&dp)));
- if (scope_within_method == 1) {
- method = aml_search_name(&asl_env, name);
- if (method != NULL && method->property != NULL &&
- method->property->type == aml_t_method) {
- int i, argnum;
-
- argnum = method->property->meth.argnum & 7;
- printf("(");
- for (i = 0; i < argnum; i++) {
- asl_dump_termobj(&dp, indent);
- if (i < (argnum-1)) {
- printf(", ");
- }
- }
- printf(")");
- }
- }
- break;
- case 0x0a: /* BytePrefix */
- printf("0x%x", asl_dump_bytedata(&dp));
- break;
- case 0x0b: /* WordPrefix */
- printf("0x%04x", asl_dump_worddata(&dp));
- break;
- case 0x0c: /* DWordPrefix */
- printf("0x%08x", asl_dump_dworddata(&dp));
- break;
- case 0x0d: /* StringPrefix */
- printf("\"%s\"", (const char *) dp);
- while (*dp)
- dp++;
- dp++; /* NUL terminate */
- break;
- case 0x00: /* ZeroOp */
- printf("Zero");
- break;
- case 0x01: /* OneOp */
- printf("One");
- break;
- case 0xff: /* OnesOp */
- printf("Ones");
- break;
- case 0x06: /* AliasOp */
- asl_dump_oparg(&dp, indent, "Alias", "tN");
- break;
- case 0x08: /* NameOp */
- asl_dump_oparg(&dp, indent, "Name", "Nt");
- break;
- case 0x10: /* ScopeOp */
- asl_dump_defscope(&dp, indent);
- break;
- case 0x11: /* BufferOp */
- asl_dump_defbuffer(&dp, indent);
- break;
- case 0x12: /* PackageOp */
- asl_dump_defpackage(&dp, indent);
- break;
- case 0x14: /* MethodOp */
- asl_dump_defmethod(&dp, indent);
- break;
- case 0x5b: /* ExtOpPrefix */
- opcode = *dp++;
- switch (opcode) {
- case 0x01: /* MutexOp */
- printf("Mutex(");
- ASL_CREATE_LOCALNAMEOBJ(dp);
- asl_dump_termobj(&dp, indent);
- printf(", %d)", *dp++);
- break;
- case 0x02: /* EventOp */
- asl_dump_oparg(&dp, indent, "Event", "t");
- break;
- case 0x12: /* CondRefOfOp */
- asl_dump_oparg(&dp, indent, "CondRefOf", "tt");
- break;
- case 0x13: /* CreateFieldOp */
- asl_dump_oparg(&dp, indent, "CreateField", "tiiN");
- break;
- case 0x1F: /* LoadTableOp */
- asl_dump_oparg(&dp, indent, "LoadTable", "tttttt");
- break;
- case 0x20: /* LoadOp */
- asl_dump_oparg(&dp, indent, "Load", "tt");
- break;
- case 0x21: /* StallOp */
- asl_dump_oparg(&dp, indent, "Stall", "i");
- break;
- case 0x22: /* SleepOp */
- asl_dump_oparg(&dp, indent, "Sleep", "i");
- break;
- case 0x23: /* AcquireOp */
- asl_dump_oparg(&dp, indent, "Acquire", "tw");
- break;
- case 0x24: /* SignalOp */
- asl_dump_oparg(&dp, indent, "Signal", "t");
- break;
- case 0x25: /* WaitOp */
- asl_dump_oparg(&dp, indent, "Wait", "ti");
- break;
- case 0x26: /* ResetOp */
- asl_dump_oparg(&dp, indent, "Reset", "t");
- break;
- case 0x27: /* ReleaseOp */
- asl_dump_oparg(&dp, indent, "Release", "t");
- break;
- case 0x28: /* FromBCDOp */
- asl_dump_oparg(&dp, indent, "FromBCD", "io");
- break;
- case 0x29: /* ToBCDOp */
- asl_dump_oparg(&dp, indent, "ToBCD", "io");
- break;
- case 0x2a: /* UnloadOp */
- asl_dump_oparg(&dp, indent, "Unload", "t");
- break;
- case 0x30:
- printf("Revision");
- break;
- case 0x31:
- printf("Debug");
- break;
- case 0x32: /* FatalOp */
- asl_dump_oparg(&dp, indent, "Fatal", "bdi");
- break;
- case 0x33: /* TimerOp */
- printf("Timer");
- break;
- case 0x80: /* OpRegionOp */
- asl_dump_defopregion(&dp, indent);
- break;
- case 0x81: /* FieldOp */
- asl_dump_deffield(&dp, indent);
- break;
- case 0x82: /* DeviceOp */
- asl_dump_defdevice(&dp, indent);
- break;
- case 0x83: /* ProcessorOp */
- asl_dump_defprocessor(&dp, indent);
- break;
- case 0x84: /* PowerResOp */
- asl_dump_defpowerres(&dp, indent);
- break;
- case 0x85: /* ThermalZoneOp */
- asl_dump_defthermalzone(&dp, indent);
- break;
- case 0x86: /* IndexFieldOp */
- asl_dump_defindexfield(&dp, indent);
- break;
- case 0x87: /* BankFieldOp */
- asl_dump_defbankfield(&dp, indent);
- break;
- case 0x88: /* DataRegionOp */
- asl_dump_oparg(&dp, indent, "DataRegion", "Nttt");
- break;
- default:
- errx(1, "strange opcode 0x5b, 0x%x", opcode);
- }
- break;
- case 0x68:
- case 0x69:
- case 0x6a:
- case 0x6b:
- case 0x6c:
- case 0x6d:
- case 0x6e: /* ArgN */
- printf("Arg%d", opcode - 0x68);
- break;
- case 0x60:
- case 0x61:
- case 0x62:
- case 0x63:
- case 0x64:
- case 0x65:
- case 0x66:
- case 0x67:
- printf("Local%d", opcode - 0x60);
- break;
- case 0x70: /* StoreOp */
- asl_dump_oparg(&dp, indent, "Store", "tt");
- break;
- case 0x71: /* RefOfOp */
- asl_dump_oparg(&dp, indent, "RefOf", "t");
- break;
- case 0x72: /* AddOp */
- asl_dump_oparg(&dp, indent, "Add", "iio");
- break;
- case 0x73: /* ConcatenateOp */
- asl_dump_oparg(&dp, indent, "Concatenate", "ttt");
- break;
- case 0x74: /* SubtractOp */
- asl_dump_oparg(&dp, indent, "Subtract", "iio");
- break;
- case 0x75: /* IncrementOp */
- asl_dump_oparg(&dp, indent, "Increment", "t");
- break;
- case 0x76: /* DecrementOp */
- asl_dump_oparg(&dp, indent, "Decrement", "t");
- break;
- case 0x77: /* MultiplyOp */
- asl_dump_oparg(&dp, indent, "Multiply", "iio");
- break;
- case 0x78: /* DivideOp */
- asl_dump_oparg(&dp, indent, "Divide", "iioo");
- break;
- case 0x79: /* ShiftLeftOp */
- asl_dump_oparg(&dp, indent, "ShiftLeft", "iio");
- break;
- case 0x7a: /* ShiftRightOp */
- asl_dump_oparg(&dp, indent, "ShiftRight", "iio");
- break;
- case 0x7b: /* AndOp */
- asl_dump_oparg(&dp, indent, "And", "iio");
- break;
- case 0x7c: /* NAndOp */
- asl_dump_oparg(&dp, indent, "NAnd", "iio");
- break;
- case 0x7d: /* OrOp */
- asl_dump_oparg(&dp, indent, "Or", "iio");
- break;
- case 0x7e: /* NOrOp */
- asl_dump_oparg(&dp, indent, "NOr", "iio");
- break;
- case 0x7f: /* XOrOp */
- asl_dump_oparg(&dp, indent, "XOr", "iio");
- break;
- case 0x80: /* NotOp */
- asl_dump_oparg(&dp, indent, "Not", "io");
- break;
- case 0x81: /* FindSetLeftBitOp */
- asl_dump_oparg(&dp, indent, "FindSetLeftBit", "it");
- break;
- case 0x82: /* FindSetRightBitOp */
- asl_dump_oparg(&dp, indent, "FindSetRightBit", "it");
- break;
- case 0x83: /* DerefOp */
- asl_dump_oparg(&dp, indent, "DerefOf", "t");
- break;
- case 0x84: /* ConcatResTemplateOp */
- asl_dump_oparg(&dp, indent, "ConcatResTemplate", "ttt");
- break;
- case 0x85: /* ModOp */
- asl_dump_oparg(&dp, indent, "Mod", "iio");
- break;
- case 0x86: /* NotifyOp */
- asl_dump_oparg(&dp, indent, "Notify", "tt");
- break;
- case 0x87: /* SizeOfOp */
- asl_dump_oparg(&dp, indent, "SizeOf", "t");
- break;
- case 0x88: /* IndexOp */
- asl_dump_oparg(&dp, indent, "Index", "tio");
- break;
- case 0x89: /* MatchOp */
- printf("Match(");
- asl_dump_termobj(&dp, indent);
- printf(", %s, ", matchstr[*dp++]);
- asl_dump_termobj(&dp, indent);
- printf(", %s, ", matchstr[*dp++]);
- asl_dump_termobj(&dp, indent);
- printf(", ");
- asl_dump_termobj(&dp, indent);
- printf(")");
- break;
- case 0x8a: /* CreateDWordFieldOp */
- asl_dump_oparg(&dp, indent, "CreateDWordField", "tiN");
- break;
- case 0x8b: /* CreateWordFieldOp */
- asl_dump_oparg(&dp, indent, "CreateWordField", "tiN");
- break;
- case 0x8c: /* CreateByteFieldOp */
- asl_dump_oparg(&dp, indent, "CreateByteField", "tiN");
- break;
- case 0x8d: /* CreateBitFieldOp */
- asl_dump_oparg(&dp, indent, "CreateBitField", "tiN");
- break;
- case 0x8e: /* ObjectTypeOp */
- asl_dump_oparg(&dp, indent, "ObjectType", "t");
- break;
- case 0x8f: /* CreateQWordFieldOp */
- asl_dump_oparg(&dp, indent, "CreateQWordField", "tiN");
- break;
- case 0x90:
- asl_dump_oparg(&dp, indent, "LAnd", "ii");
- break;
- case 0x91:
- asl_dump_oparg(&dp, indent, "LOr", "ii");
- break;
- case 0x92:
- asl_dump_oparg(&dp, indent, "LNot", "i");
- break;
- case 0x93:
- asl_dump_oparg(&dp, indent, "LEqual", "tt");
- break;
- case 0x94:
- asl_dump_oparg(&dp, indent, "LGreater", "tt");
- break;
- case 0x95:
- asl_dump_oparg(&dp, indent, "LLess", "tt");
- break;
- case 0x96: /* ToBufferOp */
- asl_dump_oparg(&dp, indent, "ToBuffer", "to");
- break;
- case 0x97: /* ToDecStringOp */
- asl_dump_oparg(&dp, indent, "ToDecString", "to");
- break;
- case 0x98: /* ToHexStringOp */
- asl_dump_oparg(&dp, indent, "ToHexString", "to");
- break;
- case 0x99: /* ToIntegerOp */
- asl_dump_oparg(&dp, indent, "ToInteger", "to");
- break;
- case 0x9c: /* ToStringOp */
- asl_dump_oparg(&dp, indent, "ToString", "tto");
- break;
- case 0x9d: /* CopyObjectOp */
- asl_dump_oparg(&dp, indent, "CopyObject", "tt");
- break;
- case 0x9e: /* MidOp */
- asl_dump_oparg(&dp, indent, "Mid", "tiio");
- break;
- case 0x9f:
- printf("Continue");
- break;
- case 0xa0: /* IfOp */
- asl_dump_defif(&dp, indent);
- break;
- case 0xa1: /* ElseOp */
- asl_dump_defelse(&dp, indent);
- break;
- case 0xa2: /* WhileOp */
- asl_dump_defwhile(&dp, indent);
- break;
- case 0xa3: /* NoopOp */
- printf("Noop");
- break;
- case 0xa5: /* BreakOp */
- printf("Break");
- break;
- case 0xa4: /* ReturnOp */
- asl_dump_oparg(&dp, indent, "Return", "t");
- break;
- case 0xcc: /* BreakPointOp */
- printf("BreakPoint");
- break;
- default:
- errx(1, "strange opcode 0x%x", opcode);
- }
-
- *dpp = dp;
-}
-
-void
-asl_dump_objectlist(u_int8_t **dpp, u_int8_t *end, int indent)
-{
- u_int8_t *dp;
-
- dp = *dpp;
- while (dp < end) {
- print_indent(indent);
- asl_dump_termobj(&dp, indent);
- printf("\n");
- }
-
- *dpp = dp;
-}
+++ /dev/null
-/* $OpenBSD: debug.h,v 1.1 2005/06/02 20:09:39 tholo Exp $ */
-/*-
- * Copyright (c) 1999 Takanori Watanabe
- * Copyright (c) 1999, 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.
- *
- * $Id: debug.h,v 1.1 2005/06/02 20:09:39 tholo Exp $
- * $FreeBSD: src/usr.sbin/acpi/amldb/debug.h,v 1.1.1.1 2000/08/31 14:45:00 iwasaki Exp $
- */
-
-#ifndef _DEBUG_H_
-#define _DEBUG_H_
-
-void aml_dbgr(struct aml_environ *, struct aml_environ *);
-
-#endif /* !_DEBUG_H_ */