+2008-02-12 Alexandre Boeglin <alex@boeglin.org>
+
+ * 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 <rmh@aybabtu.com>
* util/getroot.c (grub_guess_root_device): Inspect /dev/evms before
/* 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
#include <grub/normal.h>
#include <grub/dl.h>
-#include <grub/misc.h>
+#include <grub/machine/machine.h>
+
+#if defined(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)),
}
\f
-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,
" work on all firmware.", 0);
}
-GRUB_MOD_FINI(ieee1275_halt)
+GRUB_MOD_FINI(halt)
{
grub_unregister_command ("halt");
}
+++ /dev/null
-/* 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;
-}
-
-\f
-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");
-}
/* 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
#include <grub/normal.h>
#include <grub/dl.h>
-#include <grub/arg.h>
+#include <grub/machine/machine.h>
+
+#if defined(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;
}
-
\f
GRUB_MOD_INIT(reboot)
{
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 \
\
# 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
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
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 \
\
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)
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 \
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)
/* 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
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);
/* 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
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)
{