From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.33) id 1ClXPC-0003p1-4R for mharc-grub-devel@gnu.org; Mon, 03 Jan 2005 13:58:14 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1ClXP9-0003n3-13 for grub-devel@gnu.org; Mon, 03 Jan 2005 13:58:11 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1ClXP6-0003lo-OE for grub-devel@gnu.org; Mon, 03 Jan 2005 13:58:09 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1ClXP5-0003kX-Kp for grub-devel@gnu.org; Mon, 03 Jan 2005 13:58:07 -0500 Received: from [207.217.121.184] (helo=pop-a065c10.pas.sa.earthlink.net) by monty-python.gnu.org with esmtp (Exim 4.34) id 1ClXAC-0000Z0-3J for grub-devel@gnu.org; Mon, 03 Jan 2005 13:42:44 -0500 Received: from user-0vvde4j.cable.mindspring.com ([63.246.184.147] helo=miracle) by pop-a065c10.pas.sa.earthlink.net with esmtp (Exim 3.33 #1) id 1ClXAB-0002YY-00 for grub-devel@gnu.org; Mon, 03 Jan 2005 10:42:43 -0800 Received: from hollis by miracle with local (Exim 3.36 #1 (Debian)) id 1ClWro-0007x4-00 for ; Mon, 03 Jan 2005 12:23:44 -0600 Date: Mon, 3 Jan 2005 12:23:44 -0600 To: grub-devel@gnu.org Message-ID: <20050103182344.GA30549@miracle> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.6+20040907i From: Hollis Blanchard Subject: suspend command patch X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Jan 2005 18:58:12 -0000 Now that module support is within reach, this patch implements the Open Firmware "enter" command, which allows us to get back to the interactive OF prompt after loading a client program (GRUB). As discussed previously, the GRUB command name is "suspend", and the file is in a new commands/ieee1275 directory, as it should work on all Open Firmware architectures. I have successfully tested this on my G3. The briQ seems to have an unfortunate bug: "enter" works, but running "go" to resume GRUB results in GRUB being re-entered from its entry point. I wonder if this bug still affects later Codegen releases (i.e the Pegasos)... -Hollis 2005-01-03 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. Index: boot/powerpc/ieee1275/ieee1275.c =================================================================== RCS file: /cvsroot/grub/grub2/boot/powerpc/ieee1275/ieee1275.c,v retrieving revision 1.8 diff -u -p -r1.8 ieee1275.c --- boot/powerpc/ieee1275/ieee1275.c 29 Oct 2004 02:45:14 -0000 1.8 +++ boot/powerpc/ieee1275/ieee1275.c 3 Jan 2005 18:09:19 -0000 @@ -332,6 +332,20 @@ grub_ieee1275_parent (grub_ieee1275_phan } 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) { struct exit_args { Index: conf/powerpc-ieee1275.rmk =================================================================== RCS file: /cvsroot/grub/grub2/conf/powerpc-ieee1275.rmk,v retrieving revision 1.18 diff -u -p -r1.18 powerpc-ieee1275.rmk --- conf/powerpc-ieee1275.rmk 28 Dec 2004 22:43:37 -0000 1.18 +++ conf/powerpc-ieee1275.rmk 3 Jan 2005 18:09:21 -0000 @@ -60,7 +60,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 @@ -147,3 +148,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) Index: include/grub/powerpc/ieee1275/ieee1275.h =================================================================== RCS file: /cvsroot/grub/grub2/include/grub/powerpc/ieee1275/ieee1275.h,v retrieving revision 1.11 diff -u -p -r1.11 ieee1275.h --- include/grub/powerpc/ieee1275/ieee1275.h 3 Jan 2005 17:44:25 -0000 1.11 +++ include/grub/powerpc/ieee1275/ieee1275.h 3 Jan 2005 18:09:22 -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_enter) (void); int EXPORT_FUNC(grub_ieee1275_exit) (void); int EXPORT_FUNC(grub_ieee1275_open) (char *node, grub_ieee1275_ihandle_t *result); --- /dev/null 2004-12-18 12:15:49.000000000 -0600 +++ commands/ieee1275/suspend.c 2005-01-03 11:48:59.252239312 -0600 @@ -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 */