From 835fb10b16a4144004bc695fa4cabf47c2061459 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Mon, 2 Jan 2006 02:30:31 +0000 Subject: [PATCH] Added of_exit and of_enter KDL commands. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15782 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/platform.h | 1 + src/system/kernel/main.c | 1 + .../kernel/platform/bios_ia32/platform.cpp | 7 ++++ .../kernel/platform/openfirmware/platform.cpp | 34 +++++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/headers/private/kernel/platform.h b/headers/private/kernel/platform.h index 28a61462ad..82e838e13c 100644 --- a/headers/private/kernel/platform.h +++ b/headers/private/kernel/platform.h @@ -14,6 +14,7 @@ extern "C" { #endif status_t platform_init(struct kernel_args *kernelArgs); +status_t platform_init_post_vm(struct kernel_args *kernelArgs); #ifdef __cplusplus } // extern "C" diff --git a/src/system/kernel/main.c b/src/system/kernel/main.c index 38118a8cd7..d5e2cbfab4 100644 --- a/src/system/kernel/main.c +++ b/src/system/kernel/main.c @@ -104,6 +104,7 @@ _start(kernel_args *bootKernelArgs, int currentCPU) // the boot loader allocated region is not used anymore // now we can use the heap and create areas + platform_init_post_vm(&sKernelArgs); TRACE(("init driver_settings\n")); boot_item_init(); driver_settings_init(&sKernelArgs); diff --git a/src/system/kernel/platform/bios_ia32/platform.cpp b/src/system/kernel/platform/bios_ia32/platform.cpp index f106f49383..88353217d4 100644 --- a/src/system/kernel/platform/bios_ia32/platform.cpp +++ b/src/system/kernel/platform/bios_ia32/platform.cpp @@ -12,3 +12,10 @@ platform_init(struct kernel_args *kernelArgs) { return B_OK; } + + +status_t +platform_init_post_vm(struct kernel_args *kernelArgs) +{ + return B_OK; +} diff --git a/src/system/kernel/platform/openfirmware/platform.cpp b/src/system/kernel/platform/openfirmware/platform.cpp index 9b54ec2c63..55fff99de1 100644 --- a/src/system/kernel/platform/openfirmware/platform.cpp +++ b/src/system/kernel/platform/openfirmware/platform.cpp @@ -5,12 +5,46 @@ #include +#include + #include #include + +static int +debug_command_of_exit(int argc, char **argv) +{ + of_exit(); + kprintf("of_exit() failed!\n"); + return 0; +} + + +static int +debug_command_of_enter(int argc, char **argv) +{ + of_call_client_function("enter", 0, 0); + return 0; +} + + status_t platform_init(struct kernel_args *kernelArgs) { return of_init( (int(*)(void*))kernelArgs->platform_args.openfirmware_entry); } + + +status_t +platform_init_post_vm(struct kernel_args *kernelArgs) +{ + add_debugger_command("of_exit", &debug_command_of_exit, + "Exit to the Open Firmware prompt. No way to get back into the OS!"); + add_debugger_command("of_enter", &debug_command_of_enter, + "Enter a subordinate Open Firmware interpreter. Quitting it returns " + "to KDL."); + + return B_OK; +} +