From a958ad0dbc0ae4387c825245b548c5cd1baf7695 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sun, 3 Jan 2016 23:57:21 -0700 Subject: [PATCH] Support system resets via SMC. --- hw/xbox/smbus_xbox_smc.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/hw/xbox/smbus_xbox_smc.c b/hw/xbox/smbus_xbox_smc.c index aa8a579208..00a8b41a65 100644 --- a/hw/xbox/smbus_xbox_smc.c +++ b/hw/xbox/smbus_xbox_smc.c @@ -21,6 +21,7 @@ #include "hw/i2c/i2c.h" #include "hw/i2c/smbus.h" #include "qemu/config-file.h" +#include "sysemu/sysemu.h" /* * Hardware is a PIC16LC @@ -110,6 +111,17 @@ static void smc_write_data(SMBusDevice *dev, uint8_t cmd, uint8_t *buf, int len) smc->version_string_index = buf[0]; break; + case SMC_REG_POWER: + if (buf[0] & (SMC_REG_POWER_RESET | SMC_REG_POWER_CYCLE)) + qemu_system_reset_request(); + else if (buf[0] & SMC_REG_POWER_SHUTDOWN) + qemu_system_shutdown_request(); + break; + + case SMC_REG_SCRATCH: + smc->scratch_reg = buf[0]; + break; + /* challenge response * (http://www.xbox-linux.org/wiki/PIC_Challenge_Handshake_Sequence) */ case 0x20: @@ -117,7 +129,6 @@ static void smc_write_data(SMBusDevice *dev, uint8_t cmd, uint8_t *buf, int len) case 0x21: break; - default: break; } @@ -135,6 +146,7 @@ static uint8_t smc_read_data(SMBusDevice *dev, uint8_t cmd, int n) case SMC_REG_VER: return smc_version_string[ smc->version_string_index++%(sizeof(smc_version_string)-1)]; + case SMC_REG_AVPACK: /* pretend to have a composite av pack plugged in */ return SMC_REG_AVPACK_COMPOSITE;