#include "userprog/exception.h"
#endif
#ifdef FILESYS
-#include "devices/disk.h"
+#include "devices/block.h"
#include "filesys/filesys.h"
#endif
/* Keyboard control register port. */
#define CONTROL_REG 0x64
+/* How to shut down when shutdown() is called. */
+static enum shutdown_type how = SHUTDOWN_NONE;
+
static void print_stats (void);
+/* Shuts down the machine in the way configured by
+ shutdown_configure(). If the shutdown type is SHUTDOWN_NONE
+ (which is the default), returns without doing anything. */
+void
+shutdown (void)
+{
+ switch (how)
+ {
+ case SHUTDOWN_POWER_OFF:
+ shutdown_power_off ();
+ break;
+
+ case SHUTDOWN_REBOOT:
+ shutdown_reboot ();
+ break;
+
+ default:
+ /* Nothing to do. */
+ break;
+ }
+}
+
+/* Sets TYPE as the way that machine will shut down when Pintos
+ execution is complete. */
+void
+shutdown_configure (enum shutdown_type type)
+{
+ how = type;
+}
+
/* Reboots the machine via the keyboard controller. */
void
shutdown_reboot (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++)
timer_print_stats ();
thread_print_stats ();
#ifdef FILESYS
- disk_print_stats ();
+ block_print_stats ();
#endif
console_print_stats ();
kbd_print_stats ();