From a5ce3a4a04078826a8847c2821538adf486ee54c Mon Sep 17 00:00:00 2001 From: hollisb Date: Sat, 26 Mar 2005 17:34:50 +0000 Subject: [PATCH] 2005-03-26 Hollis Blanchard * commands/ieee1275/halt.c (grub_cmd_halt): Call grub_halt instead of grub_ieee1275_interpret. (grub_halt_init): New function. (grub_halt_fini): Likewise. (GRUB_MOD_INIT): Correct message grammar. * commands/ieee1275/reboot.c (grub_cmd_reboot): Call grub_reboot instead of grub_ieee1275_interpret. (grub_reboot_init): New function. (grub_reboot_fini): Likewise. * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Replace commands/i386/pc/halt.c, commands/i386/pc/reboot.c, and util/i386/pc/misc.c with commands/ieee1275/halt.c, commands/ieee1275/reboot.c, and util/powerpc/ieee1275/misc.c. * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_fini): New function. * include/grub/powerpc/ieee1275/console.h (grub_console_fini): Add prototype. * include/grub/powerpc/ieee1275/ieee1275.h (grub_reboot): Add prototype. (grub_halt): Likewise. * include/grub/powerpc/ieee1275/init.h: Remove inaccurate comment. (cmain): Remove __attribute__((unused)). * kern/powerpc/ieee1275/init.c (grub_heap_start): New variable. (grub_heap_len): Likewise. (grub_machine_fini): New function. * kern/powerpc/ieee1275/openfw.c (grub_reboot): New function. (grub_halt): Likewise. * term/powerpc/ieee1275/ofconsole.c (grub_console_fini): New function. * util/powerpc/ieee1275/misc.c: New file. --- ChangeLog | 33 +++++++++++++++++++ commands/ieee1275/halt.c | 21 +++++++++++-- commands/ieee1275/reboot.c | 17 +++++++++- conf/powerpc-ieee1275.mk | 40 ++++++++++++------------ conf/powerpc-ieee1275.rmk | 4 +-- disk/powerpc/ieee1275/ofdisk.c | 6 ++++ include/grub/powerpc/ieee1275/console.h | 3 ++ include/grub/powerpc/ieee1275/ieee1275.h | 2 ++ include/grub/powerpc/ieee1275/init.h | 3 +- kern/powerpc/ieee1275/init.c | 30 ++++++++++++------ kern/powerpc/ieee1275/openfw.c | 12 +++++++ term/powerpc/ieee1275/ofconsole.c | 6 ++++ util/powerpc/ieee1275/misc.c | 34 ++++++++++++++++++++ 13 files changed, 174 insertions(+), 37 deletions(-) create mode 100644 util/powerpc/ieee1275/misc.c diff --git a/ChangeLog b/ChangeLog index 32b610efa..882b020f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,36 @@ +2005-03-26 Hollis Blanchard + + * commands/ieee1275/halt.c (grub_cmd_halt): Call grub_halt + instead of grub_ieee1275_interpret. + (grub_halt_init): New function. + (grub_halt_fini): Likewise. + (GRUB_MOD_INIT): Correct message grammar. + * commands/ieee1275/reboot.c (grub_cmd_reboot): Call grub_reboot + instead of grub_ieee1275_interpret. + (grub_reboot_init): New function. + (grub_reboot_fini): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Replace + commands/i386/pc/halt.c, commands/i386/pc/reboot.c, and + util/i386/pc/misc.c with commands/ieee1275/halt.c, + commands/ieee1275/reboot.c, and util/powerpc/ieee1275/misc.c. + * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_fini): New + function. + * include/grub/powerpc/ieee1275/console.h (grub_console_fini): + Add prototype. + * include/grub/powerpc/ieee1275/ieee1275.h (grub_reboot): Add + prototype. + (grub_halt): Likewise. + * include/grub/powerpc/ieee1275/init.h: Remove inaccurate comment. + (cmain): Remove __attribute__((unused)). + * kern/powerpc/ieee1275/init.c (grub_heap_start): New variable. + (grub_heap_len): Likewise. + (grub_machine_fini): New function. + * kern/powerpc/ieee1275/openfw.c (grub_reboot): New function. + (grub_halt): Likewise. + * term/powerpc/ieee1275/ofconsole.c (grub_console_fini): New + function. + * util/powerpc/ieee1275/misc.c: New file. + 2005-03-19 Yoshinori K. Okuji * DISTLIST: New file. diff --git a/commands/ieee1275/halt.c b/commands/ieee1275/halt.c index 58edd09c6..b27b60344 100644 --- a/commands/ieee1275/halt.c +++ b/commands/ieee1275/halt.c @@ -28,21 +28,36 @@ grub_cmd_halt (struct grub_arg_list *state __attribute__ ((unused)), int argc __attribute__ ((unused)), char **args __attribute__ ((unused))) { - grub_ieee1275_interpret ("shut-down", 0); + grub_halt (); return 0; } +#ifdef GRUB_UTIL +void +grub_halt_init (void) +{ + grub_register_command ("halt", grub_cmd_halt, GRUB_COMMAND_FLAG_BOTH, + "halt", "halts the computer. This command does not" + " work on all firmware.", 0); +} + +void +grub_halt_fini (void) +{ + grub_unregister_command ("halt"); +} +#else /* ! GRUB_UTIL */ GRUB_MOD_INIT { (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 every firmware.", 0); + " work on all firmware.", 0); } GRUB_MOD_FINI { grub_unregister_command ("halt"); } - +#endif diff --git a/commands/ieee1275/reboot.c b/commands/ieee1275/reboot.c index 52c8436ef..1b897aa1c 100644 --- a/commands/ieee1275/reboot.c +++ b/commands/ieee1275/reboot.c @@ -28,11 +28,25 @@ grub_cmd_reboot (struct grub_arg_list *state __attribute__ ((unused)), int argc __attribute__ ((unused)), char **args __attribute__ ((unused))) { - grub_ieee1275_interpret ("reset-all", 0); + grub_reboot (); return 0; } +#ifdef GRUB_UTIL +void +grub_reboot_init (void) +{ + grub_register_command ("reboot", grub_cmd_reboot, GRUB_COMMAND_FLAG_BOTH, + "reboot", "Reboot the computer", 0); +} + +void +grub_reboot_fini (void) +{ + grub_unregister_command ("reboot"); +} +#else /* ! GRUB_UTIL */ GRUB_MOD_INIT { (void)mod; /* To stop warning. */ @@ -44,3 +58,4 @@ GRUB_MOD_FINI { grub_unregister_command ("reboot"); } +#endif diff --git a/conf/powerpc-ieee1275.mk b/conf/powerpc-ieee1275.mk index 8ed4a4206..34fccec72 100644 --- a/conf/powerpc-ieee1275.mk +++ b/conf/powerpc-ieee1275.mk @@ -65,7 +65,7 @@ grub_mkimage-util_resolve.d: util/resolve.c grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ commands/configfile.c commands/default.c commands/help.c \ commands/terminal.c commands/ls.c commands/timeout.c \ - commands/i386/pc/halt.c commands/i386/pc/reboot.c \ + commands/ieee1275/halt.c commands/ieee1275/reboot.c \ disk/loopback.c \ fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c fs/jfs.c \ fs/minix.c fs/ufs.c \ @@ -77,11 +77,11 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ util/console.c util/grub-emu.c util/misc.c \ util/i386/pc/biosdisk.c util/i386/pc/getroot.c \ - util/i386/pc/misc.c -CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o -MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_i386_pc_halt.d grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_i386_pc_misc.d + util/powerpc/ieee1275/misc.c +CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o +MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d -grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o +grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS) grub_emu-commands_boot.o: commands/boot.c @@ -156,21 +156,21 @@ grub_emu-commands_timeout.d: commands/timeout.c -include grub_emu-commands_timeout.d -grub_emu-commands_i386_pc_halt.o: commands/i386/pc/halt.c - $(BUILD_CC) -Icommands/i386/pc -I$(srcdir)/commands/i386/pc $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< +grub_emu-commands_ieee1275_halt.o: commands/ieee1275/halt.c + $(BUILD_CC) -Icommands/ieee1275 -I$(srcdir)/commands/ieee1275 $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< -grub_emu-commands_i386_pc_halt.d: commands/i386/pc/halt.c - set -e; $(BUILD_CC) -Icommands/i386/pc -I$(srcdir)/commands/i386/pc $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,halt\.o[ :]*,grub_emu-commands_i386_pc_halt.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ +grub_emu-commands_ieee1275_halt.d: commands/ieee1275/halt.c + set -e; $(BUILD_CC) -Icommands/ieee1275 -I$(srcdir)/commands/ieee1275 $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,halt\.o[ :]*,grub_emu-commands_ieee1275_halt.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ --include grub_emu-commands_i386_pc_halt.d +-include grub_emu-commands_ieee1275_halt.d -grub_emu-commands_i386_pc_reboot.o: commands/i386/pc/reboot.c - $(BUILD_CC) -Icommands/i386/pc -I$(srcdir)/commands/i386/pc $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< +grub_emu-commands_ieee1275_reboot.o: commands/ieee1275/reboot.c + $(BUILD_CC) -Icommands/ieee1275 -I$(srcdir)/commands/ieee1275 $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< -grub_emu-commands_i386_pc_reboot.d: commands/i386/pc/reboot.c - set -e; $(BUILD_CC) -Icommands/i386/pc -I$(srcdir)/commands/i386/pc $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,reboot\.o[ :]*,grub_emu-commands_i386_pc_reboot.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ +grub_emu-commands_ieee1275_reboot.d: commands/ieee1275/reboot.c + set -e; $(BUILD_CC) -Icommands/ieee1275 -I$(srcdir)/commands/ieee1275 $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,reboot\.o[ :]*,grub_emu-commands_ieee1275_reboot.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ --include grub_emu-commands_i386_pc_reboot.d +-include grub_emu-commands_ieee1275_reboot.d grub_emu-disk_loopback.o: disk/loopback.c $(BUILD_CC) -Idisk -I$(srcdir)/disk $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< @@ -476,13 +476,13 @@ grub_emu-util_i386_pc_getroot.d: util/i386/pc/getroot.c -include grub_emu-util_i386_pc_getroot.d -grub_emu-util_i386_pc_misc.o: util/i386/pc/misc.c - $(BUILD_CC) -Iutil/i386/pc -I$(srcdir)/util/i386/pc $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< +grub_emu-util_powerpc_ieee1275_misc.o: util/powerpc/ieee1275/misc.c + $(BUILD_CC) -Iutil/powerpc/ieee1275 -I$(srcdir)/util/powerpc/ieee1275 $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< -grub_emu-util_i386_pc_misc.d: util/i386/pc/misc.c - set -e; $(BUILD_CC) -Iutil/i386/pc -I$(srcdir)/util/i386/pc $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,misc\.o[ :]*,grub_emu-util_i386_pc_misc.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ +grub_emu-util_powerpc_ieee1275_misc.d: util/powerpc/ieee1275/misc.c + set -e; $(BUILD_CC) -Iutil/powerpc/ieee1275 -I$(srcdir)/util/powerpc/ieee1275 $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,misc\.o[ :]*,grub_emu-util_powerpc_ieee1275_misc.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ --include grub_emu-util_i386_pc_misc.d +-include grub_emu-util_powerpc_ieee1275_misc.d grub_emu_LDFLAGS = -lncurses diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk index 5d68b7f6e..5f5077594 100644 --- a/conf/powerpc-ieee1275.rmk +++ b/conf/powerpc-ieee1275.rmk @@ -35,7 +35,7 @@ grub_mkimage_SOURCES = util/powerpc/ieee1275/grub-mkimage.c util/misc.c \ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ commands/configfile.c commands/default.c commands/help.c \ commands/terminal.c commands/ls.c commands/timeout.c \ - commands/i386/pc/halt.c commands/i386/pc/reboot.c \ + commands/ieee1275/halt.c commands/ieee1275/reboot.c \ disk/loopback.c \ fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c fs/jfs.c \ fs/minix.c fs/ufs.c \ @@ -47,7 +47,7 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ util/console.c util/grub-emu.c util/misc.c \ util/i386/pc/biosdisk.c util/i386/pc/getroot.c \ - util/i386/pc/misc.c + util/powerpc/ieee1275/misc.c grub_emu_LDFLAGS = -lncurses diff --git a/disk/powerpc/ieee1275/ofdisk.c b/disk/powerpc/ieee1275/ofdisk.c index 344f03daa..8914b3c6d 100644 --- a/disk/powerpc/ieee1275/ofdisk.c +++ b/disk/powerpc/ieee1275/ofdisk.c @@ -164,3 +164,9 @@ grub_ofdisk_init (void) { grub_disk_dev_register (&grub_ofdisk_dev); } + +void +grub_ofdisk_fini (void) +{ + grub_disk_dev_unregister (&grub_ofdisk_dev); +} diff --git a/include/grub/powerpc/ieee1275/console.h b/include/grub/powerpc/ieee1275/console.h index e15420cf6..d9256412d 100644 --- a/include/grub/powerpc/ieee1275/console.h +++ b/include/grub/powerpc/ieee1275/console.h @@ -51,6 +51,9 @@ void grub_console_setcursor (int on); /* Initialize the console system. */ void grub_console_init (void); +/* Finish the console system. */ +void grub_console_fini (void); + #endif #endif /* ! GRUB_CONSOLE_MACHINE_HEADER */ diff --git a/include/grub/powerpc/ieee1275/ieee1275.h b/include/grub/powerpc/ieee1275/ieee1275.h index 8928ae6db..fc9ac3140 100644 --- a/include/grub/powerpc/ieee1275/ieee1275.h +++ b/include/grub/powerpc/ieee1275/ieee1275.h @@ -131,6 +131,8 @@ grub_err_t EXPORT_FUNC(grub_children_iterate) (char *devpath, int EXPORT_FUNC(grub_claimmap) (grub_addr_t addr, grub_size_t size); void EXPORT_FUNC(abort) (void); +void EXPORT_FUNC (grub_reboot) (void); +void EXPORT_FUNC (grub_halt) (void); #endif /* ! GRUB_IEEE1275_MACHINE_HEADER */ diff --git a/include/grub/powerpc/ieee1275/init.h b/include/grub/powerpc/ieee1275/init.h index eb54898a5..4c87a8585 100644 --- a/include/grub/powerpc/ieee1275/init.h +++ b/include/grub/powerpc/ieee1275/init.h @@ -1,4 +1,3 @@ -/* ieee1275.h - Access the Open Firmware client interface. */ /* * GRUB -- GRand Unified Bootloader * Copyright (C) 2004 Free Software Foundation, Inc. @@ -21,7 +20,7 @@ #ifndef GRUB_INIT_MACHINE_HEADER #define GRUB_INIT_MACHINE_HEADER 1 -void cmain (uint32_t r3, uint32_t r4 __attribute__((unused)), uint32_t r5); +void cmain (uint32_t r3, uint32_t r4, uint32_t r5); void grub_ofdisk_init (void); void grub_console_init (void); diff --git a/kern/powerpc/ieee1275/init.c b/kern/powerpc/ieee1275/init.c index 233911362..d9b3a1af0 100644 --- a/kern/powerpc/ieee1275/init.c +++ b/kern/powerpc/ieee1275/init.c @@ -33,6 +33,10 @@ #include #include +/* Apple OF 1.0.5 reserves 0x0 to 0x4000 for the exception handlers. */ +static const grub_addr_t grub_heap_start = 0x4000; +static grub_addr_t grub_heap_len; + void abort (void) { @@ -46,30 +50,38 @@ void grub_machine_init (void) { extern char _start; - grub_addr_t heap_start; - grub_addr_t heap_len; grub_console_init (); - /* Apple OF 1.0.5 reserves 0x4000 bytes for the exception handlers. */ - heap_start = 0x4000; /* Apple OF 3.1.1 reserves an extra 0x1000 bytes below the load address of an ELF file. */ - heap_len = (grub_addr_t) &_start - 0x1000 - heap_start; + grub_heap_len = (grub_addr_t) &_start - 0x1000 - grub_heap_start; - if (grub_ieee1275_claim (heap_start, heap_len, 0, 0)) + if (grub_ieee1275_claim (grub_heap_start, grub_heap_len, 0, 0)) { - grub_printf ("Failed to claim heap at 0x%x, len 0x%x\n", heap_start, - heap_len); + grub_printf ("Failed to claim heap at 0x%x, len 0x%x\n", grub_heap_start, + grub_heap_len); abort (); } - grub_mm_init_region ((void *) heap_start, heap_len); + grub_mm_init_region ((void *) grub_heap_start, grub_heap_len); grub_env_set ("prefix", ""); grub_ofdisk_init (); } +void +grub_machine_fini (void) +{ + grub_loader_unset (); + + grub_ofdisk_fini (); + grub_console_fini (); + + grub_ieee1275_release (grub_heap_start, grub_heap_len); + /* XXX Release memory claimed for Old World firmware. */ +} + void grub_stop (void) { diff --git a/kern/powerpc/ieee1275/openfw.c b/kern/powerpc/ieee1275/openfw.c index 60607c5e8..b1406f3ce 100644 --- a/kern/powerpc/ieee1275/openfw.c +++ b/kern/powerpc/ieee1275/openfw.c @@ -199,3 +199,15 @@ grub_claimmap (grub_addr_t addr, grub_size_t size) return 0; } + +void +grub_reboot (void) +{ + grub_ieee1275_interpret ("reset-all", 0); +} + +void +grub_halt (void) +{ + grub_ieee1275_interpret ("shut-down", 0); +} diff --git a/term/powerpc/ieee1275/ofconsole.c b/term/powerpc/ieee1275/ofconsole.c index 6a76597ef..036504ddc 100644 --- a/term/powerpc/ieee1275/ofconsole.c +++ b/term/powerpc/ieee1275/ofconsole.c @@ -307,3 +307,9 @@ grub_console_init (void) grub_term_register (&grub_ofconsole_term); grub_term_set_current (&grub_ofconsole_term); } + +void +grub_console_fini (void) +{ + grub_term_unregister (&grub_ofconsole_term); +} diff --git a/util/powerpc/ieee1275/misc.c b/util/powerpc/ieee1275/misc.c new file mode 100644 index 000000000..d03de9a3a --- /dev/null +++ b/util/powerpc/ieee1275/misc.c @@ -0,0 +1,34 @@ +/* + * 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 + +void +grub_reboot (void) +{ + longjmp (main_env, 1); +} + +void +grub_halt (void) +{ + grub_reboot (); +}