From owner-acpi-jp@jp.freebsd.org  Wed Sep  6 23:57:22 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id XAA12273;
	Wed, 6 Sep 2000 23:57:22 +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 XAA12268
	for <acpi-jp@jp.freebsd.org>; Wed, 6 Sep 2000 23:57:21 +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.2+3.3W/3.7W-tasogare/smtpfeed 1.07) with ESMTP id e86EvJr61224
	for <acpi-jp@jp.freebsd.org>; Wed, 6 Sep 2000 23:57:20 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
To: acpi-jp@jp.freebsd.org
In-Reply-To: <200009061331.WAA92063@shidahara1.planet.sci.kobe-u.ac.jp>
References: <20000906184742U.iwasaki@jp.FreeBSD.org>
	<200009061331.WAA92063@shidahara1.planet.sci.kobe-u.ac.jp>
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: <20000906235646Y.iwasaki@jp.FreeBSD.org>
Date: Wed, 06 Sep 2000 23:56:46 +0900
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 20000228(IM140)
Lines: 69
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: acpi-jp 620
Subject: [acpi-jp 620] Re: zzz and ACPI (was: Re: acpi_send_pm_event())
Errors-To: owner-acpi-jp@jp.freebsd.org
Sender: owner-acpi-jp@jp.freebsd.org
X-Originator: iwasaki@jp.freebsd.org

> > - $B=q$-9~$`A0$K(B field->f.ifld.dataname $B$r(B aml_eval_name() $B$7$FCM$r<hF@(B
> > - field->bitoffset $B$r$b$H$K(B mask $B$7$F=q$-9~$`CM$r7W;;(B
> > - $B2~$a$F(B indexname/dataname $B$N=g$K%"%/%;%9$7$FCM$r=q$-9~$`(B
> >$B$_$?$$$J$3$H$,I,MW$+$J$!$H;W$$$^$9$,!"C/$+%D%C%3%_$*4j$$$7$^$9(B (^^;
> 
> $B$&$K$e$&!#$=$&$G$9!#$A$J$_$K(Baml_eval_fieldobject$B$b!"F1$8%P%0$,$"$j$^$9!#(B
> $B!t2?$b9M$($:$K!"%P%C%U%!$K%"%/%;%9$7$?CM$=$N$b$N$rJV$7$F$k!#(B
> $B$H$$$&$+!"(BIndexField$B$KBP$9$k%F%9%H$O7k9=ITB-$7$F$?$H;W$$$^$9!#(B

$B$H$j$"$($:(B store $BB&$O$3$s$J46$8$GD>$7$^$7$?!#(BC $B$GKd$a9~$_(B method $B$r(B
$B=q$$$?$H$-$K(B takawata $B$5$s$,%"%I%P%$%9$7$F$/$l$?J}K!$G$9!#(B
$B$3$s$J46$8$G$$$+$,$G$7$g$&(B?

Index: aml_store.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpi/aml/aml_store.c,v
retrieving revision 1.1
diff -u -r1.1 aml_store.c
--- aml_store.c	2000/08/24 09:33:08	1.1
+++ aml_store.c	2000/09/06 14:39:32
@@ -55,13 +55,14 @@
     struct aml_name *name)
 {
 	char	*buffer;
-	struct	aml_name *wname, *oname;
+	struct	aml_name *wname, *oname, *iname;
 	struct	aml_field *field;
 	struct	aml_opregion *or;
-	union	aml_object tobj;
+	union	aml_object tobj, iobj, *tmpobj;
 
 	field = &name->property->field;
 	oname = env->curname;
+	iname = NULL;
 	env->curname = name->parent;
 	if (field->f.ftype == f_t_field) {
 		wname = aml_search_name(env, field->f.fld.regname);
@@ -113,13 +114,23 @@
 			break;
 		}
 	} else if (field->f.ftype == f_t_index) {
-		wname = aml_search_name(env, field->f.ifld.indexname);
-		tobj.type = aml_t_num;
-		tobj.num.number = field->bitoffset / 8;	/* AccessType Boundary */
-		aml_store_to_name(env, &tobj, wname);
+		iname = aml_search_name(env, field->f.ifld.indexname);
 		wname = aml_search_name(env, field->f.ifld.dataname);
+		iobj.type = aml_t_num;
+		iobj.num.number = field->bitoffset / 8;	/* AccessType Boundary */
+
+		/* read whole values of IndexField */
+		aml_store_to_name(env, &iobj, iname);
+		tmpobj = aml_eval_name(env, wname);
+
+		/* make the values to be written */
 		tobj.num = obj->num;
-		tobj.num.number = tobj.num.number << (field->bitoffset & 7);
+		tobj.num.number = tmpobj->num.number;
+		tobj.num.number &= (~((1 << field->bitlen) - 1) << (field->bitoffset & 7)) | (field->bitoffset & 7);
+		tobj.num.number |= (obj->num.number << (field->bitoffset & 7));
+
+		/* write the values to IndexField */
+		aml_store_to_name(env, &iobj, iname);
 		aml_store_to_name(env, &tobj, wname);
 	}
 	env->curname = oname;

# eval $BB&$O$I$J$?$+$*4j$$(B (^^;

