Date: Sat, 22 Apr 2000 10:42:02 -0700 (PDT) From: asaddi@philosophysw.com To: FreeBSD-gnats-submit@freebsd.org Subject: i386/18162: APM: Add flag to disable timer-based BIOS requests [PATCH] Message-ID: <200004221742.KAA00536@trantor.philosophysw.com>
next in thread | raw e-mail | index | archive | help
>Number: 18162 >Category: i386 >Synopsis: APM: Add flag to disable timer-based BIOS requests [PATCH] >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: wish >Submitter-Id: current-users >Arrival-Date: Sat Apr 22 10:50:02 PDT 2000 >Closed-Date: >Last-Modified: >Originator: Allan Saddi >Release: FreeBSD 4.0-STABLE i386 >Organization: Philosophy SoftWorks >Environment: FreeBSD trantor.philosophysw.com 4.0-STABLE FreeBSD 4.0-STABLE #42: Sat Apr 22 03:46:31 PDT 2000 root@utopia.philosophysw.com:/usr/src/sys/compile/TRANTOR i386 >Description: On my Compaq Presario 1215, the timer-based suspend/standby requests from BIOS interfere with normal APM operation. For example, when I use 'zzz' to suspend, my laptop will wake up on its own after 15 minutes due to a BIOS request. (I can only assume it's attempting a suspend-to- disk operation, which I really haven't gotten to work yet.) I cannot disable these requests from BIOS setup, hence this patch. I am using device flag 0x40, which does not appear to be used, to signify that BIOS timer requests should be disabled from apm_attach(). >How-To-Repeat: Suspend using 'zzz' when on battery power. Wait 15 minutes. >Fix: --- sys/i386/apm/apm.c.orig Sun Feb 6 06:57:05 2000 +++ sys/i386/apm/apm.c Sat Apr 22 04:17:55 2000 @@ -219,6 +219,19 @@ return (apm_bioscall()); } +/* enable/disable timer-based standby/suspend requests (APM 1.2 or later) */ +static int +apm_enable_disable_timer_req(int enable) +{ + struct apm_softc *sc = &apm_softc; + + sc->bios.r.eax = (APM_BIOS << 8) | APM_TIMERREQUESTS; + sc->bios.r.ebx = PMDV_APMBIOS; + sc->bios.r.ecx = enable; + sc->bios.r.edx = 0; + return (apm_bioscall()); +} + /* get PM event */ static u_int apm_getevent(void) @@ -1072,6 +1085,16 @@ printf("apm: *Warning* engage function failed err=[%x]", (sc->bios.r.eax >> 8) & 0xff); printf(" (Docked or using external power?).\n"); +#endif + } + } + + /* disable timer requests, if flag 0x40 is set (APM 1.2 or later) */ + if (sc->intversion >= INTVERSION(1, 2) && (flags & 0x40)) { + if (apm_enable_disable_timer_req(0)) { +#ifdef APM_DEBUG + printf("apm: *Warning* timer request function failed! [%x]\n", + (sc->bios.r.eax >> 8) & 0xff); #endif } } >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200004221742.KAA00536>