[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 6/8] hw/hppa: Add power button emulation
From: |
Helge Deller |
Subject: |
[PATCH v3 6/8] hw/hppa: Add power button emulation |
Date: |
Wed, 2 Sep 2020 21:34:54 +0200 |
Emulate a power button switch, tell SeaBIOS the address via fw_cfg and
bind the power button to the qemu UI.
Signed-off-by: Helge Deller <deller@gmx.de>
---
hw/hppa/machine.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index 2bed49807b..d5164457ee 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -12,6 +12,7 @@
#include "qemu/error-report.h"
#include "sysemu/reset.h"
#include "sysemu/sysemu.h"
+#include "sysemu/runstate.h"
#include "hw/rtc/mc146818rtc.h"
#include "hw/timer/i8254.h"
#include "hw/char/serial.h"
@@ -27,6 +28,30 @@
#define MIN_SEABIOS_HPPA_VERSION 1 /* require at least this fw version */
+#define HPA_POWER_BUTTON (FIRMWARE_END - 0x10)
+
+static void hppa_powerdown_req(Notifier *n, void *opaque)
+{
+ hwaddr soft_power_reg = HPA_POWER_BUTTON;
+ uint32_t val;
+
+ val = ldl_be_phys(&address_space_memory, soft_power_reg);
+ if ((val >> 8) == 0) {
+ /* immediately shut down when under hardware control */
+ qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
+ return;
+ }
+
+ /* clear bit 31 to indicate that the power switch was pressed. */
+ val &= ~1;
+ stl_be_phys(&address_space_memory, soft_power_reg, val);
+}
+
+static Notifier hppa_system_powerdown_notifier = {
+ .notify = hppa_powerdown_req
+};
+
+
static ISABus *hppa_isa_bus(void)
{
ISABus *isa_bus;
@@ -86,6 +111,10 @@ static FWCfgState *create_fw_cfg(MachineState *ms)
fw_cfg_add_file(fw_cfg, "/etc/cpu/btlb_entries",
g_memdup(&val, sizeof(val)), sizeof(val));
+ val = cpu_to_le64(HPA_POWER_BUTTON);
+ fw_cfg_add_file(fw_cfg, "/etc/power-button-addr",
+ g_memdup(&val, sizeof(val)), sizeof(val));
+
fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, ms->boot_order[0]);
qemu_register_boot_set(fw_cfg_boot_set, fw_cfg);
@@ -177,6 +206,9 @@ static void machine_hppa_init(MachineState *machine)
}
}
+ /* register power switch emulation */
+ qemu_register_powerdown_notifier(&hppa_system_powerdown_notifier);
+
/* Load firmware. Given that this is not "real" firmware,
but one explicitly written for the emulation, we might as
well load it directly from an ELF image. */
--
2.21.3
- [PATCH v3 0/8] hppa: power button support, artist graphics fixes, firmware fixes, ..., Helge Deller, 2020/09/02
- [PATCH v3 4/8] hw/hppa: Change fw_cfg port address, Helge Deller, 2020/09/02
- [PATCH v3 6/8] hw/hppa: Add power button emulation,
Helge Deller <=
- [PATCH v3 2/8] hw/hppa: Make number of TLB and BTLB entries configurable, Helge Deller, 2020/09/02
- [PATCH v3 5/8] hw/hppa: Tell SeaBIOS port address of fw_cfg, Helge Deller, 2020/09/02
- [PATCH v3 1/8] seabios-hppa: Update SeaBIOS to hppa-qemu-5.2-2 tag, Helge Deller, 2020/09/02
- [PATCH v3 3/8] hw/hppa: Store boot device in fw_cfg section, Helge Deller, 2020/09/02
- [PATCH v3 7/8] hw/display/artist: Fix artist screen resolution, Helge Deller, 2020/09/02
- [PATCH v3 8/8] target/hppa: Fix boot with old Linux installation CDs, Helge Deller, 2020/09/02