From owner-acpi-jp@jp.freebsd.org  Fri Jun  2 23:13:44 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id XAA08049;
	Fri, 2 Jun 2000 23:13:44 +0900 (JST)
	(envelope-from owner-acpi-jp@jp.FreeBSD.org)
Received: from tasogare.imasy.or.jp (daemon@tasogare.imasy.or.jp [202.227.24.5])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id XAA08043
	for <acpi-jp@jp.freebsd.org>; Fri, 2 Jun 2000 23:13:43 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from localhost (isdnb31.imasy.or.jp [202.227.24.159])
	by tasogare.imasy.or.jp (8.10.1+3.3W/3.7W-tasogare/smtpfeed 1.04) with ESMTP id e52EDdP33487
	for <acpi-jp@jp.freebsd.org>; Fri, 2 Jun 2000 23:13:40 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
To: acpi-jp@jp.freebsd.org
X-Mailer: Mew version 1.94.1 on Emacs 19.34 / Mule 2.3 (SUETSUMUHANA)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Message-Id: <20000602231336M.iwasaki@jp.FreeBSD.org>
Date: Fri, 02 Jun 2000 23:13:36 +0900
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 20000228(IM140)
Lines: 422
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: acpi-jp 363
Subject: [acpi-jp 363] amldb synopsis and other userland tools
Errors-To: owner-acpi-jp@jp.freebsd.org
Sender: owner-acpi-jp@jp.freebsd.org
X-Originator: iwasaki@jp.freebsd.org

# $B$h$3$d$^$5$s!"=i;E;v$46lO+MM$G$7$?!#(B

amldb $B;EMM$H$=$NB>$N%D!<%k$N:#8e$N3+H/$K$D$$$F$G$9!#(B

amldb $B$r(B AML interpreter $B$N%G%P%C%0MQES$K8BDj$7$F%7%s%W%k$K$7$?$$$H(B
$B;W$C$F$$$^$9!#(B
FACP $BEy$NI=<($d(B /dev/mem $B$N%^%C%WEy$N5!G=$r4^$`(B acpi.c & acpi_user.c $B$O(B
amldb $B$K4^$a$:$KGQ;_$9$k$+!"(Busr.sbin/ $B$K(B DSDT/ASL $B%@%s%W%D!<%k$H$7$F(B 
$B2~$a$F@0M}$7$F:n$k$+$7$?$$$G$9!#(B
# acpiconf $B$K4^$a$F$7$^$&$N$b$$$$$+$b!#(B

$B$G!"(Bamldb $B$NF0:n$b!":#$^$G%G%P%C%0L\E*$G=P$7$F$$$?>pJs$b95$(L\$K$7$F(B
$BI,MW$,$"$l$P%*%W%7%g%s$GM-8z2=$9$k46$8$G$9!#0J2<!"$H$j$"$($:9M$($F$_$?(B
$B;EMM$H$=$N%Q%C%A$G$9!#(B

amldb [-d] [-s] [-t] [-h] dsdt_files...

 -d	$B=*N;;~$K(B region I/O simulator $B$NFbMF$N%@%s%W$r$*$3$J$&(B
 -s	$B=*N;;~$K%a%b%j4IM}%7%9%F%`$NE}7W>pJs$r=PNO(B
 -t	namespace $B$N%D%j!<=i4|>uBV$rI=<((B
 -h	$B%X%k%WI=<((B

Index: Makefile
===================================================================
RCS file: /home/cvs/ACPI/usr.sbin/acpi/amldb/Makefile,v
retrieving revision 1.1
diff -u -r1.1 Makefile
--- Makefile	2000/06/02 07:15:11	1.1
+++ Makefile	2000/06/02 13:12:20
@@ -1,7 +1,7 @@
 # $Id: Makefile,v 1.1 2000/06/02 07:15:11 yokoyama Exp $
 
 PROG=	amldb
-SRCS=	amldb.c debug.c region.c acpi.c acpi_user.c
+SRCS=	amldb.c debug.c region.c
 SRCS+=	aml_parse.c aml_name.c aml_amlmem.c aml_memman.c aml_store.c aml_obj.c aml_evalobj.c
 NOMAN=	yes
 DEBUG_FLAGS= -g  -Wall 
Index: amldb.c
===================================================================
RCS file: /home/cvs/ACPI/usr.sbin/acpi/amldb/amldb.c,v
retrieving revision 1.1
diff -u -r1.1 amldb.c
--- amldb.c	2000/06/02 07:15:11	1.1
+++ amldb.c	2000/06/02 13:11:08
@@ -25,69 +25,32 @@
  *
  *	$Id: amldb.c,v 1.1 2000/06/02 07:15:11 yokoyama Exp $
  */
-#include <sys/param.h>
-#include <stdio.h>
+
 #include <assert.h>
 #include <err.h>
-#include <machine/pc/acpi.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
 #include <fcntl.h>
-#include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
 #include <unistd.h>
 
-#include <i386/acpi/aml/aml_name.h>
 #include <i386/acpi/aml/aml_amlmem.h>
-#include <i386/acpi/aml/aml_status.h>
 #include <i386/acpi/aml/aml_env.h>
-#include <i386/acpi/aml/aml_obj.h>
-#include <i386/acpi/aml/aml_evalobj.h>
 #include <i386/acpi/aml/aml_parse.h>
-#include <i386/acpi/aml/aml_store.h>
 
 #include "debug.h"
 #include "region.h"
 
-static void     acpi_handle_facp(struct FACPbody * facp);
-static void     acpi_handle_dsdt(struct ACPIsdt * dsdp);
-static void acpi_handle_rsdt(struct ACPIsdt * rsdp);
-static void     acpi_init_namespace();
-void           *acpi_map_physical(vm_offset_t pa, size_t length);
-struct ACPIrsdp *acpi_find_rsd_ptr(void);
-int             acpi_checksum(void *p, size_t length);
-struct ACPIsdt *acpi_map_sdt(vm_offset_t pa);
-void            acpi_print_rsd_ptr(struct ACPIrsdp * rp);
-void            acpi_print_sdt(struct ACPIsdt * sdp);
-void            acpi_print_rsdt(struct ACPIsdt * rsdp);
-void            acpi_print_facp(struct FACPbody * facp);
-void            acpi_print_dsdt(struct ACPIsdt * dsdp);
+int	regdump_enabled = 0;
+int	memstat_enabled = 0;
+int	showtree_enabled = 0;
 
-int
-parse_dsdt()
-{
-	struct ACPIrsdp *rp = acpi_find_rsd_ptr();
-	struct ACPIsdt *rsdp;
-	
-	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);
-	return 0;
-}
-
-void
+static void
 acpi_init_namespace()
 {
-	struct aml_environ env;
-	struct aml_name *newname;
+	struct aml_environ	env;
+	struct aml_name		*newname;
 
 	new_aml_name_group(AML_NAME_GROUP_OS_DEFINED);
 	env.curname = get_rootname();
@@ -97,14 +60,16 @@
 	newname->property->str.string = "Microsoft Windows NT";
 }
 
-int
-load_dsdt(char *dsdtfile)
+static int
+load_dsdt(const char *dsdtfile)
 {
-	struct aml_environ env;
-	u_int8_t       *code;
-	struct stat     sb;
-	int             fd;
-	
+	struct aml_environ	env;
+	u_int8_t		*code;
+	struct stat		sb;
+	int			fd;
+
+	printf("Loading %s...", dsdtfile);
+
 	fd = open(dsdtfile, O_RDONLY, 0);
 	if (fd == -1) {
 		perror("open");
@@ -130,7 +95,7 @@
 	}
 	env.end = code + sb.st_size;
 	env.curname = get_rootname();
-	
+
 	aml_local_stack_push(aml_local_stack_create());
 	acpi_parse_objectlist(&env, 0);
 	aml_local_stack_delete(aml_local_stack_pop());
@@ -138,222 +103,78 @@
 	assert(env.dp == env.end);
 	env.dp = code;
 	env.end = code + sb.st_size;
+
+	printf("done\n");
 
-	showtree(env.curname, 0);
+	if (showtree_enabled == 1) {
+		showtree(env.curname, 0);
+	}
 
 	do {
 		acpi_dbgr(&env,&env);
 	} while (env.stat != aml_stat_panic);
-	acpi_simulation_regdump("region.dmp");
 
-	return 0;
-}
-
-#define ACPIDEV	"/dev/acpi"
-
-int
-acpi_enable()
-{
-	int fd = open(ACPIDEV, O_RDWR);
-	if (fd == -1)
-		err(1, NULL);
-	
-	if (ioctl(fd, ACPIIO_ENABLE, NULL) == -1)
-		err(1, NULL);
-	
-	close(fd);
-	
-	return 0;
-}
-
-int
-acpi_disable()
-{
-	int fd = open(ACPIDEV, O_RDWR);
-	if (fd == -1)
-		err(1, NULL);
-	
-	if (ioctl(fd, ACPIIO_DISABLE, NULL) == -1)
-		err(1, NULL);
-	
-	close(fd);
-	
-	return 0;
-}
-
-static void
-acpi_handle_dsdt(struct ACPIsdt * dsdp)
-{
-	struct aml_environ env;	
-	bzero(&env, sizeof(env));
-	acpi_print_dsdt(dsdp);
-
-	acpi_init_namespace();
-
-	new_aml_name_group((int)dsdp);
-
-	env.dp = (u_int8_t *) dsdp->body;
-	env.end = (u_int8_t *) dsdp + dsdp->len;
-	env.curname = get_rootname();
-
-	aml_local_stack_push(aml_local_stack_create());
-	acpi_parse_objectlist(&env, 0);
-	aml_local_stack_delete(aml_local_stack_pop());
+	if (regdump_enabled == 1) {
+		acpi_simulation_regdump("region.dmp");
+	}
 
-	assert(env.dp == env.end);
-	env.dp = (u_int8_t *) dsdp->body;
-	env.end = (u_int8_t *) dsdp + dsdp->len;
-	env.curname = get_rootname();
-	showtree(env.curname, 0);
-	memman_statistics(aml_memman);
-}
+	while (name_group_list->id != AML_NAME_GROUP_ROOT) {
+		delete_aml_name_group(name_group_list);
+	}
 
-static void
-acpi_handle_rsdt(struct ACPIsdt * rsdp)
-{
-	int             i, entries;
-	
-	acpi_print_rsdt(rsdp);
-	entries = (rsdp->len - SIZEOF_SDT_HDR) / sizeof(u_int32_t);
-	for (i = 0; i < entries; i++) {
-		struct ACPIsdt *sdp;
-		sdp = acpi_map_sdt((vm_offset_t)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_print_sdt(sdp);
-			acpi_handle_facp((struct FACPbody *) sdp->body);
-		} else {
-			acpi_print_sdt(sdp);
-		}
+	if (memstat_enabled == 1) {
+		memman_statistics(aml_memman);
 	}
-}
 
-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);
-}
+	memman_freeall(aml_memman);
 
-int
-acpi_setslpstatepkg()
-{
-	struct acpi_system_state_package ssp;
-	struct aml_name	*aname;
-	union aml_object *obj;
-	char	_sxstr[5];
-	int	i;
-	int fd = open(ACPIDEV, O_RDWR);
-	
-	if (fd == -1)
-		err(1, NULL);
-	
-	bzero(&ssp, sizeof(struct acpi_system_state_package));
-	for (i = 0; i < 6; i++) {
-		sprintf(_sxstr, "_S%d_", i);
-		if ((aname = search_aml_name(get_rootname(), _sxstr)) == NULL) {
-			goto unsupported;
-		}
-		
-		obj = aname->property;
-		if ((obj->type != aml_t_package) || (obj->package.elements < 2)) {
-			goto unsupported;
-		}
-		
-		if (obj->package.objects[0]->type != aml_t_num ||
-		    obj->package.objects[1]->type != aml_t_num) {
-			goto unsupported;
-		}
-		
-		
-		ssp.mode[i].slp_typ_a = obj->package.objects[0]->num.number;
-		ssp.mode[i].slp_typ_b = obj->package.objects[1]->num.number;
-		continue;
-	unsupported:
-		ssp.mode[i].slp_typ_a = ACPI_UNSUPPORTSLPTYP;
-		ssp.mode[i].slp_typ_b = ACPI_UNSUPPORTSLPTYP;
-		continue;
-	}
-	
-	if (ioctl(fd, ACPIIO_SETSLPSTATEPKG, &ssp) == -1)
-		err(1, NULL);
-	
-	close(fd);
-	
 	return 0;
 }
-
 
-int
-acpi_sleep(int sleep_type)
+static void
+usage(const char *progname)
 {
-	int fd = open(ACPIDEV, O_RDWR);
-	if (fd == -1)
-		err(1, NULL);
-	
-	if (ioctl(fd, ACPIIO_SETSLPSTATE, &sleep_type) == -1)
-		err(1, NULL);
-	
-	close(fd);
-	
-	return 0;
+	printf("usage: %s [-d] [-s] [-t] [-h] dsdt_files...\n", progname);
+	exit(1);
 }
 
 int
 main(int argc, char *argv[])
 {
-	char		c;
-	int		sleep_type = -1;
-	
-	if (argc == 1) {
-		parse_dsdt();
-		goto out;
-	}
-	
-	while ((c = getopt(argc, argv, "f:s:ed")) != -1) {
+	int	i;
+	char	c, *progname = argv[0];
+
+	while ((c = getopt(argc, argv, "dsth")) != -1) {
 		switch (c) {
-		case 'e':
-			return acpi_enable();
 		case 'd':
-			return acpi_disable();
+			regdump_enabled = 1;
+			break;
+
 		case 's':
-			sleep_type = *optarg - '0';
-			if (sleep_type < 0 || sleep_type > 5) {
-				fprintf(stderr, "%s: invalid sleep type (%d)\n",
-				    argv[0], sleep_type);
-				return -1;
-			}
-			
+			memstat_enabled = 1;
 			break;
-		case 'f':
-			load_dsdt(optarg);
-			sleep_type = -1;
+
+		case 't':
+			showtree_enabled = 1;
 			break;
+
+		case 'h':
 		default:
-			argc -= optind;
-			argv += optind;
+			usage(progname);
+			break;
 		}
 	}
+	argc -= optind;
+	argv += optind;
 
-	if (sleep_type != -1) {
-		parse_dsdt();
-#if 1
-		acpi_setslpstatepkg();
-#endif
-		acpi_sleep(sleep_type);
+	if (argc == 0) {
+		usage(progname);
 	}
 
-out:
-	while (name_group_list->id != AML_NAME_GROUP_ROOT)
-		delete_aml_name_group(name_group_list);
-	memman_statistics(aml_memman);
-	memman_freeall(aml_memman);
+	for (i = 0; i < argc; i++) {
+		load_dsdt(argv[i]);
+	}
 
 	return 0;
 }
+
