X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=src%2Fdevices%2Fshutdown.c;h=7ff9a95adbe080893eef291ca96c937afdf8d44b;hp=fbc662b01c095edc25741ea265e5a01fe52e0c78;hb=a03618133f7df0954802a470a4bee7674f7aed45;hpb=a4e60364ebf69203297ce071914671d2b49d9b6d diff --git a/src/devices/shutdown.c b/src/devices/shutdown.c index fbc662b..7ff9a95 100644 --- a/src/devices/shutdown.c +++ b/src/devices/shutdown.c @@ -10,32 +10,63 @@ #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) { - int i; - printf ("Rebooting...\n"); /* See [kbd] for details on how to program the keyboard * controller. */ - for (i = 0; i < 100; i++) + for (;;) { - int j; + int i; /* Poll keyboard controller's status byte until * 'input buffer empty' is reported. */ - for (j = 0; j < 0x10000; j++) + for (i = 0; i < 0x10000; i++) { if ((inb (CONTROL_REG) & 0x02) == 0) break; @@ -90,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 ();