From owner-acpi-jp@jp.freebsd.org  Mon Sep 18 09:40:20 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id JAA17924;
	Mon, 18 Sep 2000 09:40:20 +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 JAA17919
	for <acpi-jp@jp.freebsd.org>; Mon, 18 Sep 2000 09:40:18 +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 e8I0eFr78540
	for <acpi-jp@jp.freebsd.org>; Mon, 18 Sep 2000 09:40:15 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
To: acpi-jp@jp.freebsd.org
In-Reply-To: <20000918075726A.iwasaki@jp.FreeBSD.org>
References: <20000916181454J.iwasaki@jp.FreeBSD.org>
	<20000918055713A.iwasaki@jp.FreeBSD.org>
	<20000918075726A.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: <20000918093901H.iwasaki@jp.FreeBSD.org>
Date: Mon, 18 Sep 2000 09:39:01 +0900
From: Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
X-Dispatcher: imput version 20000228(IM140)
Lines: 99
Reply-To: acpi-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: acpi-jp 644
Subject: [acpi-jp 644] 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<!$N(B PowerButton $B%$%Y%s%H$O0l2s$@$1L5;k$9$k$h$&$K$7$?J}$,$h$$$G$9$+$M(B?
> $B2?$+$$$$J}K!$O$"$j$^$;$s$+(B?

$B$$$$J}K!;W$$$D$-$^$7$?!#(Bsleep $B$KF~$kA0$K0lDj;~4V(B ($B$3$3$G$O(B 5 $BIC4V(B)
PowerButton $B%$%Y%s%H$rL5;k$9$k$h$&$K$7$^$7$?!#$3$l$@$H(B ACPI BIOS $B$N(B
$B<BAu$K:81&$5$l$:$KF1$85sF0$K$9$k$3$H$,$G$-!"LdBj$r2sHr$G$-$=$&$G$9!#(B

Index: acpi.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpi/acpi.c,v
retrieving revision 1.8
diff -u -r1.8 acpi.c
--- acpi.c	2000/09/14 23:29:37	1.8
+++ acpi.c	2000/09/18 00:26:33
@@ -153,6 +153,7 @@
 			       u_int32_t status_0, u_int32_t status_1);
 static void acpi_intr(void *data);
 static void acpi_enable_events(acpi_softc_t *sc);
+static void acpi_clear_ignore_events(void *arg);
 
 /* New-bus dependent code */
 static acpi_softc_t *acpi_get_softc(dev_t dev);
@@ -834,6 +835,10 @@
 		val_a = ACPI_PM1_WAK_STS;
 		val_b = ACPI_PM1_WAK_STS;
 		acpi_io_pm1_status(sc, ACPI_REGISTERS_OUTPUT, &val_a, &val_b);
+
+		/* ignore power button and sleep button events for 5 sec. */
+		sc->ignore_events = ACPI_PM1_PWRBTN_EN | ACPI_PM1_SLPBTN_EN;
+		timeout(acpi_clear_ignore_events, (caddr_t)sc, hz * 5);
 	}
 
 	acpi_io_pm1_control(sc, ACPI_REGISTERS_INPUT, &val_a, &val_b);
@@ -1001,11 +1006,19 @@
 {
 
 	if (status_a & ACPI_PM1_PWRBTN_EN || status_b & ACPI_PM1_PWRBTN_EN) {
-		acpi_set_sleeping_state(sc, ACPI_S_STATE_S5);
+		if (sc->ignore_events & ACPI_PM1_PWRBTN_EN) {
+			ACPI_DEBUGPRINT("PWRBTN event ingnored\n");
+		} else {
+			acpi_set_sleeping_state(sc, ACPI_S_STATE_S5);
+		}
 	}
 
 	if (status_a & ACPI_PM1_SLPBTN_EN || status_b & ACPI_PM1_SLPBTN_EN) {
-		acpi_set_sleeping_state(sc, ACPI_S_STATE_S1);
+		if (sc->ignore_events & ACPI_PM1_SLPBTN_EN) {
+			ACPI_DEBUGPRINT("SLPBTN event ingnored\n");
+		} else {
+			acpi_set_sleeping_state(sc, ACPI_S_STATE_S1);
+		}
 	}
 }
 
@@ -1114,10 +1127,10 @@
 		acpi_debug = 0;		/* Shut up again */
 	}
 
+	acpi_debug = debug;	/* Restore debug level */
+
 	/* do something to handle the events... */
 	acpi_process_event(sc, status_a, status_b, status_0, status_1);
-
-	acpi_debug = debug;	/* Restore debug level */
 }
 
 static void
@@ -1164,6 +1177,14 @@
 	acpi_io_pm1_control(sc, ACPI_REGISTERS_INPUT,  &status_a, &status_b);
 	acpi_io_pm2_control(sc, ACPI_REGISTERS_INPUT,  &status_a);
 	acpi_io_pm_timer(sc, ACPI_REGISTERS_INPUT,  &status_a);
+}
+
+static void
+acpi_clear_ignore_events(void *arg)
+{
+
+	((acpi_softc_t *)arg)->ignore_events = 0;
+	ACPI_DEBUGPRINT("ignore events cleared\n");
 }
 
 /*
Index: acpi.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpi/acpi.h,v
retrieving revision 1.3
diff -u -r1.3 acpi.h
--- acpi.h	2000/09/14 23:29:37	1.3
+++ acpi.h	2000/09/18 00:26:45
@@ -68,6 +68,7 @@
 	int	system_state_initialized;
 	int	broken_wakeuplogic;
 	int	enabled;
+	u_int32_t ignore_events;
 	struct	acpi_system_state_package system_state_package;
 	LIST_HEAD(, acpi_powerres_info) acpi_powerres_inflist;
 	LIST_HEAD(, acpi_powerres_device) acpi_powerres_devlist;

