Implement a proper block layer with partition support.
[pintos-anon] / src / devices / shutdown.c
index 4c978f970216169d69b34d061ae7c1c3d746f857..7ff9a95adbe080893eef291ca96c937afdf8d44b 100644 (file)
 #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)
@@ -88,7 +121,7 @@ print_stats (void)
   timer_print_stats ();
   thread_print_stats ();
 #ifdef FILESYS
-  disk_print_stats ();
+  block_print_stats ();
 #endif
   console_print_stats ();
   kbd_print_stats ();