X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdevices%2Fshutdown.c;h=da94c5294f339c1d81eb0950f83e53f9f703b1dc;hb=47747baf50a7db012348a4954b97fc161bcacd19;hp=7ff9a95adbe080893eef291ca96c937afdf8d44b;hpb=a03618133f7df0954802a470a4bee7674f7aed45;p=pintos-anon diff --git a/src/devices/shutdown.c b/src/devices/shutdown.c index 7ff9a95..da94c52 100644 --- a/src/devices/shutdown.c +++ b/src/devices/shutdown.c @@ -99,11 +99,21 @@ shutdown_power_off (void) printf ("Powering off...\n"); serial_flush (); + /* ACPI power-off */ + outw (0xB004, 0x2000); + /* This is a special power-off sequence supported by Bochs and QEMU, but not by physical hardware. */ for (p = s; *p != '\0'; p++) outb (0x8900, *p); + /* For newer versions of qemu, you must run with -device + * isa-debug-exit, which exits on any write to an IO port (by + * default 0x501). Qemu's exit code is double the value plus one, + * so there is no way to exit cleanly. We use 0x31 which should + * result in a qemu exit code of 0x63. */ + outb (0x501, 0x31); + /* This will power off a VMware VM if "gui.exitOnCLIHLT = TRUE" is set in its configuration file. (The "pintos" script does that automatically.) */