From owner-acpi-jp@jp.freebsd.org  Thu Jan  6 14:30:51 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id OAA16646;
	Thu, 6 Jan 2000 14:30:51 +0900 (JST)
	(envelope-from owner-acpi-jp@jp.FreeBSD.org)
Received: from mail.ogis-ri.co.jp (ns.ogis-ri.co.jp [158.201.127.1])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id OAA16596
	for <acpi-jp@jp.freebsd.org>; Thu, 6 Jan 2000 14:30:50 +0900 (JST)
	(envelope-from yokoyama@o3.otc.ogis-ri.co.jp)
Received: from nozomi.icc.ogis-ri.co.jp (nozomi.icc.ogis-ri.co.jp [158.201.123.33])
	by mail.ogis-ri.co.jp (8.9.2+3.1W/3.7W9903241917) with ESMTP id OAA05443
	for <acpi-jp@jp.freebsd.org>; Thu, 6 Jan 2000 14:30:49 +0900 (JST)
Received: from o3.otc.ogis-ri.co.jp (o3.otc.ogis-ri.co.jp [158.201.73.1]) by nozomi.icc.ogis-ri.co.jp (8.9.3+3.2W/3.5Wpl2-ogismail1.0) with ESMTP id OAA12493 for <acpi-jp@jp.freebsd.org>; Thu, 6 Jan 2000 14:30:48 +0900 (JST)
Received: from localhost (arcturus.o3.otc.ogis-ri.co.jp [158.201.73.15]) by o3.otc.ogis-ri.co.jp (8.8.4/3.5Wpl597042212) with ESMTP id OAA13119 for <acpi-jp@jp.freebsd.org>; Thu, 6 Jan 2000 14:30:47 +0900 (JST)
To: acpi-jp@jp.freebsd.org
From: Yasuo Yokoyama / =?iso-2022-jp?B?GyRCMiM7M0JZSVcbKEI=?=
 <yokoyama@o3.otc.ogis-ri.co.jp>
In-Reply-To: <200001040738.QAA28812@libr.scitec.kobe-u.ac.jp>
References: <200001031919.EAA22907@o3.otc.ogis-ri.co.jp>
	<200001040738.QAA28812@libr.scitec.kobe-u.ac.jp>
	<200001041606.BAA22427@tasogare.imasy.or.jp>
X-Mailer: Mew version 1.95b3 on XEmacs 21.1 (Biscayne)
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
 boundary="--Next_Part(Thu_Jan__6_14:30:51_2000_250)--"
Content-Transfer-Encoding: 7bit
Message-Id: <20000106143057A.yokoyama@o3.otc.ogis-ri.co.jp>
Date: Thu, 06 Jan 2000 14:30:57 +0900
X-Dispatcher: imput version 991025(IM133)
Lines: 596
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+990727
X-Sequence: acpi-jp 219
Subject: [acpi-jp 219] Re: Strange VAIO Z505JX FACP (Re: Strange usage
 of Or opcode in VersaProNX.dsdt.dat) 
Errors-To: owner-acpi-jp@jp.freebsd.org
Sender: owner-acpi-jp@jp.freebsd.org
X-Originator: yokoyama@o3.otc.ogis-ri.co.jp

----Next_Part(Thu_Jan__6_14:30:51_2000_250)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

$B2#;3$G$9!#(B

In Message <200001040738.QAA28812@libr.scitec.kobe-u.ac.jp>
	takawata@shidahara1.planet.sci.kobe-u.ac.jp wrote:

> >$B;d$O!"8=:_$N(B ACPI $B%+!<%M%k$K<j$G!"%4%j%4%j$H(Binterprit $B$7$?(B GPE $B%O%s%I%i!<$r2C(B
> >$B$($F(B
> >$BF0$+$7$F$$$k$N$G$9$,!"$"$kF|$\$3$\$3$H(B GPE $B$,H/@8$7$F$$$k$N$K5$$E$-!"(BAC $B%"%@%W(B
> >$B%?(B
> >$B$,H4$1$F$$$k$N$r8+$F$=$l$r;I$7D>$7$^$7$?!#(B
> 
> $B$r$r!#LLGr$=$&!#%3!<%I8+$;$F2<$5$$!#(B

$B%Y%?%Y%?$N(B dirty hack $B$J$s$G$A$g$C$H8+$;$k$N$OCQ$:$+$7$$$N$G$9$,!"$H$j$"(B
$B$($:E:IU$7$F$*$-$^$9!#(B
$B!t(B $B0lItL$<BAu$JItJ,$b$"$j$^$9!D(B

In Message <200001041606.BAA22427@tasogare.imasy.or.jp>
	Mitsuru IWASAKI <iwasaki@jp.freebsd.org> wrote:

> $B$=$&$$$($P(B FreeBSD $BK:G/2q$G(B 3110CT $B$,(B GPE $B$,;_$^$i$J$/$J$C$?;~$b(B
> AC $B$,H4$1$F$?$+$b(B... $B$$$d$"$l$O(B PCIC $B4X78(B? $B$"$l0JMh:F8=$7$J$$$N$G!"(B
> $B$9$G$K5-21$,Gv$l$F$^$9!#(B
> GPE $B$O$J$+$J$+<j$,$D$+$:$K$$$^$7$?$,!"2#;3$5$s%a%$%s$G$*4j$$$7$A$c$C$F(B
> $B$$$$$G$9$+$M(B?

$B$H$j$"$($:(B AML interpriter $B$,;E>e$,$k$^$G$O!"(B\_PTS $B$d(B \_WAK $B$NMM$K(B
builtin $B$GEPO?2DG=$J;EAH$_$r:n$k$3$H$K$7$^$9!#(B

$B$=$l$H8e$O!"(BNotify() $B$N(B OS $BB&$N<h07$r$I$&$9$k$+$G$9$,!D(B

----Next_Part(Thu_Jan__6_14:30:51_2000_250)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="acpi.c.diff"

Index: acpi.c
===================================================================
RCS file: /home/ncvs-acpi/ACPI/sys/i386/acpi/acpi.c,v
retrieving revision 1.10
diff -u -r1.10 acpi.c
--- acpi.c	1999/12/14 16:26:11	1.10
+++ acpi.c	2000/01/05 04:46:25
@@ -146,6 +146,12 @@
 static void acpi_trans_sleeping_state(acpi_softc_t *sc, u_int8_t state);
 static void acpi_soft_off(void *data,int howto);
 
+static void Z505_SCID(void);
+
+static u_int32_t Z505_LCDT = 1;
+static u_int32_t Z505_LID = 1;
+static u_int32_t Z505_PPST = 1;
+
 /* for debugging */
 static	int	acpi_debug = 0;
 SYSCTL_INT(_debug, OID_AUTO, acpi_debug, CTLFLAG_RW, &acpi_debug, 1, "");
@@ -405,6 +411,8 @@
 	if (status_a & ACPI_PM1_SLPBTN_EN || status_b & ACPI_PM1_SLPBTN_EN) {
 		acpi_set_sleeping_state(sc, 1);
 	}
+	if (status_0 & 0x200 || status_1 & 0x200)
+		Z505_SCID();
 }
 
 static void
@@ -638,7 +646,7 @@
 	}
 	acpi_io_pm1_enable(sc, ACPI_REGISTERS_OUTPUT, &status_a, &status_b);
 
-#if 0
+#if 1
 	/*
 	 * XXX
 	 * This should be done based on level event handlers in
@@ -1662,3 +1670,515 @@
 {
 	acpi_execute_method(sc, state, ACPI_METHOD_WAK);
 }
+
+# define While		while
+# define And2(x,y)	((x)&(y))
+# define And3(x,y,z)	(z=(x)&(y))
+# define Ones 		0xffffffff
+# define XOr2(x,y)	((x)^(y))		
+# define XOr3(x,y,z)	(z=(x)^(y))
+# define Else		else
+
+static void
+Z505_ENFG(void)
+{
+    /* Original ASL code
+     *
+	OperationRegion(SMC1, SystemIO, 0x370, 0x2)
+	Field(SMC1, ByteAcc, NoLock, Preserve) {
+	    INDX,	8,
+	    DATA,	8
+	}
+	Mutex(MUIO, 0)
+	Method(ENFG) {
+	    Acquire(MUIO, 0xffff)
+	    Store(0x55, INDX)
+	}
+    */
+    u_int32_t	tmp;
+    Acquire(MUIO, 0xffff)
+    OperationRegion(SMC1, SystemIO, 0x370, 0x2)
+    Field(SMC1, ByteAcc, NoLock, Preserve, 0, INDX, 8)
+    Field(SMC1, ByteAcc, NoLock, Preserve, 8, DATA, 8)
+    Acquire(MUIO, 0xffff)
+    Store(0x55, INDX)
+}
+static void
+Z505_EXFG(void)
+{
+    /* Original ASL code
+     *
+	OperationRegion(SMC1, SystemIO, 0x370, 0x2)
+	Field(SMC1, ByteAcc, NoLock, Preserve) {
+	    INDX,	8,
+	    DATA,	8
+	}
+	Mutex(MUIO, 0)
+	Method(EXFG) {
+	    Store(0xaa, INDX)
+	    Release(MUIO)
+	}
+    */
+    u_int32_t	tmp;
+    OperationRegion(SMC1, SystemIO, 0x370, 0x2)
+    Field(SMC1, ByteAcc, NoLock, Preserve, 0, INDX, 8)
+    Store(0xaa, INDX)
+    Release(MUIO)
+}
+
+static u_int32_t
+Z505_RDMB(u_int32_t Arg0)
+{
+    /* Original ASL code
+     *
+	OperationRegion(SMC1, SystemIO, 0x370, 0x2)
+	Field(SMC1, ByteAcc, NoLock, Preserve) {
+	    INDX,	8,
+	    DATA,	8
+	}
+	IndexField(INDX, DATA, ByteAcc, NoLock, Preserve) {
+	    Offset(0x10),
+	    CFG,	8,
+	    Offset(0x38),
+	    LDN,	8,
+	    Offset(0x110),
+			..... omit below
+	}
+	Method(RDMB, 1) {
+	    ENFG()
+	    Store(0x7, LDN)
+	    Store(Arg0, INDX)
+	    Store(DATA, Local0)
+	    EXFG()
+	    Return(Local0)
+	}
+    */
+    u_int32_t Local0;
+    u_int32_t tmp;
+    OperationRegion(SMC1, SystemIO, 0x370, 0x2)
+    Field(SMC1, ByteAcc, NoLock, Preserve, 0x0, INDX, 8)
+    Field(SMC1, ByteAcc, NoLock, Preserve, 0x8, DATA, 8)
+    IndexField(INDX, DATA, ByteAcc, NoLock, Preserve, 0x1c0, LDN, 0x8)
+    Z505_ENFG();
+    StoreIndexField(0x7, LDN)
+    Store(Arg0, INDX)
+/*
+    Store(DATA, Local0)
+*/
+    Local0 = inb(0x371);
+    Z505_EXFG();
+    return Local0;
+}
+
+static void
+Z505_WRMB(u_int32_t Arg0, u_int32_t Arg1)
+{
+    /* Original ASL code
+     *
+	OperationRegion(SMC1, SystemIO, 0x370, 0x2)
+	Field(SMC1, ByteAcc, NoLock, Preserve) {
+	    INDX,	8,
+	    DATA,	8
+	}
+	IndexField(INDX, DATA, ByteAcc, NoLock, Preserve) {
+	    Offset(0x10),
+	    CFG,	8,
+	    Offset(0x38),
+	    LDN,	8,
+	    Offset(0x110),
+			..... omit below
+	}
+	Method(WRMB, 2) {
+	    ENFG()
+	    Store(0x7, LDN)
+	    Store(Arg0, INDX)
+	    Store(Arg1, DATA)
+	    EXFG()
+	}
+    */
+
+    u_int32_t tmp;
+    OperationRegion(SMC1, SystemIO, 0x370, 0x2)
+    Field(SMC1, ByteAcc, NoLock, Preserve, 0x0, INDX, 8)
+    Field(SMC1, ByteAcc, NoLock, Preserve, 0x8, DATA, 8)
+    IndexField(INDX, DATA, ByteAcc, NoLock, Preserve, 0x1c0, LDN, 0x8)
+    Z505_ENFG();
+    StoreIndexField(0x7, LDN)
+    Store(Arg0, INDX)
+    Store(Arg1, DATA)
+    Z505_EXFG();
+}
+
+static void
+Z505_WIBE(void)
+{
+    /* Original ASL code
+     *
+	Method(WIBE) {
+	    While(RDMB(0x82)){
+	    }
+	}
+    */
+    While(Z505_RDMB(0x82))
+	;
+}
+
+static void
+Z505_WOBF(void)
+{
+    /* Original ASL code
+     *
+	Method(WOBF) {
+	    Store(Zero, Local0)
+	    While(LNot(Local0)) {
+		And(RDMB(0x86), 0x2, Local0)
+	    }
+	}
+    */
+    u_int32_t Local0 = Zero;
+    While(LNot(Local0)) {
+	And3(Z505_RDMB(0x86), 0x2, Local0);
+    }
+}
+
+static void
+Z505_EXCD(u_int32_t Arg0)
+{
+    /* Original ASL code
+     *
+	Mutex(MEEC, 0)
+	Method(EXCD, 1) {
+	    Store("Notify State to EC", Debug)
+	    Acquire(MEEC, 0xffff)
+	    WIBE
+	    WRMB(0x84, Arg0)
+	    WRMB(0x82, 0x87)
+	    WOBF
+	    And(RDMB(0x86), 0xfd, Local0)
+	    WRMB(0x86, Local0)
+	    Release(MEEC)
+	}
+    */
+    u_int32_t Local0;
+    ACPIPRINTF("Notify State to EC\n");
+    Acquire(MEEC, 0xffff)
+    Z505_WIBE();
+    Z505_WRMB(0x84, Arg0);
+    Z505_WRMB(0x82, 0x87);
+    Z505_WOBF();
+    And3(Z505_RDMB(0x86), 0xfd, Local0);
+    Z505_WRMB(0x86, Local0);
+    Release(MEEC)
+}
+
+static void
+Z505_QREC(u_int32_t Arg0)
+{
+    /* Original ASL code
+     *
+	Method(QREC, 1) {
+	    If(LEqual(Arg0, 0x51)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0xa0)
+	    }
+	    Else { If(LEqual(Arg0, 0x53)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0xac)
+	    }
+	    Else { If(LEqual(Arg0, 0x54)) {
+		EXCD(0x20)
+		Notify(\_SB.PCI0.ISA.SNC, 0xa2)
+	    }
+	    Else { If(LEqual(Arg0, 0x55)) {
+		EXCD(0x1f)
+		Notify(\_SB.PCI0.ISA.SNC, 0xa3)
+	    }
+	    Else { If(LEqual(Arg0, 0x56)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0xb3) // press Fn+S
+	    }
+	    Else { If(LEqual(Arg0, 0x57)) {
+		Store(RDMB(0x8e), Local0)
+		Store(RDMB(0x8f), Local1)
+		WRMB(0x8f,Local0)
+		XOr3(Local0, Local1, Local2);
+		If(And(Local2, 0x1, Zero)) {
+		    Notify(BAT1, 0x81)	// Battery Information Changed
+		}
+		If(And(Local2, 0x20, Zero)) {
+		    Notify(ACAD, 0x80) // Power Source Status Changed
+		    Notify(\_SB.PCI0.ISA.SNC, 0xba)
+		}
+		If(And(Local2, 0x80, Zero)) {
+		    If(And(Local0, 0x80, Zero)) {
+			Notify(\_SB.PCI0.ISA.SNC, 0xb7)
+			Store(Zero, LID)
+		    }
+		    Else {
+			Notify(\_SB.PCI0.ISA.SNC, 0xb9)
+			Store(One, LID)
+		    }
+		}
+	    }
+	    Else { If(LEqual(Arg0, 0x58)) {
+		EXCD(0x1f)
+		Notify(\_SB.PCI0.ISA.SNC, 0xa4)
+	    }
+	    Else { If(LEqual(Arg0, 0x59)) {
+		EXCD(0x1f)
+		Notify(\_SB.PCI0.ISA.SNC, 0xa5)
+	    }
+	    Else { If(LEqual(Arg0, 0x5a)) {
+		If(LEqual(LCDT, Ones)) {
+		    Store(PHSB(0xee, 0x0), LCDT)
+		}
+		If(LEqual(LCDT, 0x0)) {
+		    EXCD(0x1f)
+		    Notify(\_SB.PCI0.ISA.SNC, 0xa6)
+		}
+	    }
+	    Else { If(LEqual(Arg0, 0x5b)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0xb6)
+	    }
+	    Else { If(LEqual(Arg0, 0x5f)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0xad)
+	    }
+	    Else { If(LEqual(Arg0, 0x61)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0xb1)
+	    }
+	    Else { If(LEqual(Arg0, 0x64)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0xb0)
+	    }
+	    Else { If(LEqual(Arg0, 0x65)) {
+		EXCD(0x21)
+		Notify(\_SB.PCI0.ISA.SNC, 0xb4)
+	    }
+	    Else { If(LEqual(Arg0, 0x66)) {
+		EXCD(0x21)
+		Notify(\_SB.PCI0.ISA.SNC, 0xb5)
+	    }
+	    Else { If(LEqual(Arg0, 0x67)) {
+	    }
+	    Else {
+		If(LEqual(Arg0, 0x68)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0xb8)
+	    }
+	    Else { If(LEqual(Arg0, 0x76)) {
+		Store(Zero, \_SB.PCI0.ISA.SNC.PPST)
+		Notify(\_SB.PWRB, 0x80)	 // Device wake
+	    }
+	    Else { If(LEqual(Arg0, 0x78)) {
+		Notify(\_SB.PCI0.ISA.SNC, 0x90)
+	    }
+	    Else { If(LEqual(Arg0, 0x79)) {
+		EXCD(0x20)
+		Notify(\_SB.PCI0.ISA.SNC, 0xbb)
+	    }
+	    Else { If(LEqual(Arg0, 0x80)) {
+		Notify(\_TZ.ATF0, 0x80)	// Thermal Zone Status Chaange
+	    }
+	    Else { If(LEqual(Arg0, 0x81)) {
+		Notify(\_TZ.ATF0, 0x81)	// Thermal Zone Trip Points Change
+	    }
+	    Else {
+		Add(Arg0, 0x30, Local0)
+		PHS(Local0)
+	    } } } } } } } } } } } } } } } } } } } } } }
+	}
+    */
+    u_int32_t Local0, Local1, Local2;
+    switch (Arg0) {
+    case 0x51:
+	/* press Fn+Esc */
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xa0\n");
+	break;
+    case 0x53: 
+	/* press Fn+F12 */
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xac\n");
+	break;
+    case 0x54:
+	/* press Fn+F2 */
+	Z505_EXCD(0x20);
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xa2\n");
+	break;
+    case 0x55:
+	/* press Fn+F3 */
+	Z505_EXCD(0x1f);
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xa3\n");
+	break;
+    case 0x56:
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb3\n");
+	break;
+    case 0x57:
+    /*
+	Store(RDMB(0x8e), Local0)
+	Store(RDMB(0x8f), Local1)
+    */
+	Local0 = Z505_RDMB(0x8e);
+	Local1 = Z505_RDMB(0x8f);
+	Z505_WRMB(0x8f,Local0);
+	XOr3(Local0, Local1, Local2);
+	If(And2(Local2, 0x1)) {
+	    /* Battery Information Changed */
+	    ACPIPRINTF("BAT1, 0x81\n");
+	}
+	If(And2(Local2, 0x20)) {
+	    /* Power Source Status Changed */
+	    ACPIPRINTF("ACAD, 0x80\n");
+	    ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xba\n");
+	}
+	If(And2(Local2, 0x80)) {
+	    If(And2(Local0, 0x80)) {
+		ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb7\n");
+		/*
+		Store(Zero, LID)
+		*/
+		Z505_LID = 0;
+	    }
+	    Else {
+		ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb9\n");
+		/*
+		Store(One, LID)
+		*/
+		Z505_LID = 1;
+	    }
+	}
+	break;
+    case 0x58:
+	/* Press Fn+F4 */
+	Z505_EXCD(0x1f);
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xa4\n");
+	break;
+    case 0x59:
+	/* Press Fn+F5 */
+	Z505_EXCD(0x1f);
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xa5\n");
+	break;
+    case 0x5a:
+/*
+	if(Z505_LCDT == 1) {
+	    Z505_LCDT = Z505_PHSB(0xee, 0x0);
+	}
+	if(Z505_LCDT == 0) {
+	    Z505_EXCD(0x1f);
+	    ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xa6\n");
+	}
+*/
+	break;
+    case 0x5b:
+	/* call after EXCD() */
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb6\n");
+	break;
+    case 0x5f: 
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xad\n");
+	break;
+    case 0x61:
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb1\n");
+	break;
+    case 0x64:
+	/* Press Fn+D */
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb0\n");
+	break;
+    case 0x65:
+	Z505_EXCD(0x21);
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb4\n");
+	break;
+    case 0x66:
+	Z505_EXCD(0x21);
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb5\n");
+	break;
+    case 0x67:
+	break;
+    case 0x68:
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xb8\n");
+	break;
+    case 0x76:
+	Z505_PPST = 0;
+	ACPIPRINTF("\\_SB.PWRB, 0x80\n");	 /* Device wake */
+	break;
+    case 0x78:
+	/* Press Fn+B */
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0x90\n");
+	break;
+    case 0x79:
+	Z505_EXCD(0x20);
+	ACPIPRINTF("\\_SB.PCI0.ISA.SNC, 0xbb\n");
+	break;
+    case 0x80: 
+	/* Thermal Zone Status Chaange */
+	ACPIPRINTF("\\_TZ.ATF0, 0x80\n");
+	break;
+    case 0x81:
+	/* Thermal Zone Trip Points Change */
+	ACPIPRINTF("\\_TZ.ATF0, 0x81\n");
+	break;
+    default:
+/*
+	Local0 = Arg0 + 0x30;
+	Z505_PHS(Local0);
+*/
+	break;
+    }
+}
+/*Mutex(MSCI, 0)*/
+static void
+Z505_SCID(void)
+{
+    /* Original ASL code
+     *
+	Mutex(MSCI, 0)
+	Method(SCID) {
+	    Store("SCI generated", Debug)
+	    Store(Ones, Local7)
+	    While(Local7) {
+		And(RDMB(0x86), 0x1, Local0)
+		If(Local0) {
+		    Acquire(MSCI, 0xffff)
+		    WIBE
+		    WRMB(0x82,0x84)
+		    WOBF
+		    Store(RDMB(0x83), Local0)
+		    Store(RDMB(0x86), Local1)
+		    And(Local1, 0xfd, Local1)
+		    WRMB(0x86,Local1)
+		    Release(MSCI)
+		    Store(Local0, Debug)
+		    QREC(Local0)
+		}
+		Else {
+		    Store(Zero, Local7)
+		}
+	    }
+	}
+    */
+    u_int32_t Local7;
+    ACPIPRINTF("SCI generated\n");
+    /* Store(Ones, Local7) */
+    Local7 = Ones;
+    While(Local7) {
+	u_int32_t Local0;
+	And3(Z505_RDMB(0x86), 0x1, Local0);
+	If(Local0) {
+	    u_int32_t Local1;
+	    Acquire(MSCI, 0xffff)
+	    Z505_WIBE();
+	    Z505_WRMB(0x82,0x84);
+	    Z505_WOBF();
+	/*
+	    Store(RDMB(0x83), Local0)
+	    Store(RDMB(0x86), Local1)
+	*/
+            Local0 = Z505_RDMB(0x83);
+	    Local1 = Z505_RDMB(0x86);
+	    And3(Local1, 0xfd, Local1);
+	    Z505_WRMB(0x86,Local1);
+	    Release(MSCI)
+	    ACPIPRINTF("Local0 = %04x\n", Local0);
+	    Z505_QREC(Local0);
+	}
+	else {
+	/*
+	    Store(Zero, Local7)
+	*/
+	    Local7 = 0;
+	}
+    }
+}
+

----Next_Part(Thu_Jan__6_14:30:51_2000_250)----
