Le mar 05 fév 2008 à 23:10:23 +0100, Robert Millan a écrit :
> On Tue, Feb 05, 2008 at 10:39:29PM +0100, Alexandre Boeglin wrote:
> > Le mer 23 jan 2008 à 12:43:31 +0100, Robert Millan a écrit :
> > > commands/ieee1275/halt.c looks like the same thing to me.  Perhaps it'd 
> > > make
> > > more sense to move that to commands/halt.c and use it as the "generic" 
> > > version
> > > of halt command?
> > 
> > Ok, is there any objection ?
> 
> Please post a patch first;  it'd be preferred if someone (maybe me!) tests it
> on ieee1275 to make sure it didn't break anything.

Here is the Changelog, patch is attached.

* conf/i386-efi.rmk (grub_emu_SOURCES): Replace commands/i386/pc/halt.c and
  reboot.c by commands/halt.c and reboot.c.
  (grub_install_SOURCES): Add halt.mod and reboot.mod.
  (halt_mod_SOURCES): New variable.
  (halt_mod_CFLAGS): Likewise.
  (halt_mod_LDFLAGS): Likewise.
  (reboot_mod_SOURCES): Likewise.
  (reboot_mod_CFLAGS): Likewise.
  (reboot_mod_LDFLAGS): Likewise.

* conf/i386-ieee1275.rmk (grub_emu_SOURCES): Replace commands/ieee1275/halt.c
  and reboot.c by commands/halt.c and reboot.c.
  (halt_mod_SOURCES): Likewise.
  (reboot_mod_SOURCES): Likewise.

* conf/i386-pc.rmk (grub_emu_SOURCES): Replace commands/i386/pc/reboot.c by
  commands/reboot.c.
  (reboot_mod_SOURCES): Likewise.

* commands/i386/pc/reboot.c: merge this file ...

* commands/ieee1275/reboot.c: ... and this file ...

* commands/reboot.c: ... to this file.
  Add some precompiler directive to include the correct header for each
  machine.

* commands/ieee1275/halt.c: move this file ...

* commands/halt.c: ... to here.
  Add some precompiler directive to include the correct header for each
  machine.

* include/grub/efi/efi.h (grub_reboot): New function declaration.
  (grub_halt): Likewise.

* kern/efi/efi.c (grub_reboot): New function.
  (grub_halt): Likewise.

diff -ruNap -x CVS -x '*.mk' grub2_commit/conf/i386-efi.rmk grub2_clean/conf/i386-efi.rmk
--- grub2_commit/conf/i386-efi.rmk	2008-02-01 16:45:16.000000000 +0100
+++ grub2_clean/conf/i386-efi.rmk	2008-02-10 17:13:45.178021500 +0100
@@ -37,7 +37,7 @@ grub_emu_SOURCES = commands/boot.c comma
 	commands/configfile.c commands/help.c				\
 	commands/terminal.c commands/ls.c commands/test.c 		\
 	commands/search.c commands/hexdump.c				\
-	commands/i386/pc/halt.c commands/i386/pc/reboot.c		\
+	commands/halt.c commands/reboot.c		\
 	commands/i386/cpuid.c						\
 	disk/loopback.c							\
 	\
@@ -72,7 +72,7 @@ grub_install_SOURCES = util/i386/efi/gru
 
 # Modules.
 pkglib_MODULES = kernel.mod normal.mod _chain.mod chain.mod \
-	_linux.mod linux.mod cpuid.mod
+	_linux.mod linux.mod cpuid.mod halt.mod reboot.mod
 
 # For kernel.mod.
 kernel_mod_EXPORTS = no
@@ -135,4 +135,14 @@ cpuid_mod_SOURCES = commands/i386/cpuid.
 cpuid_mod_CFLAGS = $(COMMON_CFLAGS)
 cpuid_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
+# For halt.mod.
+halt_mod_SOURCES = commands/halt.c
+halt_mod_CFLAGS = $(COMMON_CFLAGS)
+halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+# For reboot.mod.
+reboot_mod_SOURCES = commands/reboot.c
+reboot_mod_CFLAGS = $(COMMON_CFLAGS)
+reboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
 include $(srcdir)/conf/common.mk
diff -ruNap -x CVS -x '*.mk' grub2_commit/conf/i386-ieee1275.rmk grub2_clean/conf/i386-ieee1275.rmk
--- grub2_commit/conf/i386-ieee1275.rmk	2008-02-01 16:45:16.000000000 +0100
+++ grub2_clean/conf/i386-ieee1275.rmk	2008-02-10 17:13:26.908879750 +0100
@@ -62,7 +62,7 @@ grub_emu_SOURCES = commands/boot.c comma
 	commands/configfile.c commands/echo.c commands/help.c		\
 	commands/terminal.c commands/ls.c commands/test.c 		\
 	commands/search.c commands/blocklist.c commands/hexdump.c	\
-	commands/ieee1275/halt.c commands/ieee1275/reboot.c		\
+	commands/halt.c commands/reboot.c		\
 	commands/i386/cpuid.c						\
 	disk/host.c disk/loopback.c	disk/raid.c disk/lvm.c		\
 	\
@@ -122,12 +122,12 @@ suspend_mod_CFLAGS = $(COMMON_CFLAGS)
 suspend_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
 # For reboot.mod
-reboot_mod_SOURCES = commands/ieee1275/reboot.c
+reboot_mod_SOURCES = commands/reboot.c
 reboot_mod_CFLAGS = $(COMMON_CFLAGS)
 reboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
 # For halt.mod
-halt_mod_SOURCES = commands/ieee1275/halt.c
+halt_mod_SOURCES = commands/halt.c
 halt_mod_CFLAGS = $(COMMON_CFLAGS)
 halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
diff -ruNap -x CVS -x '*.mk' grub2_commit/conf/i386-pc.rmk grub2_clean/conf/i386-pc.rmk
--- grub2_commit/conf/i386-pc.rmk	2008-02-03 09:27:15.000000000 +0100
+++ grub2_clean/conf/i386-pc.rmk	2008-02-10 17:14:05.655301250 +0100
@@ -103,7 +103,7 @@ grub_emu_SOURCES = commands/boot.c comma
 	commands/configfile.c commands/echo.c commands/help.c		\
 	commands/terminal.c commands/ls.c commands/test.c 		\
 	commands/search.c commands/blocklist.c commands/hexdump.c	\
-	commands/i386/pc/halt.c commands/i386/pc/reboot.c		\
+	commands/i386/pc/halt.c commands/reboot.c		\
 	commands/i386/cpuid.c						\
 	disk/host.c disk/loopback.c	disk/raid.c disk/lvm.c		\
 	fs/fshelp.c 	\
@@ -185,7 +185,7 @@ normal_mod_ASFLAGS = $(COMMON_ASFLAGS)
 normal_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
 # For reboot.mod.
-reboot_mod_SOURCES = commands/i386/pc/reboot.c
+reboot_mod_SOURCES = commands/reboot.c
 reboot_mod_CFLAGS = $(COMMON_CFLAGS)
 reboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
diff -ruNap -x CVS grub2_commit/commands/halt.c grub2_clean/commands/halt.c
--- grub2_commit/commands/halt.c	1970-01-01 01:00:00.000000000 +0100
+++ grub2_clean/commands/halt.c	2008-02-10 17:07:47.847689750 +0100
@@ -0,0 +1,51 @@
+/* halt.c - command to halt the computer.  */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2005,2007  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 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/machine/machine.h>
+
+#ifdef GRUB_MACHINE_IEEE1275
+#include <grub/machine/kernel.h>
+#elif defined GRUB_MACHINE_EFI
+#include <grub/efi/efi.h>
+#endif
+
+static grub_err_t
+grub_cmd_halt (struct grub_arg_list *state __attribute__ ((unused)),
+	       int argc __attribute__ ((unused)),
+	       char **args __attribute__ ((unused)))
+{
+  grub_halt ();
+  return 0;
+}
+
+
+GRUB_MOD_INIT(halt)
+{
+  (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 all firmware.", 0);
+}
+
+GRUB_MOD_FINI(halt)
+{
+  grub_unregister_command ("halt");
+}
diff -ruNap -x CVS grub2_commit/commands/i386/pc/reboot.c grub2_clean/commands/i386/pc/reboot.c
--- grub2_commit/commands/i386/pc/reboot.c	2007-07-22 01:32:19.000000000 +0200
+++ grub2_clean/commands/i386/pc/reboot.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,47 +0,0 @@
-/* reboot.c - command to reboot the computer.  */
-/*
- *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2005,2007  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 3 of the License, or
- *  (at your option) any later version.
- *
- *  GRUB 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include <grub/normal.h>
-#include <grub/dl.h>
-#include <grub/arg.h>
-#include <grub/machine/init.h>
-
-static grub_err_t
-grub_cmd_reboot (struct grub_arg_list *state __attribute__ ((unused)),
-		 int argc __attribute__ ((unused)),
-		 char **args __attribute__ ((unused)))
-
-{
-  grub_reboot ();
-  return 0;
-}
-
-
-
-GRUB_MOD_INIT(reboot)
-{
-  (void)mod;			/* To stop warning. */
-  grub_register_command ("reboot", grub_cmd_reboot, GRUB_COMMAND_FLAG_BOTH,
-			 "reboot", "Reboot the computer", 0);
-}
-
-GRUB_MOD_FINI(reboot)
-{
-  grub_unregister_command ("reboot");
-}
diff -ruNap -x CVS grub2_commit/commands/ieee1275/halt.c grub2_clean/commands/ieee1275/halt.c
--- grub2_commit/commands/ieee1275/halt.c	2007-07-22 01:32:19.000000000 +0200
+++ grub2_clean/commands/ieee1275/halt.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,46 +0,0 @@
-/* halt.c - command to halt the computer.  */
-/*
- *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2005,2007  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 3 of the License, or
- *  (at your option) any later version.
- *
- *  GRUB 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include <grub/normal.h>
-#include <grub/dl.h>
-#include <grub/misc.h>
-#include <grub/machine/kernel.h>
-
-static grub_err_t
-grub_cmd_halt (struct grub_arg_list *state __attribute__ ((unused)),
-	       int argc __attribute__ ((unused)),
-	       char **args __attribute__ ((unused)))
-{
-  grub_halt ();
-  return 0;
-}
-
-
-GRUB_MOD_INIT(ieee1275_halt)
-{
-  (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 all firmware.", 0);
-}
-
-GRUB_MOD_FINI(ieee1275_halt)
-{
-  grub_unregister_command ("halt");
-}
diff -ruNap -x CVS grub2_commit/commands/ieee1275/reboot.c grub2_clean/commands/ieee1275/reboot.c
--- grub2_commit/commands/ieee1275/reboot.c	2007-07-22 01:32:20.000000000 +0200
+++ grub2_clean/commands/ieee1275/reboot.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,45 +0,0 @@
-/* reboot.c - command to reboot the computer.  */
-/*
- *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2005,2007  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 3 of the License, or
- *  (at your option) any later version.
- *
- *  GRUB 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include <grub/normal.h>
-#include <grub/dl.h>
-#include <grub/misc.h>
-#include <grub/machine/kernel.h>
-
-static grub_err_t
-grub_cmd_reboot (struct grub_arg_list *state __attribute__ ((unused)),
-		 int argc __attribute__ ((unused)),
-		 char **args __attribute__ ((unused)))
-{
-  grub_reboot ();
-  return 0;
-}
-
-
-GRUB_MOD_INIT(ieee1275_reboot)
-{
-  (void)mod;			/* To stop warning. */
-  grub_register_command ("reboot", grub_cmd_reboot, GRUB_COMMAND_FLAG_BOTH,
-			 "reboot", "Reboot the computer", 0);
-}
-
-GRUB_MOD_FINI(ieee1275_reboot)
-{
-  grub_unregister_command ("reboot");
-}
diff -ruNap -x CVS grub2_commit/commands/reboot.c grub2_clean/commands/reboot.c
--- grub2_commit/commands/reboot.c	1970-01-01 01:00:00.000000000 +0100
+++ grub2_clean/commands/reboot.c	2008-02-10 17:04:14.486355500 +0100
@@ -0,0 +1,53 @@
+/* reboot.c - command to reboot the computer.  */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2005,2007  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 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/normal.h>
+#include <grub/dl.h>
+#include <grub/machine/machine.h>
+
+#ifdef GRUB_MACHINE_IEEE1275
+#include <grub/machine/kernel.h>
+#elif defined GRUB_MACHINE_EFI
+#include <grub/efi/efi.h>
+#elif defined GRUB_MACHINE_PCBIOS
+#include <grub/machine/init.h>
+#endif
+
+
+static grub_err_t
+grub_cmd_reboot (struct grub_arg_list *state __attribute__ ((unused)),
+		 int argc __attribute__ ((unused)),
+		 char **args __attribute__ ((unused)))
+{
+  grub_reboot ();
+  return 0;
+}
+
+
+GRUB_MOD_INIT(reboot)
+{
+  (void)mod;			/* To stop warning. */
+  grub_register_command ("reboot", grub_cmd_reboot, GRUB_COMMAND_FLAG_BOTH,
+			 "reboot", "Reboot the computer", 0);
+}
+
+GRUB_MOD_FINI(reboot)
+{
+  grub_unregister_command ("reboot");
+}
diff -ruNap -x CVS grub2_commit/kern/efi/efi.c grub2_clean/kern/efi/efi.c
--- grub2_commit/kern/efi/efi.c	2007-07-22 01:32:26.000000000 +0200
+++ grub2_clean/kern/efi/efi.c	2008-02-10 16:16:49.908580500 +0100
@@ -162,6 +162,22 @@ grub_exit (void)
 					      0, 0);
 }
 
+void
+grub_reboot (void)
+{
+  grub_efi_fini ();
+  grub_efi_system_table->runtime_services->
+    reset_system (GRUB_EFI_RESET_COLD, GRUB_EFI_SUCCESS, 0, NULL);
+}
+
+void
+grub_halt (void)
+{
+  grub_efi_fini ();
+  grub_efi_system_table->runtime_services->
+    reset_system (GRUB_EFI_RESET_SHUTDOWN, GRUB_EFI_SUCCESS, 0, NULL);
+}
+
 int
 grub_efi_exit_boot_services (grub_efi_uintn_t map_key)
 {
diff -ruNap -x CVS grub2_commit/include/grub/efi/efi.h grub2_clean/include/grub/efi/efi.h
--- grub2_commit/include/grub/efi/efi.h	2007-07-22 01:32:23.000000000 +0200
+++ grub2_clean/include/grub/efi/efi.h	2008-02-10 16:16:49.884579000 +0100
@@ -54,6 +54,8 @@ char *EXPORT_FUNC(grub_efi_get_filename)
 grub_efi_device_path_t *
 EXPORT_FUNC(grub_efi_get_device_path) (grub_efi_handle_t handle);
 int EXPORT_FUNC(grub_efi_exit_boot_services) (grub_efi_uintn_t map_key);
+void EXPORT_FUNC (grub_reboot) (void);
+void EXPORT_FUNC (grub_halt) (void);
 
 void grub_efi_mm_init (void);
 void grub_efi_mm_fini (void);
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to