From 8baf8813c0562df49a23b32f42b95c544af1a20b Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 7 Jan 2006 22:49:43 +0000 Subject: [PATCH] Added "shutdown" debugger command. Implemented arch_cpu_shutdown() for PPC. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15862 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/arch/ppc/arch_platform.h | 2 ++ src/system/kernel/arch/ppc/Jamfile | 2 +- .../kernel/arch/ppc/{arch_cpu.c => arch_cpu.cpp} | 5 ++++- src/system/kernel/arch/ppc/arch_platform.cpp | 14 ++++++++++++++ src/system/kernel/debug/debug.c | 9 +++++++++ 5 files changed, 30 insertions(+), 2 deletions(-) rename src/system/kernel/arch/ppc/{arch_cpu.c => arch_cpu.cpp} (97%) diff --git a/headers/private/kernel/arch/ppc/arch_platform.h b/headers/private/kernel/arch/ppc/arch_platform.h index a770b4c95b..f87c02e36a 100644 --- a/headers/private/kernel/arch/ppc/arch_platform.h +++ b/headers/private/kernel/arch/ppc/arch_platform.h @@ -29,6 +29,8 @@ public: virtual void SetHardwareRTC(uint32 seconds) = 0; virtual uint32 GetHardwareRTC() = 0; + + virtual void ShutDown(bool reboot) = 0; }; } // namespace BPrivate diff --git a/src/system/kernel/arch/ppc/Jamfile b/src/system/kernel/arch/ppc/Jamfile index 66ab87adce..40268e8658 100644 --- a/src/system/kernel/arch/ppc/Jamfile +++ b/src/system/kernel/arch/ppc/Jamfile @@ -6,7 +6,7 @@ SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) generic ] ; KernelStaticLibrary libppc : arch_atomic.c - arch_cpu.c + arch_cpu.cpp arch_cpu_asm.S arch_debug_console.cpp arch_debug.c diff --git a/src/system/kernel/arch/ppc/arch_cpu.c b/src/system/kernel/arch/ppc/arch_cpu.cpp similarity index 97% rename from src/system/kernel/arch/ppc/arch_cpu.c rename to src/system/kernel/arch/ppc/arch_cpu.cpp index 8c76e90a9c..2adf2fb165 100644 --- a/src/system/kernel/arch/ppc/arch_cpu.c +++ b/src/system/kernel/arch/ppc/arch_cpu.cpp @@ -8,6 +8,8 @@ #include + +#include #include #include @@ -196,7 +198,8 @@ error: status_t arch_cpu_shutdown(bool reboot) { - return EOPNOTSUPP; + PPCPlatform::Default()->ShutDown(reboot); + return B_ERROR; } diff --git a/src/system/kernel/arch/ppc/arch_platform.cpp b/src/system/kernel/arch/ppc/arch_platform.cpp index 1defa41a7a..6833341645 100644 --- a/src/system/kernel/arch/ppc/arch_platform.cpp +++ b/src/system/kernel/arch/ppc/arch_platform.cpp @@ -58,6 +58,8 @@ public: virtual void SetHardwareRTC(uint32 seconds); virtual uint32 GetHardwareRTC(); + virtual void ShutDown(bool reboot); + private: int fInput; int fOutput; @@ -203,6 +205,18 @@ PPCOpenFirmware::GetHardwareRTC() return rtc_tm_to_secs(&t); } +// ShutDown +void +PPCOpenFirmware::ShutDown(bool reboot) +{ + if (reboot) { + of_interpret("reset-all", 0, 0); + } else { + // not standardized, so it might fail + of_interpret("shut-down", 0, 0); + } +} + // # pragma mark - diff --git a/src/system/kernel/debug/debug.c b/src/system/kernel/debug/debug.c index bcf0308024..42abea8d52 100644 --- a/src/system/kernel/debug/debug.c +++ b/src/system/kernel/debug/debug.c @@ -325,6 +325,14 @@ cmd_reboot(int argc, char **argv) } +static int +cmd_shutdown(int argc, char **argv) +{ + arch_cpu_shutdown(false); + return 0; +} + + static int cmd_help(int argc, char **argv) { @@ -412,6 +420,7 @@ debug_init_post_vm(kernel_args *args) add_debugger_command("help", &cmd_help, "List all debugger commands"); add_debugger_command("reboot", &cmd_reboot, "Reboot the system"); + add_debugger_command("shutdown", &cmd_shutdown, "Shut down the system"); add_debugger_command("gdb", &cmd_gdb, "Connect to remote gdb"); add_debugger_command("continue", &cmd_continue, "Leave kernel debugger"); add_debugger_command("exit", &cmd_continue, NULL);