Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 May 2005 21:30:42 -0400
From:      "Alexandre \"Sunny\" Kovalenko" <Alex.Kovalenko@verizon.net>
To:        acpi@freebsd.org
Subject:   S3 state handled in BIOS?
Message-ID:  <1116811842.671.22.camel@RabbitsDen>

next in thread | raw e-mail | index | archive | help

--Boundary_(ID_ORCt1LQYbQI4EE4/TPqVUg)
Content-type: text/plain; charset=iso-8859-5
Content-transfer-encoding: 8BIT

Good people,

after much pocking around my laptop (Averatec
3150H), /usr/src/sys/i386/acpica/acpi_wakeup.c
and /usr/src/sys/contrib/dev/acpica/hwsleep.c, I came to conclusion that
S3 state in my case causes BIOS to suspend machine at the point when
SLP_TYP and SLP_EN are set and resume it from that same point,
completely ignoring wakeup vector.

This would cause FreeBSD to hit infinite loop in acpi_sleep_machdep
(acpi_wakeup.c) and never come back. Replacing that loop with
AcpiOsSleep(5000) lets system resume properly.

This kind of sleep (pseudo S3?) about doubles battery life, which is not
much to write home about, but matches what Windows does on the same
hardware, so, I guess, it is best I am going to get.

Question that I have to the list is whether somebody who knows ACPI
thinks that it is common enough situation to warrant tunable along the
lines of 'hw.acpi.s3bios', which would eliminate infinite loop if set?

I have unconditionally eliminated the loop for now and have been testing
it here for awhile without any bad side effects.

If your system appears to hang after resume from S3 while turning power
on, you might want to try attached very simplistic patch.

-- 
Alexandre "Sunny" Kovalenko (Олександр Коваленко)

--Boundary_(ID_ORCt1LQYbQI4EE4/TPqVUg)
Content-type: text/x-patch; name=acpi_wakeup.c.patch; charset=ASCII
Content-transfer-encoding: 7BIT
Content-disposition: attachment; filename=acpi_wakeup.c.patch

--- acpi_wakeup.c.ORIG	Sun May 22 21:22:42 2005
+++ acpi_wakeup.c	Sun May 22 21:25:11 2005
@@ -258,7 +258,8 @@
 			goto out;
 		}
 
-		for (;;) ;
+		AcpiOsSleep(5000);
+                intr_resume();
 	} else {
 		/* Execute Wakeup */
 		intr_resume();

--Boundary_(ID_ORCt1LQYbQI4EE4/TPqVUg)--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1116811842.671.22.camel>