From 6f1c18bd82beffe0e11235e724e730e513d108e5 Mon Sep 17 00:00:00 2001 From: hollisb Date: Fri, 21 Jan 2005 02:45:03 +0000 Subject: [PATCH] 2005-01-20 Hollis Blanchard * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_enter): New function. * conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Add suspend.mod. (suspend_mod_SOURCES): New variable. (suspend_mod_CFLAGS): Likewise. * include/grub/powerpc/ieee1275/ieee1275.h (grub_ieee1275_enter): New prototype. * commands/ieee1275/suspend.c: New file. --- ChangeLog | 11 ++++ boot/powerpc/ieee1275/ieee1275.c | 14 ++++++ commands/ieee1275/suspend.c | 64 ++++++++++++++++++++++++ conf/powerpc-ieee1275.rmk | 7 ++- include/grub/powerpc/ieee1275/ieee1275.h | 1 + 5 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 commands/ieee1275/suspend.c diff --git a/ChangeLog b/ChangeLog index 7ccefb7b4..8ed3e0667 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2005-01-20 Hollis Blanchard + + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_enter): New + function. + * conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Add suspend.mod. + (suspend_mod_SOURCES): New variable. + (suspend_mod_CFLAGS): Likewise. + * include/grub/powerpc/ieee1275/ieee1275.h (grub_ieee1275_enter): + New prototype. + * commands/ieee1275/suspend.c: New file. + 2005-01-20 Timothy Baldwin * include/grub/dl.h (GRUB_MOD_INIT): Changed `__attribute__ diff --git a/boot/powerpc/ieee1275/ieee1275.c b/boot/powerpc/ieee1275/ieee1275.c index 6ba7727bb..528b83d36 100644 --- a/boot/powerpc/ieee1275/ieee1275.c +++ b/boot/powerpc/ieee1275/ieee1275.c @@ -331,6 +331,20 @@ grub_ieee1275_parent (grub_ieee1275_phandle_t node, return 0; } +int +grub_ieee1275_enter (void) +{ + struct enter_args { + struct grub_ieee1275_common_hdr common; + } args; + + INIT_IEEE1275_COMMON (&args.common, "enter", 0, 0); + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + return 0; +} + int grub_ieee1275_exit (void) { diff --git a/commands/ieee1275/suspend.c b/commands/ieee1275/suspend.c new file mode 100644 index 000000000..d8811afbe --- /dev/null +++ b/commands/ieee1275/suspend.c @@ -0,0 +1,64 @@ +/* suspend.c - command to suspend GRUB and return to Open Firmware */ +/* + * 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 +#include +#include +#include + +static grub_err_t +grub_cmd_suspend (struct grub_arg_list *state, int argc, char **args) +{ + (void)state; + (void)argc; + (void)args; + + 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. */ + grub_register_command ("suspend", grub_cmd_suspend, GRUB_COMMAND_FLAG_BOTH, + "suspend", "Return to Open Firmware prompt", 0); +} + +GRUB_MOD_FINI +{ + grub_unregister_command ("suspend"); +} +#endif /* ! GRUB_UTIL */ diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk index 4732c992f..dfbf798ac 100644 --- a/conf/powerpc-ieee1275.rmk +++ b/conf/powerpc-ieee1275.rmk @@ -64,7 +64,8 @@ genmoddep_SOURCES = util/genmoddep.c # Modules. 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 + boot.mod cmp.mod cat.mod terminal.mod fshelp.mod amiga.mod apple.mod \ + pc.mod suspend.mod # For fshelp.mod. fshelp_mod_SOURCES = fs/fshelp.c @@ -151,3 +152,7 @@ apple_mod_CFLAGS = $(COMMON_CFLAGS) # For pc.mod pc_mod_SOURCES = partmap/pc.c pc_mod_CFLAGS = $(COMMON_CFLAGS) + +# For suspend.mod +suspend_mod_SOURCES = commands/ieee1275/suspend.c +suspend_mod_CFLAGS = $(COMMON_CFLAGS) diff --git a/include/grub/powerpc/ieee1275/ieee1275.h b/include/grub/powerpc/ieee1275/ieee1275.h index 2cacf43c5..b394506d8 100644 --- a/include/grub/powerpc/ieee1275/ieee1275.h +++ b/include/grub/powerpc/ieee1275/ieee1275.h @@ -106,6 +106,7 @@ int EXPORT_FUNC(grub_ieee1275_child) (grub_ieee1275_phandle_t node, 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_enter) (void); int EXPORT_FUNC(grub_ieee1275_exit) (void); int EXPORT_FUNC(grub_ieee1275_open) (char *node, grub_ieee1275_ihandle_t *result);