From f714229e342b5098fd01881f60158327e85440ad Mon Sep 17 00:00:00 2001 From: boeglin Date: Tue, 12 Feb 2008 23:47:07 +0000 Subject: [PATCH] 2008-02-12 Alexandre Boeglin * 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. --- ChangeLog | 41 ++++++++++++++++++++++++++++++ commands/{ieee1275 => }/halt.c | 13 +++++++--- commands/ieee1275/reboot.c | 45 --------------------------------- commands/{i386/pc => }/reboot.c | 14 +++++++--- conf/i386-efi.rmk | 14 ++++++++-- conf/i386-ieee1275.rmk | 6 ++--- conf/i386-pc.rmk | 4 +-- include/grub/efi/efi.h | 4 ++- kern/efi/efi.c | 18 ++++++++++++- 9 files changed, 97 insertions(+), 62 deletions(-) rename commands/{ieee1275 => }/halt.c (84%) delete mode 100644 commands/ieee1275/reboot.c rename commands/{i386/pc => }/reboot.c (82%) diff --git a/ChangeLog b/ChangeLog index a78bb0961..ede054640 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,44 @@ +2008-02-12 Alexandre Boeglin + + * 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. + 2008-02-12 Robert Millan * util/getroot.c (grub_guess_root_device): Inspect /dev/evms before diff --git a/commands/ieee1275/halt.c b/commands/halt.c similarity index 84% rename from commands/ieee1275/halt.c rename to commands/halt.c index e6ec52c95..65da1ea0a 100644 --- a/commands/ieee1275/halt.c +++ b/commands/halt.c @@ -1,7 +1,7 @@ /* halt.c - command to halt the computer. */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2005,2007 Free Software Foundation, Inc. + * Copyright (C) 2005,2007,2008 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 @@ -19,8 +19,13 @@ #include #include -#include +#include + +#if defined(GRUB_MACHINE_IEEE1275) #include +#elif defined(GRUB_MACHINE_EFI) +#include +#endif static grub_err_t grub_cmd_halt (struct grub_arg_list *state __attribute__ ((unused)), @@ -32,7 +37,7 @@ grub_cmd_halt (struct grub_arg_list *state __attribute__ ((unused)), } -GRUB_MOD_INIT(ieee1275_halt) +GRUB_MOD_INIT(halt) { (void)mod; /* To stop warning. */ grub_register_command ("halt", grub_cmd_halt, GRUB_COMMAND_FLAG_BOTH, @@ -40,7 +45,7 @@ GRUB_MOD_INIT(ieee1275_halt) " work on all firmware.", 0); } -GRUB_MOD_FINI(ieee1275_halt) +GRUB_MOD_FINI(halt) { grub_unregister_command ("halt"); } diff --git a/commands/ieee1275/reboot.c b/commands/ieee1275/reboot.c deleted file mode 100644 index c0a3e9cce..000000000 --- a/commands/ieee1275/reboot.c +++ /dev/null @@ -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 . - */ - -#include -#include -#include -#include - -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 --git a/commands/i386/pc/reboot.c b/commands/reboot.c similarity index 82% rename from commands/i386/pc/reboot.c rename to commands/reboot.c index df691d557..c668b36bd 100644 --- a/commands/i386/pc/reboot.c +++ b/commands/reboot.c @@ -1,7 +1,7 @@ /* reboot.c - command to reboot the computer. */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2005,2007 Free Software Foundation, Inc. + * Copyright (C) 2005,2007,2008 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 @@ -19,20 +19,26 @@ #include #include -#include +#include + +#if defined(GRUB_MACHINE_IEEE1275) +#include +#elif defined(GRUB_MACHINE_EFI) +#include +#elif defined(GRUB_MACHINE_PCBIOS) #include +#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) { diff --git a/conf/i386-efi.rmk b/conf/i386-efi.rmk index 8310e6b93..ffba6128d 100644 --- a/conf/i386-efi.rmk +++ b/conf/i386-efi.rmk @@ -37,7 +37,7 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ 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 \ \ @@ -75,7 +75,7 @@ grub_install_SOURCES = util/i386/efi/grub-install.in # 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 @@ -138,4 +138,14 @@ cpuid_mod_SOURCES = commands/i386/cpuid.c 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 --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk index 98d78c191..01e354879 100644 --- a/conf/i386-ieee1275.rmk +++ b/conf/i386-ieee1275.rmk @@ -62,7 +62,7 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ 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 \ \ @@ -125,12 +125,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 --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 06e9a7e57..a03f721d6 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -106,7 +106,7 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ 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 \ fs/fshelp.c \ @@ -191,7 +191,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 --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h index fbc6be985..8c277c00f 100644 --- a/include/grub/efi/efi.h +++ b/include/grub/efi/efi.h @@ -1,7 +1,7 @@ /* efi.h - declare variables and functions for EFI support */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2006,2007 Free Software Foundation, Inc. + * Copyright (C) 2006,2007,2008 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 @@ -54,6 +54,8 @@ char *EXPORT_FUNC(grub_efi_get_filename) (grub_efi_device_path_t *dp); 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); diff --git a/kern/efi/efi.c b/kern/efi/efi.c index 49128a239..11dac5891 100644 --- a/kern/efi/efi.c +++ b/kern/efi/efi.c @@ -1,7 +1,7 @@ /* efi.c - generic EFI support */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2006,2007 Free Software Foundation, Inc. + * Copyright (C) 2006,2007,2008 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 @@ -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) { -- 2.39.2