Kernel: make shutdown more verbose

Change-Id: Iab5fed4cb617a9dbce164ff81c7dedf408e9fd98
This commit is contained in:
Thomas Veerman 2013-02-28 17:04:15 +00:00
parent 2e723784ff
commit e232e0cbf0
2 changed files with 29 additions and 7 deletions

View file

@ -84,13 +84,13 @@ void
poweroff(void) poweroff(void)
{ {
const char *shutdown_str; const char *shutdown_str;
/* Bochs/QEMU poweroff */ /* Bochs/QEMU poweroff */
shutdown_str = "Shutdown"; shutdown_str = "Shutdown";
while (*shutdown_str) outb(0x8900, *(shutdown_str++)); while (*shutdown_str) outb(0x8900, *(shutdown_str++));
/* fallback option: reset */ /* fallback option: hang */
reset(); for (; ; ) halt_cpu();
} }
__dead void arch_shutdown(int how) __dead void arch_shutdown(int how)
@ -120,12 +120,12 @@ __dead void arch_shutdown(int how)
switch (how) { switch (how) {
case RBT_HALT: case RBT_HALT:
/* Stop */ /* Hang */
for (; ; ) halt_cpu(); for (; ; ) halt_cpu();
NOT_REACHABLE; NOT_REACHABLE;
case RBT_POWEROFF: case RBT_POWEROFF:
/* Power off if possible, reset otherwise */ /* Power off if possible, hang otherwise */
poweroff(); poweroff();
NOT_REACHABLE; NOT_REACHABLE;

View file

@ -351,6 +351,8 @@ void minix_shutdown(timer_t *tp)
* down MINIX. How to shutdown is in the argument: RBT_HALT (return to the * down MINIX. How to shutdown is in the argument: RBT_HALT (return to the
* monitor), RBT_RESET (hard reset). * monitor), RBT_RESET (hard reset).
*/ */
int how;
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* /*
* FIXME * FIXME
@ -364,7 +366,27 @@ void minix_shutdown(timer_t *tp)
#endif #endif
hw_intr_disable_all(); hw_intr_disable_all();
stop_local_timer(); stop_local_timer();
arch_shutdown(tp ? tmr_arg(tp)->ta_int : RBT_PANIC);
how = tp ? tmr_arg(tp)->ta_int : RBT_PANIC;
/* Show shutdown message */
direct_cls();
switch(how) {
case RBT_HALT:
direct_print("MINIX has halted. "
"It is safe to turn off your computer.\n");
break;
case RBT_POWEROFF:
direct_print("MINIX has halted and will now power off.\n");
break;
case RBT_DEFAULT:
case RBT_REBOOT:
case RBT_RESET:
default:
direct_print("MINIX will now reset.\n");
break;
}
arch_shutdown(how);
} }
/*===========================================================================* /*===========================================================================*