diff --git a/src/arch/i386/hci/commands/reboot_cmd.c b/src/arch/i386/hci/commands/reboot_cmd.c new file mode 100644 index 00000000..39e05af5 --- /dev/null +++ b/src/arch/i386/hci/commands/reboot_cmd.c @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2010 Michael Brown . + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include + +FILE_LICENCE ( GPL2_OR_LATER ); + +/** @file + * + * Reboot command + * + */ + +/** "reboot" options */ +struct reboot_options {}; + +/** "reboot" option list */ +static struct option_descriptor reboot_opts[] = {}; + +/** "reboot" command descriptor */ +static struct command_descriptor reboot_cmd = + COMMAND_DESC ( struct reboot_options, reboot_opts, 0, 0, "", "" ); + +/** + * The "reboot" command + * + * @v argc Argument count + * @v argv Argument list + * @ret rc Return status code + */ +static int reboot_exec ( int argc, char **argv ) { + struct reboot_options opts; + int rc; + + /* Parse options */ + if ( ( rc = parse_options ( argc, argv, &reboot_cmd, &opts ) ) != 0 ) + return rc; + + /* Reboot system */ + __asm__ __volatile__ ( REAL_CODE ( "ljmp $0xf000, $0xfff0" ) : : ); + + return 0; +} + +/** "reboot" command */ +struct command reboot_command __command = { + .name = "reboot", + .exec = reboot_exec, +}; diff --git a/src/config/config.c b/src/config/config.c index 5d218881..b53af42d 100644 --- a/src/config/config.c +++ b/src/config/config.c @@ -237,6 +237,9 @@ REQUIRE_OBJECT ( lotest_cmd ); #ifdef VLAN_CMD REQUIRE_OBJECT ( vlan_cmd ); #endif +#ifdef REBOOT_CMD +REQUIRE_OBJECT ( reboot_cmd ); +#endif /* * Drag in miscellaneous objects diff --git a/src/config/general.h b/src/config/general.h index c10312a1..9eb88651 100644 --- a/src/config/general.h +++ b/src/config/general.h @@ -125,6 +125,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #undef LOTEST_CMD /* Loopback testing commands */ #undef VLAN_CMD /* VLAN commands */ #undef PXE_CMD /* PXE commands */ +#undef REBOOT_CMD /* Reboot command */ /* * Error message tables to include