grub-devel
[Top][All Lists]
Advanced

[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,





reply via email to

[Prev in Thread] Current Thread [Next in Thread]