From owner-acpi-jp@jp.freebsd.org  Wed Jun 21 14:53:03 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id OAA60872;
	Wed, 21 Jun 2000 14:53:03 +0900 (JST)
	(envelope-from owner-acpi-jp@jp.FreeBSD.org)
Received: from dhcp122.conference.usenix.org (dhcp122.conference.usenix.org [209.179.127.122])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id OAA60867
	for <acpi-jp@jp.FreeBSD.org>; Wed, 21 Jun 2000 14:53:02 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from localhost (localhost [127.0.0.1])
	by dhcp122.conference.usenix.org (8.9.3/8.9.3) with ESMTP id OAA44063
	for <acpi-jp@jp.freebsd.org>; Wed, 21 Jun 2000 14:53:02 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
To: acpi-jp@jp.FreeBSD.org
In-Reply-To: <20000620131709A.yokoyama@o3.otc.ogis-ri.co.jp>
References: <20000619022342P.iwasaki@jp.FreeBSD.org>
	<20000620131709A.yokoyama@o3.otc.ogis-ri.co.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: <20000620225302C.iwasaki@jp.FreeBSD.org>
Date: Tue, 20 Jun 2000 22:53:02 -0700 (PDT)
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 20000228(IM140)
Lines: 165
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: acpi-jp 440
Subject: [acpi-jp 440] Re: new utility: acpidump
Errors-To: owner-acpi-jp@jp.freebsd.org
Sender: owner-acpi-jp@jp.freebsd.org
X-Originator: iwasaki@jp.freebsd.org

> ASL $B$NJ}$G(B dword integer $B$,@5$7$/$H$l$F$$$J$$$h$&$G$7$?$N$GD>$7$F$*$-$^$7$?!#(B

$B$"!"$I$b$G$9!#(B

$BOC$OJQ$j$^$9$,!"Ht9T5!$NCf$G$$$m$$$m$$$8$C$F$$$^$7$?!#(B
showobject() $B$G(B16$B?J$GI=<($9$k$H4r$7$$ItJ,!"(Bstore_to_buffer()
$B$G3JG<@h$N(B buffer $B$N(B offset $B$+$i8e$m$NI}$N%A%'%C%/!"(Bstore_to_object()
$B$N(B bufferfield $B$N(B buffer $B$N%"%I%l%9$rJQ$KA`:n$7$F$$$?$H$3$m!"(B
store_to_objref() $B$G3JG<@h$N(B package $B$NMWAG$,B8:_$7$J$$>l9g$N=hM}$N(B
$B2~A1(B ($BFC$K85$,(B buffer $B$N>l9g$KLdBj(B) $B$H$$$C$?46$8$G$9!#(B
$BC/$+$6$C$/$j8+$F$b$i$($P4r$7$$$G$9!#(B

# $B$H$3$m$G!"K\2H$N(B ML $B$G$+$J$jOC$,B3$$$F$$$^$9$,!"A4A3DI$($F$^$;$s(B (^^;
# $B$d$O$j6=L#$N$"$kJ}$,B?$+$C$?$s$G$9$M$'(B

Index: aml_common.c
===================================================================
RCS file: /home/cvs/ACPI/sys/i386/acpi/aml/aml_common.c,v
retrieving revision 1.4
diff -u -r1.4 aml_common.c
--- aml_common.c	2000/06/16 14:30:15	1.4
+++ aml_common.c	2000/06/21 05:00:22
@@ -150,7 +150,7 @@
 		printf("Num:0x%x\n", obj->num.number);
 		return;
 	case aml_t_processor:
-		printf("Processor:No %d,Port 0x%x length %d\n",
+		printf("Processor:No %d,Port 0x%x length 0x%x\n",
 		    obj->proc.id, obj->proc.addr, obj->proc.len);
 		return;
 	case aml_t_mutex:
@@ -161,12 +161,12 @@
 		    obj->pres.level, obj->pres.order);
 		return;
 	case aml_t_opregion:
-		printf("OprationRegion:Busspace%d, Offset 0x%x Length %d\n",
+		printf("OprationRegion:Busspace%d, Offset 0x%x Length 0x%x\n",
 		    obj->opregion.space, obj->opregion.offset,
 		    obj->opregion.length);
 		return;
 	case aml_t_field:
-		printf("Fieldelement:flag 0x%x offset %d len %d {",
+		printf("Fieldelement:flag 0x%x offset 0x%x len 0x%x {",
 		    obj->field.flags, obj->field.bitoffset,
 		    obj->field.bitlen);
 		switch (obj->field.f.ftype) {
@@ -182,7 +182,7 @@
 			aml_print_namestring(obj->field.f.bfld.regname);
 			printf(" ");
 			aml_print_namestring(obj->field.f.bfld.bankname);
-			printf("%d", obj->field.f.bfld.bankvalue);
+			printf("0x%x", obj->field.f.bfld.bankvalue);
 			break;
 		}
 		printf("}\n");
@@ -192,14 +192,14 @@
 		    obj->meth.from, obj->meth.to);
 		break;
 	case aml_t_buffer:
-		printf("Buffer: size:%d Data %p\n", obj->buffer.size,
+		printf("Buffer: size:0x%x Data %p\n", obj->buffer.size,
 		    obj->buffer.data);
 		break;
 	case aml_t_device:
 		printf("Device\n");
 		break;
 	case aml_t_bufferfield:
-		printf("Bufferfield:offset %d len %d Origin %p\n",
+		printf("Bufferfield:offset 0x%x len 0x%x Origin %p\n",
 		    obj->bfld.bitoffset, obj->bfld.bitlen, obj->bfld.origin);
 		break;
 	case aml_t_string:
@@ -233,7 +233,7 @@
 		} else {
 			printf("Object reference");
 			if (obj->objref.offset >= 0) {
-				printf(" (offset %d)", obj->objref.offset);
+				printf(" (offset 0x%x)", obj->objref.offset);
 			}
 		}
 		printf(" of ");
@@ -317,7 +317,7 @@
 	for (i = bytelen; i > 0; i--, addr++) {
 		val = *addr;
 
-		AML_PRINTF("\t[bufferfield:0x%02x@0x%p]", val, addr);
+		AML_PRINTF("\t[bufferfield:0x%02x@%p]", val, addr);
 
 		switch (io) {
 		case AML_BUFFER_INPUT:
@@ -345,7 +345,7 @@
 			if (offsetlow) {
 				readval = readval >> offsetlow;
 			}
-			AML_PRINTF("[read(bufferfield, 0x%p)&mask:0x%x]\n",
+			AML_PRINTF("[read(bufferfield, %p)&mask:0x%x]\n",
 			    addr, readval);
 			*valuep = readval;
 
@@ -366,7 +366,7 @@
 				value = value >> 8;
 			}
 
-			AML_PRINTF("->[bufferfield:0x%02x@0x%p]\n",
+			AML_PRINTF("->[bufferfield:0x%02x@%p]\n",
 			    tmp, addr);
 			*addr = tmp;
 		}
Index: aml_store.c
===================================================================
RCS file: /home/cvs/ACPI/sys/i386/acpi/aml/aml_store.c,v
retrieving revision 1.17
diff -u -r1.17 aml_store.c
--- aml_store.c	2000/06/15 16:01:42	1.17
+++ aml_store.c	2000/06/21 05:00:22
@@ -128,6 +128,7 @@
     union aml_object *buf, int offset)
 {
 	int	size;
+	int	bitlen;
 
 	switch (obj->type) {
 	case aml_t_num:
@@ -156,10 +157,14 @@
 		bcopy(obj->buffer.data, buf->buffer.data, size);
 		break;
 	case aml_t_regfield:
+		bitlen = (buf->buffer.size - offset) * 8;
+		if (bitlen > obj->regfield.bitlen) {
+			bitlen = obj->regfield.bitlen;
+		}
 		aml_region_read_into_buffer(obj->regfield.space,
 		    obj->regfield.flags, obj->regfield.offset,
-		    obj->regfield.bitoffset, obj->regfield.bitlen,
-		    buf->buffer.data);
+		    obj->regfield.bitoffset, bitlen,
+		    buf->buffer.data + offset);
 		break;
 	default:
 		goto not_yet;
@@ -197,7 +202,9 @@
 		offset = dest->bfld.bitoffset;
 		bitlen = dest->bfld.bitlen;
 
+#if 0
 		buffer += offset / 8;
+#endif
 		switch (src->type) {
 		case aml_t_num:
 			if (aml_bufferfield_write(src->num.number, buffer, offset, bitlen)) {
@@ -258,9 +265,13 @@
 			aml_realloc_object(ref, offset);
 		}
 		if (ref->package.objects[offset] == NULL) {
+#if 0
 			ref->package.objects[offset] = aml_alloc_object(obj->type, NULL);
+#endif
+			ref->package.objects[offset] = aml_copy_object(env, obj);
+		} else {
+			aml_store_to_object(env, obj, ref->package.objects[offset]);
 		}
-		aml_store_to_object(env, obj, ref->package.objects[offset]);
 		break;
 	default:
 		aml_store_to_object(env, obj, ref);
