From owner-acpi-jp@jp.freebsd.org  Sat Jun 17 19:43:02 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id TAA22379;
	Sat, 17 Jun 2000 19:43:02 +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 TAA22374
	for <acpi-jp@jp.freebsd.org>; Sat, 17 Jun 2000 19:43:01 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from localhost (isdn22.imasy.or.jp [202.227.24.214])
	by tasogare.imasy.or.jp (8.10.1+3.3W/3.7W-tasogare/smtpfeed 1.07) with ESMTP id e5HAgx206715
	for <acpi-jp@jp.freebsd.org>; Sat, 17 Jun 2000 19:43:00 +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: <20000617194259W.iwasaki@jp.FreeBSD.org>
Date: Sat, 17 Jun 2000 19:42:59 +0900
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 20000228(IM140)
Lines: 85
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: acpi-jp 411
Subject: [acpi-jp 411] driver update
Errors-To: owner-acpi-jp@jp.freebsd.org
Sender: owner-acpi-jp@jp.freebsd.org
X-Originator: iwasaki@jp.freebsd.org

kernel $B$G(B namespace $B9=C[$G$-$?$N$G!"$A$g$C$H$E$D(B driver $BB&$b(B
$B$=$l$rMxMQ$9$k%3!<%I$r=q$$$F$$$-$?$$$H;W$$$^$9!#(B
$B$^$:$O<j;O$a$K(B _Sx_ $B$NCM$r(B namespace $B$+$i<hF@$9$k=hM}$G$9!#(B
$B:#HU?<Lk$K(B commit $BM=Dj$G$9!#(B

Index: acpi.c
===================================================================
RCS file: /home/cvs/ACPI/sys/i386/acpi/acpi.c,v
retrieving revision 1.13
diff -u -r1.13 acpi.c
--- acpi.c	2000/06/15 15:43:44	1.13
+++ acpi.c	2000/06/17 10:21:00
@@ -55,6 +55,7 @@
 #include <i386/acpi/aml/aml_amlmem.h>
 #include <i386/acpi/aml/aml_common.h>
 #include <i386/acpi/aml/aml_env.h>
+#include <i386/acpi/aml/aml_evalobj.h>
 #include <i386/acpi/aml/aml_name.h>
 #include <i386/acpi/aml/aml_parse.h>
 #include <i386/acpi/aml/aml_memman.h>
@@ -271,11 +272,18 @@
 }
 
 static void
-acpi_handle_dsdt(struct ACPIsdt *dsdp)
+acpi_handle_dsdt(acpi_softc_t *sc)
 {
-	struct aml_environ	env;
-	struct aml_name_group	*newgrp;
+	char	namestr[5];
+	int	i;
+	struct	aml_name *sname;
+	union	aml_object *spkg;
+	struct	aml_name_group *newgrp;
+	struct	aml_environ env;
+	struct	acpi_system_state_package ssp;
+	struct	ACPIsdt *dsdp;
 
+	dsdp = sc->dsdt;
 	newgrp = aml_new_name_group((int)dsdp->body);
 
 	bzero(&env, sizeof(env));
@@ -289,6 +297,33 @@
 
 	aml_showtree(aml_get_rootname(), 0);
 
+	sc->system_state_initialized = 1;
+	for (i = 0; i < 6; i++) {
+		ssp.mode[i].slp_typ_a = ACPI_UNSUPPORTSLPTYP;
+		ssp.mode[i].slp_typ_b = ACPI_UNSUPPORTSLPTYP;
+		sprintf(namestr, "_S%d_", i);
+		sname = aml_find_from_namespace(aml_get_rootname(), namestr);
+		if (sname == NULL) {
+			continue;
+		}
+		spkg = aml_eval_name(&env, sname);
+		if (spkg == NULL || spkg->type != aml_t_package) {
+			continue;
+		}
+		if (spkg->package.elements < 2) {
+			continue;
+		}
+		if (spkg->package.objects[0] == NULL ||
+		    spkg->package.objects[0]->type != aml_t_num) {
+			continue;
+		}
+		ssp.mode[i].slp_typ_a = spkg->package.objects[0]->num.number;
+		ssp.mode[i].slp_typ_b = spkg->package.objects[1]->num.number;
+		ACPIPRINTF("%s : [%d, %d]\n", namestr,
+		    ssp.mode[i].slp_typ_a, ssp.mode[i].slp_typ_b);
+	}
+	sc->system_state_package = ssp;
+
 	while (name_group_list->id != AML_NAME_GROUP_ROOT)
 		aml_delete_name_group(name_group_list);
 	memman_statistics(aml_memman);
@@ -315,7 +350,7 @@
 	    acpi_sdt_checksum(dsdt) == 0) {
 		ACPIPRINTF("	DSDT found Size=%d bytes\n", dsdt->len);
 		sc->dsdt = dsdt;
-		acpi_handle_dsdt(dsdt);
+		acpi_handle_dsdt(sc);
 	}
 
 	facs = (struct FACS *) acpi_pmap_ptv(body->facs_ptr);
