From owner-svn-src-all@FreeBSD.ORG Wed Feb 15 22:49:26 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0B4811065672; Wed, 15 Feb 2012 22:49:26 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D37B68FC0A; Wed, 15 Feb 2012 22:49:25 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q1FMnPgU085867; Wed, 15 Feb 2012 22:49:25 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q1FMnP2r085865; Wed, 15 Feb 2012 22:49:25 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201202152249.q1FMnP2r085865@svn.freebsd.org> From: Jung-uk Kim Date: Wed, 15 Feb 2012 22:49:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r231791 - head/sys/amd64/acpica X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Feb 2012 22:49:26 -0000 Author: jkim Date: Wed Feb 15 22:49:25 2012 New Revision: 231791 URL: http://svn.freebsd.org/changeset/base/231791 Log: Set up an event handler to turn off speaker if user requested it. Speaker will stop beeping after all device drivers are resumed. Use proper API to "acquire" and "release" PIC timer2 for consistency and correctness. Modified: head/sys/amd64/acpica/acpi_wakeup.c Modified: head/sys/amd64/acpica/acpi_wakeup.c ============================================================================== --- head/sys/amd64/acpica/acpi_wakeup.c Wed Feb 15 22:45:57 2012 (r231790) +++ head/sys/amd64/acpica/acpi_wakeup.c Wed Feb 15 22:49:25 2012 (r231791) @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -40,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -92,11 +94,11 @@ static void acpi_wakeup_cpus(struct acp *addr = val; \ } while (0) -/* Turn off bits 1&2 of the PIT, stopping the beep. */ static void acpi_stop_beep(void *arg) { - outb(0x61, inb(0x61) & ~0x3); + + timer_spkr_release(); } #ifdef SMP @@ -217,6 +219,7 @@ acpi_wakeup_cpus(struct acpi_softc *sc, int acpi_sleep_machdep(struct acpi_softc *sc, int state) { + static eventhandler_tag stop_beep = NULL; #ifdef SMP cpuset_t wakeup_cpus; #endif @@ -234,6 +237,22 @@ acpi_sleep_machdep(struct acpi_softc *sc CPU_CLR(PCPU_GET(cpuid), &wakeup_cpus); #endif + if (acpi_resume_beep == 0) { + if (stop_beep != NULL) { + EVENTHANDLER_DEREGISTER(power_resume, stop_beep); + stop_beep = NULL; + } + } else { + if (stop_beep == NULL) + stop_beep = EVENTHANDLER_REGISTER(power_resume, + acpi_stop_beep, NULL, EVENTHANDLER_PRI_LAST); + if (stop_beep == NULL) + device_printf(sc->acpi_dev, + "Failed to set up event handler\n"); + else + timer_spkr_acquire(); + } + AcpiSetFirmwareWakingVector(WAKECODE_PADDR(sc)); rf = intr_disable(); @@ -257,7 +276,7 @@ acpi_sleep_machdep(struct acpi_softc *sc } #endif - WAKECODE_FIXUP(resume_beep, uint8_t, (acpi_resume_beep != 0)); + WAKECODE_FIXUP(resume_beep, uint8_t, (stop_beep != NULL)); WAKECODE_FIXUP(reset_video, uint8_t, (acpi_reset_video != 0)); WAKECODE_FIXUP(wakeup_pcb, struct pcb *, susppcbs[0]); @@ -311,10 +330,6 @@ out: mem_range_softc.mr_op->reinit != NULL) mem_range_softc.mr_op->reinit(&mem_range_softc); - /* If we beeped, turn it off after a delay. */ - if (acpi_resume_beep) - timeout(acpi_stop_beep, NULL, 3 * hz); - return (ret); }