[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
reboot and halt commands for the PPC
From: |
Marco Gerards |
Subject: |
reboot and halt commands for the PPC |
Date: |
Fri, 28 Jan 2005 20:09:45 +0000 |
User-agent: |
Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) |
Hi,
Here is a patch that adds the reboot and halt commands for the PPC.
In order to make it work I have added grub_ieee1275_interpret. It is
used for reset-all for reboot, it is in the specs so it should work.
The shut-down command that is run the same way is more problematic
because I can not find it in the spec. I have added a note to the
help output of this command about this.
If I don't hear anything I will apply this patch on Monday.
Thanks,
Marco
2005-01-28 Marco Gerards <address@hidden>
* boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_interpret): New
function.
* commands/ieee1275/halt.c: New file.
* commands/ieee1275/reboot.c: Likewise.
* commands/ieee1275/suspend.c (grub_cmd_suspend): Use
`__attribute__ ((unused))'. Some GCS related fixed.
(grub_suspend_init) [GRUB_UTIL]: Function removed.
(grub_suspend_fini): Likewise.
* conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Add `reboot.mod'
and `halt.mod'.
(reboot_mod_SOURCES, reboot_mod_CFLAGS, halt_mod_SOURCES)
(halt_mod_CFLAGS): New variables.
* include/grub/powerpc/ieee1275/ieee1275.h
(grub_ieee1275_interpret): New prototype.
Index: boot/powerpc/ieee1275/ieee1275.c
===================================================================
RCS file: /cvsroot/grub/grub2/boot/powerpc/ieee1275/ieee1275.c,v
retrieving revision 1.10
diff -u -p -r1.10 ieee1275.c
--- boot/powerpc/ieee1275/ieee1275.c 21 Jan 2005 02:45:02 -0000 1.10
+++ boot/powerpc/ieee1275/ieee1275.c 28 Jan 2005 19:59:47 -0000
@@ -332,6 +332,25 @@ grub_ieee1275_parent (grub_ieee1275_phan
}
int
+grub_ieee1275_interpret (const char *command, int *catch)
+{
+ struct enter_args {
+ struct grub_ieee1275_common_hdr common;
+ const char *command;
+ int catch;
+ } args;
+
+ INIT_IEEE1275_COMMON (&args.common, "interpret", 1, 1);
+ args.command = command;
+
+ if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
+ return -1;
+ if (catch)
+ *catch = args.catch;
+ return 0;
+}
+
+int
grub_ieee1275_enter (void)
{
struct enter_args {
Index: commands/ieee1275/halt.c
===================================================================
RCS file: commands/ieee1275/halt.c
diff -N commands/ieee1275/halt.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ commands/ieee1275/halt.c 28 Jan 2005 19:59:47 -0000
@@ -0,0 +1,48 @@
+/* halt.c - command to halt the computer. */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2005 Free Software Foundation, Inc.
+ *
+ * GRUB 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
+ * (at your option) 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 GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/misc.h>
+#include <grub/machine/ieee1275.h>
+
+static grub_err_t
+grub_cmd_halt (struct grub_arg_list *state __attribute__ ((unused)),
+ int argc __attribute__ ((unused)),
+ char **args __attribute__ ((unused)))
+{
+ grub_ieee1275_interpret ("shut-down", 0);
+ return 0;
+}
+
+
+GRUB_MOD_INIT
+{
+ (void)mod; /* To stop warning. */
+ grub_register_command ("halt", grub_cmd_halt, GRUB_COMMAND_FLAG_BOTH,
+ "halt", "halts the computer. This command does not"
+ " work on every firmware.", 0);
+}
+
+GRUB_MOD_FINI
+{
+ grub_unregister_command ("halt");
+}
+
Index: commands/ieee1275/reboot.c
===================================================================
RCS file: commands/ieee1275/reboot.c
diff -N commands/ieee1275/reboot.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ commands/ieee1275/reboot.c 28 Jan 2005 19:59:47 -0000
@@ -0,0 +1,46 @@
+/* reboot.c - command to reboot the computer. */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2005 Free Software Foundation, Inc.
+ *
+ * GRUB 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
+ * (at your option) 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 GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/misc.h>
+#include <grub/machine/ieee1275.h>
+
+static grub_err_t
+grub_cmd_reboot (struct grub_arg_list *state __attribute__ ((unused)),
+ int argc __attribute__ ((unused)),
+ char **args __attribute__ ((unused)))
+{
+ grub_ieee1275_interpret ("reset-all", 0);
+ return 0;
+}
+
+
+GRUB_MOD_INIT
+{
+ (void)mod; /* To stop warning. */
+ grub_register_command ("reboot", grub_cmd_reboot, GRUB_COMMAND_FLAG_BOTH,
+ "reboot", "Reboot the computer", 0);
+}
+
+GRUB_MOD_FINI
+{
+ grub_unregister_command ("reboot");
+}
Index: commands/ieee1275/suspend.c
===================================================================
RCS file: /cvsroot/grub/grub2/commands/ieee1275/suspend.c,v
retrieving revision 1.1
diff -u -p -r1.1 suspend.c
--- commands/ieee1275/suspend.c 21 Jan 2005 02:45:02 -0000 1.1
+++ commands/ieee1275/suspend.c 28 Jan 2005 19:59:47 -0000
@@ -24,32 +24,16 @@
#include <grub/machine/ieee1275.h>
static grub_err_t
-grub_cmd_suspend (struct grub_arg_list *state, int argc, char **args)
+grub_cmd_suspend (struct grub_arg_list *state __attribute__ ((unused)),
+ int argc __attribute__ ((unused)),
+ char **args __attribute__ ((unused)))
{
- (void)state;
- (void)argc;
- (void)args;
-
- grub_printf("Run 'go' to resume GRUB.\n");
- grub_ieee1275_enter();
+ grub_printf ("Run 'go' to resume GRUB.\n");
+ grub_ieee1275_enter ();
return 0;
}
-#ifdef GRUB_UTIL
-void
-grub_suspend_init (void)
-{
- grub_register_command ("suspend", grub_cmd_suspend, GRUB_COMMAND_FLAG_BOTH,
- "suspend", "Return to Open Firmware prompt", 0);
-}
-
-void
-grub_suspend_fini (void)
-{
- grub_unregister_command ("suspend");
-}
-#else /* ! GRUB_UTIL */
GRUB_MOD_INIT
{
(void)mod; /* To stop warning. */
@@ -61,4 +45,3 @@ GRUB_MOD_FINI
{
grub_unregister_command ("suspend");
}
-#endif /* ! GRUB_UTIL */
Index: conf/powerpc-ieee1275.rmk
===================================================================
RCS file: /cvsroot/grub/grub2/conf/powerpc-ieee1275.rmk,v
retrieving revision 1.21
diff -u -p -r1.21 powerpc-ieee1275.rmk
--- conf/powerpc-ieee1275.rmk 21 Jan 2005 21:32:03 -0000 1.21
+++ conf/powerpc-ieee1275.rmk 28 Jan 2005 19:59:48 -0000
@@ -65,7 +65,7 @@ genmoddep_SOURCES = util/genmoddep.c
pkgdata_MODULES = _linux.mod linux.mod fat.mod ufs.mod ext2.mod minix.mod \
hfs.mod jfs.mod normal.mod hello.mod font.mod \
boot.mod cmp.mod cat.mod terminal.mod fshelp.mod amiga.mod apple.mod \
- pc.mod suspend.mod loopback.mod
+ pc.mod suspend.mod loopback.mod reboot.mod halt.mod
# For fshelp.mod.
fshelp_mod_SOURCES = fs/fshelp.c
@@ -160,3 +160,11 @@ loopback_mod_CFLAGS = $(COMMON_CFLAGS)
# For suspend.mod
suspend_mod_SOURCES = commands/ieee1275/suspend.c
suspend_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For reboot.mod
+reboot_mod_SOURCES = commands/ieee1275/reboot.c
+reboot_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For halt.mod
+halt_mod_SOURCES = commands/ieee1275/halt.c
+halt_mod_CFLAGS = $(COMMON_CFLAGS)
Index: include/grub/powerpc/ieee1275/ieee1275.h
===================================================================
RCS file: /cvsroot/grub/grub2/include/grub/powerpc/ieee1275/ieee1275.h,v
retrieving revision 1.13
diff -u -p -r1.13 ieee1275.h
--- include/grub/powerpc/ieee1275/ieee1275.h 21 Jan 2005 02:45:03 -0000
1.13
+++ include/grub/powerpc/ieee1275/ieee1275.h 28 Jan 2005 19:59:48 -0000
@@ -106,6 +106,7 @@ int EXPORT_FUNC(grub_ieee1275_child) (gr
grub_ieee1275_phandle_t *result);
int EXPORT_FUNC(grub_ieee1275_parent) (grub_ieee1275_phandle_t node,
grub_ieee1275_phandle_t *result);
+int EXPORT_FUNC(grub_ieee1275_interpret) (const char *command, int *catch);
int EXPORT_FUNC(grub_ieee1275_enter) (void);
int EXPORT_FUNC(grub_ieee1275_exit) (void);
int EXPORT_FUNC(grub_ieee1275_open) (char *node,
- reboot and halt commands for the PPC,
Marco Gerards <=