From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LzSlP-0005Cs-AO for qemu-devel@nongnu.org; Thu, 30 Apr 2009 05:41:07 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LzSlK-0005By-5Y for qemu-devel@nongnu.org; Thu, 30 Apr 2009 05:41:06 -0400 Received: from [199.232.76.173] (port=38070 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LzSlK-0005Bv-1R for qemu-devel@nongnu.org; Thu, 30 Apr 2009 05:41:02 -0400 Received: from mx2.redhat.com ([66.187.237.31]:39177) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LzSlJ-0004cO-5t for qemu-devel@nongnu.org; Thu, 30 Apr 2009 05:41:01 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3U9evC7009896 for ; Thu, 30 Apr 2009 05:40:57 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3U9euA2005022 for ; Thu, 30 Apr 2009 05:40:56 -0400 Received: from dhcp-1-237.tlv.redhat.com (dhcp-1-237.tlv.redhat.com [10.35.1.237]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3U9es17004883 for ; Thu, 30 Apr 2009 05:40:55 -0400 Date: Thu, 30 Apr 2009 12:40:54 +0300 From: Gleb Natapov Message-ID: <20090430094054.GI5082@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Subject: [Qemu-devel] [PATCH] Add ACPI power button emulation List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Signed-off-by: Gleb Natapov diff --git a/hw/acpi.c b/hw/acpi.c index 53c1fec..6141522 100644 --- a/hw/acpi.c +++ b/hw/acpi.c @@ -752,6 +752,15 @@ void qemu_system_device_hot_add(int bus, int slot, int state) } } +void qemu_press_power_button(void) +{ + gpe.sts |= (1 << 8); + if (gpe.en & (1 << 8)) { + qemu_set_irq(pm_state->irq, 1); + qemu_set_irq(pm_state->irq, 0); + } +} + struct acpi_table_header { char signature [4]; /* ACPI signature (4 ASCII characters) */ diff --git a/monitor.c b/monitor.c index b33fea1..35202aa 100644 --- a/monitor.c +++ b/monitor.c @@ -1211,6 +1211,11 @@ static void do_system_reset(Monitor *mon) qemu_system_reset_request(); } +static void do_press_pwrb(Monitor *mon) +{ + qemu_press_power_button(); +} + static void do_system_powerdown(Monitor *mon) { qemu_system_powerdown_request(); @@ -1733,6 +1738,7 @@ static const mon_cmd_t mon_cmds[] = { #if defined(TARGET_I386) { "nmi", "i", do_inject_nmi, "cpu", "inject an NMI on the given CPU", }, + { "press_power_button", "", do_press_pwrb, "", "press power button" }, #endif { "migrate", "-ds", do_migrate, "[-d] uri", "migrate to URI (using -d to not wait for completion)" }, diff --git a/pc-bios/bios-pq/0015_add-power_button_aml_object.patch b/pc-bios/bios-pq/0015_add-power_button_aml_object.patch new file mode 100644 index 0000000..7477b71 --- /dev/null +++ b/pc-bios/bios-pq/0015_add-power_button_aml_object.patch @@ -0,0 +1,27 @@ +Add power button device object to AML. + +diff --git a/bios/acpi-dsdt.dsl b/bios/acpi-dsdt.dsl +index 7bff30a..0ca129d 100644 +--- a/bios/acpi-dsdt.dsl ++++ b/bios/acpi-dsdt.dsl +@@ -38,6 +38,11 @@ DefinitionBlock ( + + /* PCI Bus definition */ + Scope(\_SB) { ++ Device (PWRB) { ++ Name (_HID, EisaId ("PNP0C0C")) ++ Name (_STA, 0x0B) ++ } ++ + Device(PCI0) { + Name (_HID, EisaId ("PNP0A03")) + Name (_ADR, 0x00) +@@ -724,7 +729,7 @@ DefinitionBlock ( + Return(0x01) + } + Method(_L08) { +- Return(0x01) ++ Notify(\_SB.PWRB, 0x80) + } + Method(_L09) { + Return(0x01) diff --git a/pc-bios/bios-pq/series b/pc-bios/bios-pq/series index fdef179..85e587e 100644 --- a/pc-bios/bios-pq/series +++ b/pc-bios/bios-pq/series @@ -12,3 +12,4 @@ 0012-load-smbios-entries-and-files-from-qemu.patch 0013_fix-non-acpi-timer-interrupt-routing.patch 0014_add-srat-acpi-table-support.patch +015_add-power_button_aml_object.patch diff --git a/sysemu.h b/sysemu.h index 50438a6..a8abb3c 100644 --- a/sysemu.h +++ b/sysemu.h @@ -38,6 +38,8 @@ void qemu_system_powerdown_request(void); int qemu_shutdown_requested(void); int qemu_reset_requested(void); int qemu_powerdown_requested(void); +void qemu_press_power_button(void); + #if !defined(TARGET_SPARC) && !defined(TARGET_I386) // Please implement a power failure function to signal the OS #define qemu_system_powerdown() do{}while(0) -- Gleb.