ppc/pegasos2: Implement power-off RTAS function with VOF
This only helps Linux guests as only that seems to use it. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Message-Id: <1c1e030f2bbc86e950b3310fb5922facdc21ef86.1634241019.git.balaton@eik.bme.hu> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
d200ea14b7
commit
284c0486e7
|
@ -22,6 +22,7 @@
|
||||||
#include "hw/i2c/smbus_eeprom.h"
|
#include "hw/i2c/smbus_eeprom.h"
|
||||||
#include "hw/qdev-properties.h"
|
#include "hw/qdev-properties.h"
|
||||||
#include "sysemu/reset.h"
|
#include "sysemu/reset.h"
|
||||||
|
#include "sysemu/runstate.h"
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "hw/fw-path-provider.h"
|
#include "hw/fw-path-provider.h"
|
||||||
|
@ -429,6 +430,16 @@ static target_ulong pegasos2_rtas(PowerPCCPU *cpu, Pegasos2MachineState *pm,
|
||||||
qemu_log_mask(LOG_UNIMP, "%c", ldl_be_phys(as, args));
|
qemu_log_mask(LOG_UNIMP, "%c", ldl_be_phys(as, args));
|
||||||
stl_be_phys(as, rets, 0);
|
stl_be_phys(as, rets, 0);
|
||||||
return H_SUCCESS;
|
return H_SUCCESS;
|
||||||
|
case RTAS_POWER_OFF:
|
||||||
|
{
|
||||||
|
if (nargs != 2 || nrets != 1) {
|
||||||
|
stl_be_phys(as, rets, -1);
|
||||||
|
return H_PARAMETER;
|
||||||
|
}
|
||||||
|
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||||
|
stl_be_phys(as, rets, 0);
|
||||||
|
return H_SUCCESS;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
qemu_log_mask(LOG_UNIMP, "Unknown RTAS token %u (args=%u, rets=%u)\n",
|
qemu_log_mask(LOG_UNIMP, "Unknown RTAS token %u (args=%u, rets=%u)\n",
|
||||||
token, nargs, nrets);
|
token, nargs, nrets);
|
||||||
|
|
Loading…
Reference in New Issue