From owner-acpi-jp@jp.freebsd.org  Sun Aug  6 23:11:05 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id XAA67901;
	Sun, 6 Aug 2000 23:11:05 +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 XAA67894
	for <acpi-jp@jp.freebsd.org>; Sun, 6 Aug 2000 23:11:02 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from localhost (iwasaki.imasy.or.jp [202.227.24.92])
	by tasogare.imasy.or.jp (8.10.1+3.3W/3.7W-tasogare/smtpfeed 1.07) with ESMTP id e76EAup34214
	for <acpi-jp@jp.freebsd.org>; Sun, 6 Aug 2000 23:10:57 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
To: acpi-jp@jp.freebsd.org
In-Reply-To: <20000805175555M.iwasaki@jp.FreeBSD.org>
References: <20000805175555M.iwasaki@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: <20000806231053A.iwasaki@jp.FreeBSD.org>
Date: Sun, 06 Aug 2000 23:10:53 +0900
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 20000228(IM140)
Lines: 273
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: acpi-jp 533
Subject: [acpi-jp 533] Re: New API: aml_apply_foreach_found_objects()
Errors-To: owner-acpi-jp@jp.freebsd.org
Sender: owner-acpi-jp@jp.freebsd.org
X-Originator: iwasaki@jp.freebsd.org

> ACPI $B$K$h$k(B PnP $B$J(B device enumeration $B$K$b$-$C$HLrN)$D$H;W$$!"(B
> Namespace $B$rA`:n$9$k?7$7$$(B API $B$rDI2C<BAu$7$^$7$?!#$D$$$G$K(B amldb $B$b(B

$B$3$$$D$r;H$&=hM}$NNc$H$7$F8D!9$N%P%C%F%j$N>uBV$r<hF@$9$k=hM}$r=q$$$F$_$^$7$?!#(B
$BEEOCD"(B 11.2 $B$"$?$j$r;2>H$7$F(B _BIF (battery information), _BST 
(battery status), _PSR (power source r?) $B$r(B eval $B$7$FFI$_=P$7$?CM$r(B
$B2r<a$7$F$_$k$H!"$=$l$J$j$KF0:n$7$F$$$k$h$&$G$9$N$G!"%Q%C%A$r$D$1$F$*$-$^$9(B 
($B$A$g$C$H$7$?(B fix $B$b$"$j$^$9(B)$B!#(B
$B$H$j$"$($:%F%9%HE*$K(B _WAK $B$N8F$S=P$7$K$D$$$G$K$d$C$F$$$^$9$,!"@5<0$J(B
$B<BAu$O$I$&$7$^$7$g$&(B?
# acpifs $B$_$?$$$K(B Namespace $B$r(B file system $BE*$K8+$;$i$l$l$P(B
# $B3Z$7$$$H$O;W$&$s$G$9$,!"$@$l$+D)@o$7$^$;$s(B?

$B0J2<!"(Bdmesg $B=PNO(B ($B4JC1$J2r@b$D$-(B) $B$G$9!#(B

[\\_WAK. START]
Return(0x0)
[\\_WAK. END]
_WAK  Method: Arg 1 From 0xc7a7048d To 0xc7a70490
[\\_SB_.BAT1._BIF. START]
Name(BUF_, Package() {
})
Store(0x1, LBNO)[write(1, 0x2, 0x1d4)][write(1, 0x1, 0x1d5)][write(1, 0x2, 0x1d4)][read(1, 0x1d5)->0x1]
Store(BPU_[read(0, 0xcb000)->0x1], Index(BUF_, 0x0, Zero))
Store(BDC_[read(0, 0xcb004)->0x445], Index(BUF_, 0x1, Zero))
Store(BFC_[read(0, 0xcb008)->0x445], Index(BUF_, 0x2, Zero))
Store(BTC_[read(0, 0xcb00c)->0x1], Index(BUF_, 0x3, Zero))
Store(BDV_[read(0, 0xcb010)->0x1c20], Index(BUF_, 0x4, Zero))
Store(BCW_[read(0, 0xcb014)->0xad], Index(BUF_, 0x5, Zero))
Store(BCL_[read(0, 0xcb018)->0x3a], Index(BUF_, 0x6, Zero))
Store(BCG1[read(0, 0xcb01c)->0x1], Index(BUF_, 0x7, Zero))
Store(BCG2[read(0, 0xcb020)->0x1], Index(BUF_, 0x8, Zero))
Store("NP-1023 ", Index(BUF_, 0x9, Zero))
Store("Camcorder Battery ", Index(BUF_, 0xa, Zero))
Store("Li-ion ", Index(BUF_, 0xb, Zero))
Store("RIOS ", Index(BUF_, 0xc, Zero))
Return(BUF_)
[\\_SB_.BAT1._BIF. END]
XXX: _BIF $B$NLa$jCM!#(B
Package:elements 13 
        Num:0x1		Power Unit (mW or mA)
        Num:0x445	Design Capa.
        Num:0x445	Last Full Charge Capa.
        Num:0x1		Battery Technology (Primary or Secondary)
        Num:0x1c20	Design Voltage (mV)
        Num:0xad	Design capa. of Warning
        Num:0x3a	Design capa. of Low
        Num:0x1		Battery capa. granularity 1 (mAh or mWh)
        Num:0x1		Battery capa. granularity 2 (mAh or mWh)
        String:NP-1023 
        String:Camcorder Battery 
        String:Li-ion 
        String:RIOS 
[\\_SB_.BAT0._BIF. START]
Name(BUF_, Package() {
})
Store(0x0, LBNO)[write(1, 0x2, 0x1d4)][write(1, 0x0, 0x1d5)][write(1, 0x2, 0x1d4)][read(1, 0x1d5)->0x0]
Store(BPU_[read(0, 0xcb000)->0x1], Index(BUF_, 0x0, Zero))
Store(BDC_[read(0, 0xcb004)->0x445], Index(BUF_, 0x1, Zero))
Store(BFC_[read(0, 0xcb008)->0x445], Index(BUF_, 0x2, Zero))
Store(BTC_[read(0, 0xcb00c)->0x1], Index(BUF_, 0x3, Zero))
Store(BDV_[read(0, 0xcb010)->0x1c20], Index(BUF_, 0x4, Zero))
Store(BCW_[read(0, 0xcb014)->0xad], Index(BUF_, 0x5, Zero))
Store(BCL_[read(0, 0xcb018)->0x3a], Index(BUF_, 0x6, Zero))
Store(BCG1[read(0, 0xcb01c)->0x1], Index(BUF_, 0x7, Zero))
Store(BCG2[read(0, 0xcb020)->0x1], Index(BUF_, 0x8, Zero))
Store("NP-1023 ", Index(BUF_, 0x9, Zero))
Store("Camcorder Battery ", Index(BUF_, 0xa, Zero))
Store("Li-ion ", Index(BUF_, 0xb, Zero))
Store("RIOS ", Index(BUF_, 0xc, Zero))
Return(BUF_)
[\\_SB_.BAT0._BIF. END]
Package:elements 13 
        Num:0x1
        Num:0x445
        Num:0x445
        Num:0x1
        Num:0x1c20
        Num:0xad
        Num:0x3a
        Num:0x1
        Num:0x1
        String:NP-1023 
        String:Camcorder Battery 
        String:Li-ion 
        String:RIOS 
[\\_SB_.BAT1._BST. START]
Name(BUF_, Package() {
})
Store(0x1, LBNO)[write(1, 0x2, 0x1d4)][write(1, 0x1, 0x1d5)][write(1, 0x2, 0x1d4)][read(1, 0x1d5)->0x1]
Store(BST_[read(0, 0xcb034)->0x1], Index(BUF_, 0x0, Zero))
Store(BPR_[read(0, 0xcb038)->0x1d0], Index(BUF_, 0x1, Zero))
Store(BRC_[read(0, 0xcb03c)->0x42e], Index(BUF_, 0x2, Zero))
Store(BPV_[read(0, 0xcb040)->0x1ec0], Index(BUF_, 0x3, Zero))
Return(BUF_)
[\\_SB_.BAT1._BST. END]
XXX _BST $B$NLa$jCM!#(B
Package:elements 4 
        Num:0x1		Battery State (Bit0 discharging, Bit1 charging...)
        Num:0x1d0	Battery Present Rate
        Num:0x42e	Battery Remaining Capa.
        Num:0x1ec0	Battery Present Voltage (mV)
[\\_SB_.BAT0._BST. START]
Name(BUF_, Package() {
})
Store(0x0, LBNO)[write(1, 0x2, 0x1d4)][write(1, 0x0, 0x1d5)][write(1, 0x2, 0x1d4)][read(1, 0x1d5)->0x0]
Store(BST_[read(0, 0xcb034)->0x1], Index(BUF_, 0x0, Zero))
Store(BPR_[read(0, 0xcb038)->0x2a0], Index(BUF_, 0x1, Zero))
Store(BRC_[read(0, 0xcb03c)->0x439], Index(BUF_, 0x2, Zero))
Store(BPV_[read(0, 0xcb040)->0x1ef0], Index(BUF_, 0x3, Zero))
Return(BUF_)
[\\_SB_.BAT0._BST. END]
Package:elements 4 
        Num:0x1
        Num:0x2a0
        Num:0x439
        Num:0x1ef0
[\\_SB_.AC__._PSR. START]
Store(BPST[write(1, 0x0, 0x1d4)][read(1, 0x1d5)->0x3], Local0)[Copy number 0x3]
And(Local0, 0x80, Local1)[Copy number 0x0]
If(Local1)Else {
    Return(0x0)
}
[\\_SB_.AC__._PSR. END]
XXX _PSR $B$NLa$jCM!#(B
Num:0x0		Off-line or On-line


Index: acpi.c
===================================================================
RCS file: /home/cvs/ACPI/sys/dev/acpi/acpi.c,v
retrieving revision 1.22
diff -u -r1.22 acpi.c
--- acpi.c	2000/08/05 18:47:48	1.22
+++ acpi.c	2000/08/06 12:26:11
@@ -1273,4 +1273,12 @@
 	aml_local_stack_push(aml_local_stack_create());
 	retval = aml_invoke_method_by_name("_WAK", 1, argv);
 	aml_local_stack_delete(aml_local_stack_pop());
+	aml_apply_foreach_found_objects(aml_get_rootname(), "_PS0",
+	    aml_eval_name_simple);
+	aml_apply_foreach_found_objects(aml_get_rootname(), "_BIF",
+	    aml_eval_name_simple);
+	aml_apply_foreach_found_objects(aml_get_rootname(), "_BST",
+	    aml_eval_name_simple);
+	aml_apply_foreach_found_objects(aml_get_rootname(), "_PSR",
+	    aml_eval_name_simple);
 }
Index: aml/aml_evalobj.c
===================================================================
RCS file: /home/cvs/ACPI/sys/dev/acpi/aml/aml_evalobj.c,v
retrieving revision 1.23
diff -u -r1.23 aml_evalobj.c
--- aml/aml_evalobj.c	2000/08/05 12:29:16	1.23
+++ aml/aml_evalobj.c	2000/08/06 12:50:33
@@ -100,12 +100,13 @@
 			env->tempobject.regfield.bitoffset = field->bitoffset;
 			env->tempobject.regfield.bitlen = field->bitlen;
 		} else {
-			AML_PRINTF("[read(From%d, 0x%x)]",
-			    or->space, or->offset + field->bitoffset / 8);
 			env->tempobject.type = aml_t_num;
 			env->tempobject.num.number = aml_region_read(env,
 			    or->space, field->flags, or->offset,
 			    field->bitoffset, field->bitlen);
+			AML_PRINTF("[read(%d, 0x%x)->0x%x]",
+			    or->space, or->offset + field->bitoffset / 8,
+			    env->tempobject.num.number);
 		}
 	} else if (field->f.ftype == f_t_index) {
 		wname = aml_search_name(env, field->f.ifld.indexname);
@@ -231,16 +232,18 @@
 		copy->end = aname->property->meth.to;
 		copy->stat = aml_stat_none;
 		stack = aml_local_stack_create();
-		AML_PRINTF("(");
-		for (i = 0; i < argnum; i++) {
-			aml_local_stack_getArgX(stack, i)->property =
-			    aml_copy_object(env,
-				aml_eval_name(env,
-				    aml_parse_termobj(env, 0)));
-			if (i < argnum - 1)
-				AML_PRINTF(", ");
+		if (argnum > 0) {
+			AML_PRINTF("(");
+			for (i = 0; i < argnum; i++) {
+				aml_local_stack_getArgX(stack, i)->property =
+				    aml_copy_object(env,
+					aml_eval_name(env,
+					    aml_parse_termobj(env, 0)));
+				if (i < argnum - 1)
+					AML_PRINTF(", ");
+			}
+			AML_PRINTF(")\n");
 		}
-		AML_PRINTF(")\n");
 		aml_local_stack_push(stack);
 		if (env->stat == aml_stat_step) {
 			AML_DEBUGGER(env, copy);
@@ -293,6 +296,35 @@
 out:
 	memman_free(aml_memman, memid_aml_environ, copy);
 	return (ret);
+}
+
+/*
+ * Eval named object but env variable is not required and return
+ * status of evaluation.  This function is assumed to be called by
+ * aml_apply_foreach_found_objects().
+ * Note that no arguments are passed if object is a method.
+ */
+int
+aml_eval_name_simple(struct aml_name *name)
+{
+	struct	aml_environ *env;
+
+	if (name == NULL || name->property == NULL) {
+		return (1);
+	}
+
+	env = memman_alloc(aml_memman, memid_aml_environ);
+	if (env == NULL) {
+		return (1);
+	}
+	bzero(env, sizeof(struct aml_environ));
+
+	aml_local_stack_push(aml_local_stack_create());
+	aml_eval_name(env, name);
+	aml_local_stack_delete(aml_local_stack_pop());
+
+	memman_free(aml_memman, memid_aml_environ, env);
+	return (0);
 }
 
 int
Index: aml/aml_evalobj.h
===================================================================
RCS file: /home/cvs/ACPI/sys/dev/acpi/aml/aml_evalobj.h,v
retrieving revision 1.8
diff -u -r1.8 aml_evalobj.h
--- aml/aml_evalobj.h	2000/06/15 14:34:52	1.8
+++ aml/aml_evalobj.h	2000/08/06 12:33:15
@@ -33,6 +33,7 @@
 					 union aml_object *);
 union aml_object	*aml_eval_name(struct aml_environ *,
 				       struct aml_name *);
+int			 aml_eval_name_simple(struct aml_name *);
 int			 aml_objtonum(struct aml_environ *,
 				      union aml_object *);
 struct aml_name		*aml_execute_method(struct aml_environ *);
Index: aml/aml_store.c
===================================================================
RCS file: /home/cvs/ACPI/sys/dev/acpi/aml/aml_store.c,v
retrieving revision 1.20
diff -u -r1.20 aml_store.c
--- aml/aml_store.c	2000/08/03 16:00:04	1.20
+++ aml/aml_store.c	2000/08/06 10:07:28
@@ -74,12 +74,12 @@
 		or = &wname->property->opregion;
 		switch (obj->type) {
 		case aml_t_num:
-			AML_PRINTF("[write(From%d, 0x%x, 0x%x)]",
-			    or->space, obj->num.number,
-			    or->offset + field->bitoffset / 8);
 			aml_region_write(env, or->space, field->flags,
 			    obj->num.number, or->offset,
 			    field->bitoffset, field->bitlen);
+			AML_PRINTF("[write(%d, 0x%x, 0x%x)]",
+			    or->space, obj->num.number,
+			    or->offset + field->bitoffset / 8);
 			break;
 		case aml_t_buffer:
 		case aml_t_bufferfield:
