From owner-acpi-jp@jp.freebsd.org  Tue Sep 12 09:27:26 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id JAA70046;
	Tue, 12 Sep 2000 09:27:26 +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 JAA70041
	for <acpi-jp@jp.freebsd.org>; Tue, 12 Sep 2000 09:27:25 +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 e8C0RMr14148
	for <acpi-jp@jp.freebsd.org>; Tue, 12 Sep 2000 09:27:22 +0900 (JST)
	(envelope-from iwasaki@jp.freebsd.org)
To: acpi-jp@jp.freebsd.org
In-Reply-To: <20000908220335L.iwasaki@jp.freebsd.org>
References: <20000906235646Y.iwasaki@jp.FreeBSD.org>
	<20000907140550L.yokoyama@o3.otc.ogis-ri.co.jp>
	<20000908220335L.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: <20000912092720B.iwasaki@jp.freebsd.org>
Date: Tue, 12 Sep 2000 09:27:20 +0900
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 20000228(IM140)
Lines: 128
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: acpi-jp 629
Subject: [acpi-jp 629] 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$3$l$G$9$,!"$I$&$;$J$i$-$A$s$H(B AccessType $B$d!"(BUpdateRule $B$K=>$C$F(B
> > $B=q$-9~$`D9$5$H%"%i%$%a%s%H$r(B AccessType $B$r8+$F7h$a$F!"(B
> > UpdateRule $B$r8+$F!"A0$NCM$r;D$9$+!"(B0 $B$r5M$a$k$+!"(B1 $B$r5M$a$k$+$r(B
> > $B7h$a$kMM$K$7$F$d$C$?J}$,$$$$$s$G$O$J$$$G$7$g$&$+!)(B
> > 
> > $B!t(B $B$b$C$H$b!"(BUpdateRule != Preserve $B$J$b$N$K$O$^$@(B
> > $B!t(B $B$*L\$K$+$+$C$F$J$$$G$9$,!D(B
> 
> $B$3$l$d$j$?$$$s$G$9$,!"=q$-9~$`CM$rJd@5$9$k=hM}$r6&DL4X?t$_$?$$$K$7$F!"(B
> aml_region_XXX() $B$b0l=o$K$d$j$?$$$J$!$H;W$$$J$,$i$J$+$J$+;~4V$,$H$l$:(B...
> $B$H$$$C$?>u67$G$9!#(Bflags, bitoffset, bitlen, orgvalue, value $B$rEO$9$H!"(B
> $BJd@5:Q$_$NCM$rJV$7$F$/$l$k$d$D$G$9!#(B

$B$H$j$"$($:!"C!$-Bf$r:n$C$F$_$^$7$?!#(B
AccessType $B$O(B ANY, BYTE, WORD, DWORD $B$7$+9MN8$7$F$$$^$;$s!#(B
$B%3%a%s%H$h$m$7$/$*4j$$$7$^$9!#(B

Index: aml_common.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpi/aml/aml_common.c,v
retrieving revision 1.1
diff -u -r1.1 aml_common.c
--- aml_common.c	2000/08/24 09:33:08	1.1
+++ aml_common.c	2000/09/12 00:04:56
@@ -404,3 +404,57 @@
 	    origin, bitoffset, bitlen);
 	return (status);
 }
+
+u_int32_t
+aml_adjust_updatevalue(u_int32_t flags, u_int32_t bitoffset, u_int32_t bitlen,
+    u_int32_t orgval, u_int32_t value)
+{
+	u_int32_t	retval;
+	u_int32_t	bitmask;
+
+	switch (flags & AML_FIELDFLAGS_ACCESS_MASK) {
+	case AML_FIELDFLAGS_ACCESS_ANYACC:	/* XXX */
+		if (bitlen <= 8) {
+			bitmask = 0x000000ff;
+			break;
+		}
+		if (bitlen <= 16) {
+			bitmask = 0x0000ffff;
+			break;
+		}
+		bitmask = 0xffffffff;
+		break;
+	case AML_FIELDFLAGS_ACCESS_BYTEACC:
+		bitmask = 0x000000ff;
+		break;
+	case AML_FIELDFLAGS_ACCESS_WORDACC:
+		bitmask = 0x0000ffff;
+		break;
+	case AML_FIELDFLAGS_ACCESS_DWORDACC:
+	default:
+		bitmask = 0xffffffff;
+		break;
+	}
+
+	retval = orgval;
+	switch (flags & AML_FIELDFLAGS_UPDATE_MASK) {
+	case AML_FIELDFLAGS_UPDATE_PRESERVE:
+		retval &= (~((1 << bitlen) - 1) << bitoffset) |
+			  (~(bitmask << bitoffset));
+		break;
+	case AML_FIELDFLAGS_UPDATE_WRITEASONES:
+		retval =  (~((1 << bitlen) - 1) << bitoffset) |
+			  (~(bitmask << bitoffset));
+		break;
+	case AML_FIELDFLAGS_UPDATE_WRITEASZEROS:
+		retval = 0;
+		break;
+	default:
+		printf("illegal update rule: %d\n", flags);
+		return (orgval);
+	}
+
+	retval |= (value << (bitoffset & bitmask));
+
+	return (retval);
+}
Index: aml_common.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpi/aml/aml_common.h,v
retrieving revision 1.1
diff -u -r1.1 aml_common.h
--- aml_common.h	2000/08/24 09:33:08	1.1
+++ aml_common.h	2000/09/12 00:05:32
@@ -62,6 +62,29 @@
 	}								\
 } while(0)
 
+/*
+ * Field Flags
+ */
+/* bit 0 -3:	AccessType */
+#define AML_FIELDFLAGS_ACCESS_ANYACC		0x00
+#define AML_FIELDFLAGS_ACCESS_BYTEACC		0x01
+#define AML_FIELDFLAGS_ACCESS_WORDACC		0x02
+#define AML_FIELDFLAGS_ACCESS_DWORDACC		0x03
+#define AML_FIELDFLAGS_ACCESS_BLOCKACC		0x04
+#define AML_FIELDFLAGS_ACCESS_SMBSENDRECVACC	0x05
+#define AML_FIELDFLAGS_ACCESS_SMBQUICKACC	0x06
+#define AML_FIELDFLAGS_ACCESS_MASK		0x0f
+/* bit 4:	LockRule */
+#define AML_FIELDFLAGS_LOCK_NOLOCK		0x00
+#define AML_FIELDFLAGS_LOCK_LOCK		0x10
+#define AML_FIELDFLAGS_LOCK_MASK		0x10
+/* bit 5 - 6:	UpdateRule */
+#define AML_FIELDFLAGS_UPDATE_PRESERVE		0x00
+#define AML_FIELDFLAGS_UPDATE_WRITEASONES	0x20
+#define AML_FIELDFLAGS_UPDATE_WRITEASZEROS	0x40
+#define AML_FIELDFLAGS_UPDATE_MASK		0x60
+/* bit 7:	reserved (must be 0) */
+
 void		 aml_showobject(union aml_object *);
 void		 aml_showtree(struct aml_name *, int);
 int		 aml_print_curname(struct aml_name *);
@@ -71,5 +94,8 @@
 u_int32_t	 aml_bufferfield_read(u_int8_t *, u_int32_t, u_int32_t);
 int		 aml_bufferfield_write(u_int32_t, u_int8_t *,
 				       u_int32_t, u_int32_t);
+
+u_int32_t	 aml_adjust_updatevalue(u_int32_t, u_int32_t, u_int32_t,
+					u_int32_t, u_int32_t);
 
 #endif /* !_AML_COMMON_H_ */
