import acpidump(8) from ACPI For FreeBSD project.
Obtained from: ACPI For FreeBSD project
This commit is contained in:
parent
2e6c5fc592
commit
e1e9a4bf77
10
usr.sbin/acpi/acpidump/Makefile
Normal file
10
usr.sbin/acpi/acpidump/Makefile
Normal file
@ -0,0 +1,10 @@
|
||||
# $Id: Makefile,v 1.2 2000/07/14 18:16:29 iwasaki Exp $
|
||||
# $FreeBSD$
|
||||
|
||||
PROG= acpidump
|
||||
SRCS= acpi.c acpi_user.c asl_dump.c aml_dump.c acpidump.c
|
||||
NOMAN= yes
|
||||
#MAN8= acpidump.8
|
||||
#DEBUG_FLAGS= -g
|
||||
|
||||
.include <bsd.prog.mk>
|
258
usr.sbin/acpi/acpidump/acpi.c
Normal file
258
usr.sbin/acpi/acpidump/acpi.c
Normal file
@ -0,0 +1,258 @@
|
||||
/*-
|
||||
* 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.4 2000/08/09 14:47:52 iwasaki Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/acpi.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <err.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "acpidump.h"
|
||||
|
||||
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;
|
||||
asl_dump_objectlist(&dp, end, 0);
|
||||
assert(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\n");
|
||||
acpi_handle_dsdt(dsdp);
|
||||
aml_dump(dsdp->body, dsdp->len - SIZEOF_SDT_HDR);
|
||||
}
|
||||
|
||||
/*
|
||||
* Public interfaces
|
||||
*/
|
||||
|
||||
void
|
||||
acpi_print_sdt(struct ACPIsdt *sdp)
|
||||
{
|
||||
|
||||
acpi_print_string(sdp->signature, 4);
|
||||
printf(": Lenth=%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);
|
||||
}
|
||||
|
||||
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("\tEntries={ ");
|
||||
for (i = 0; i < entries; i++) {
|
||||
if (i > 0)
|
||||
printf(", ");
|
||||
printf("0x%08x", rsdp->body[i]);
|
||||
}
|
||||
printf(" }\n");
|
||||
}
|
||||
|
||||
void
|
||||
acpi_print_facp(struct FACPbody *facp)
|
||||
{
|
||||
char sep;
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
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("RSD PTR: Checksum=%d, OEMID=", rp->sum);
|
||||
acpi_print_string(rp->oem, 6);
|
||||
printf(", RsdtAddress=0x%08x\n", rp->addr);
|
||||
}
|
||||
|
||||
void
|
||||
acpi_handle_rsdt(struct ACPIsdt *rsdp)
|
||||
{
|
||||
int i;
|
||||
int entries;
|
||||
struct ACPIsdt *sdp;
|
||||
|
||||
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\n", i);
|
||||
if (!memcmp(sdp->signature, "FACP", 4)) {
|
||||
acpi_handle_facp((struct FACPbody *) sdp->body);
|
||||
} else {
|
||||
acpi_print_sdt(sdp);
|
||||
}
|
||||
}
|
||||
}
|
165
usr.sbin/acpi/acpidump/acpi_user.c
Normal file
165
usr.sbin/acpi/acpidump/acpi_user.c
Normal file
@ -0,0 +1,165 @@
|
||||
/*-
|
||||
* 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.5 2000/08/09 14:47:52 iwasaki Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/acpi.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "acpidump.h"
|
||||
|
||||
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 ((intptr_t) map->va == -1)
|
||||
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) {
|
||||
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\n", dumpfile);
|
||||
}
|
||||
|
||||
LIST_INIT(&maplist);
|
||||
|
||||
if (fstat(acpi_mem_fd, &sb) == -1) {
|
||||
errx(1, "fstat %s\n", dumpfile);
|
||||
}
|
||||
|
||||
dp = mmap(0, sb.st_size, PROT_READ, MAP_PRIVATE, acpi_mem_fd, 0);
|
||||
if (dp == NULL) {
|
||||
errx(1, "mmap %s\n", dumpfile);
|
||||
}
|
||||
|
||||
/*
|
||||
* Microsoft asl.exe generates 0x23 byte additional info.
|
||||
* at the begining of the file, so just ignore it.
|
||||
*/
|
||||
if (strncmp(dp, "DSDT", 4) == 0) {
|
||||
dp += 0x23;
|
||||
sb.st_size -= 0x23;
|
||||
}
|
||||
|
||||
end = (u_int8_t *) dp + sb.st_size;
|
||||
*dpp = dp;
|
||||
*endp = end;
|
||||
}
|
103
usr.sbin/acpi/acpidump/acpidump.c
Normal file
103
usr.sbin/acpi/acpidump/acpidump.c
Normal file
@ -0,0 +1,103 @@
|
||||
/*-
|
||||
* 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.c,v 1.3 2000/08/08 14:12:21 iwasaki Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/acpi.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "acpidump.h"
|
||||
|
||||
static void
|
||||
asl_dump_from_file(char *file)
|
||||
{
|
||||
u_int8_t *dp;
|
||||
u_int8_t *end;
|
||||
|
||||
acpi_load_dsdt(file, &dp, &end);
|
||||
asl_dump_objectlist(&dp, end, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
asl_dump_from_devmem()
|
||||
{
|
||||
struct ACPIrsdp *rp;
|
||||
struct ACPIsdt *rsdp;
|
||||
|
||||
rp = acpi_find_rsd_ptr();
|
||||
if (!rp)
|
||||
errx(1, "Can't find ACPI information\n");
|
||||
|
||||
acpi_print_rsd_ptr(rp);
|
||||
rsdp = (struct ACPIsdt *) acpi_map_sdt(rp->addr);
|
||||
if (memcmp(rsdp->signature, "RSDT", 4) ||
|
||||
acpi_checksum(rsdp, rsdp->len))
|
||||
errx(1, "RSDT is corrupted\n");
|
||||
|
||||
acpi_handle_rsdt(rsdp);
|
||||
}
|
||||
|
||||
static void
|
||||
usage(const char *progname)
|
||||
{
|
||||
|
||||
printf("usage:\t%s [-o dsdt_file_for_output]\n", progname);
|
||||
printf("or\t%s [-f dsdt_file_for_input]\n", progname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
char c, *progname;
|
||||
|
||||
progname = argv[0];
|
||||
while ((c = getopt(argc, argv, "f:o:h")) != -1) {
|
||||
switch (c) {
|
||||
case 'f':
|
||||
asl_dump_from_file(optarg);
|
||||
return (0);
|
||||
case 'o':
|
||||
aml_dumpfile = optarg;
|
||||
break;
|
||||
case 'h':
|
||||
usage(progname);
|
||||
break;
|
||||
default:
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
}
|
||||
}
|
||||
|
||||
asl_dump_from_devmem();
|
||||
return (0);
|
||||
}
|
44
usr.sbin/acpi/acpidump/acpidump.h
Normal file
44
usr.sbin/acpi/acpidump/acpidump.h
Normal file
@ -0,0 +1,44 @@
|
||||
/*-
|
||||
* 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 2000/08/09 14:47:52 iwasaki Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _ACPIDUMP_H_
|
||||
#define _ACPIDUMP_H_
|
||||
|
||||
void asl_dump_termobj(u_int8_t **, int);
|
||||
void asl_dump_objectlist(u_int8_t **, u_int8_t *, int);
|
||||
|
||||
void aml_dump(u_int32_t *, int);
|
||||
|
||||
void acpi_handle_rsdt(struct ACPIsdt *);
|
||||
void acpi_load_dsdt(char *, u_int8_t **, u_int8_t **);
|
||||
|
||||
extern char *aml_dumpfile;
|
||||
|
||||
#endif /* !_ACPIDUMP_H_ */
|
59
usr.sbin/acpi/acpidump/aml_dump.c
Normal file
59
usr.sbin/acpi/acpidump/aml_dump.c
Normal file
@ -0,0 +1,59 @@
|
||||
/*-
|
||||
* 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.3 2000/08/08 14:12:21 iwasaki Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/acpi.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "acpidump.h"
|
||||
|
||||
char *aml_dumpfile = NULL;
|
||||
|
||||
void
|
||||
aml_dump(u_int32_t *ptr, int len)
|
||||
{
|
||||
int fd;
|
||||
mode_t mode;
|
||||
|
||||
if (aml_dumpfile == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
mode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
||||
fd = open(aml_dumpfile, O_WRONLY | O_CREAT, mode);
|
||||
if (fd == -1) {
|
||||
return;
|
||||
}
|
||||
write(fd, ptr, len);
|
||||
close(fd);
|
||||
}
|
1209
usr.sbin/acpi/acpidump/asl_dump.c
Normal file
1209
usr.sbin/acpi/acpidump/asl_dump.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user