From ac507d1ba201abe8f35f4cea22ebe882cd0ede6a Mon Sep 17 00:00:00 2001 From: hollisb Date: Mon, 3 Jan 2005 17:44:25 +0000 Subject: [PATCH] 2005-01-03 Hollis Blanchard * boot/powerpc/ieee1275/cmain.c (grub_ieee1275_realmode): New variable. (find_options): New function. (cmain): Call find_options. * include/grub/powerpc/ieee1275/ieee1275.h (grub_ieee1275_realmode): New extern variable. * kern/powerpc/ieee1275/openfw.c (grub_claimmap): Only call grub_map if grub_ieee1275_realmode is false. --- ChangeLog | 11 +++++++++++ boot/powerpc/ieee1275/cmain.c | 16 +++++++++++++++- include/grub/powerpc/ieee1275/ieee1275.h | 3 ++- kern/powerpc/ieee1275/openfw.c | 7 +++++-- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 230814114..adb54baba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2005-01-03 Hollis Blanchard + + * boot/powerpc/ieee1275/cmain.c (grub_ieee1275_realmode): New + variable. + (find_options): New function. + (cmain): Call find_options. + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_ieee1275_realmode): New extern variable. + * kern/powerpc/ieee1275/openfw.c (grub_claimmap): Only call + grub_map if grub_ieee1275_realmode is false. + 2004-12-29 Marco Gerards * normal/cmdline.c (grub_cmdline_get): Redone logic so no empty diff --git a/boot/powerpc/ieee1275/cmain.c b/boot/powerpc/ieee1275/cmain.c index 13c5268d8..b1ce37462 100644 --- a/boot/powerpc/ieee1275/cmain.c +++ b/boot/powerpc/ieee1275/cmain.c @@ -1,7 +1,7 @@ /* cmain.c - Startup code for the PowerPC. */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2003, 2004 Free Software Foundation, Inc. + * Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,8 +37,20 @@ struct module_info intptr_t (*grub_ieee1275_entry_fn) (void *); grub_uint32_t grub_ieee1275_flags; +int grub_ieee1275_realmode; + +static void +find_options (void) +{ + grub_ieee1275_phandle_t options; + + grub_ieee1275_finddevice ("/options", &options); + grub_ieee1275_get_property (options, "real-mode?", &grub_ieee1275_realmode, + sizeof (grub_ieee1275_realmode), 0); +} + /* Setup the argument vector and pass control over to the main function. */ void @@ -72,6 +84,8 @@ cmain (uint32_t r3, uint32_t r4 __attribute__((unused)), uint32_t r5) grub_ieee1275_entry_fn = (intptr_t (*)(void *)) r5; } + find_options (); + /* If any argument was passed to the kernel (us), they are put in the bootargs property of /chosen. The string can be null (just the nul-character), so check that the size diff --git a/include/grub/powerpc/ieee1275/ieee1275.h b/include/grub/powerpc/ieee1275/ieee1275.h index a169261ce..bd69d5823 100644 --- a/include/grub/powerpc/ieee1275/ieee1275.h +++ b/include/grub/powerpc/ieee1275/ieee1275.h @@ -1,7 +1,7 @@ /* ieee1275.h - Access the Open Firmware client interface. */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2003, 2004 Free Software Foundation, Inc. + * Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -66,6 +66,7 @@ typedef intptr_t grub_ieee1275_phandle_t; extern intptr_t (*grub_ieee1275_entry_fn) (void *); extern grub_uint32_t grub_ieee1275_flags; +extern int grub_ieee1275_realmode; /* Old World firmware fails seek when "dev:0" is opened. */ #define GRUB_IEEE1275_NO_PARTITION_0 0x1 diff --git a/kern/powerpc/ieee1275/openfw.c b/kern/powerpc/ieee1275/openfw.c index ca0891ce1..60607c5e8 100644 --- a/kern/powerpc/ieee1275/openfw.c +++ b/kern/powerpc/ieee1275/openfw.c @@ -1,7 +1,7 @@ /* openfw.c -- Open firmware support funtions. */ /* * GRUB -- GRand Unified Bootloader - * Copyright (C) 2003, 2004 Free Software Foundation, Inc. + * Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -189,10 +189,13 @@ grub_claimmap (grub_addr_t addr, grub_size_t size) { if (grub_ieee1275_claim (addr, size, 0, 0)) return -1; - if (grub_map (addr, addr, size, 0x00)) + + if ((! grub_ieee1275_realmode) && grub_map (addr, addr, size, 0x00)) { + grub_printf ("map failed: address 0x%x, size 0x%x\n", addr, size); grub_ieee1275_release (addr, size); return -1; } + return 0; }