2007-07-22 Robert Millan <rmh@aybabtu.com>
* include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): Add GRUB_IEEE1275_FLAG_BROKEN_OUTPUT flag. * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): Set this flag when running on SmartFirmware. * term/ieee1275/ofconsole.c (grub_ofconsole_init): Avoid running "output-device output" command when GRUB_IEEE1275_FLAG_BROKEN_OUTPUT was set. * kern/powerpc/ieee1275/openfw.c (grub_ieee1275_encode_devname): Increase partno when GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS flag is set, rather than decreasing it. * util/i386/pc/grub-setup.c (setup): When embedding is required, but there's not enough space to do it, fail in the same way as when it can't be done because there are no partitions. * util/powerpc/ieee1275/grub-install.in: Improve error message shown when nvsetenv failed.
This commit is contained in:
parent
969c02ec31
commit
ad0686cc6d
7 changed files with 44 additions and 7 deletions
21
ChangeLog
21
ChangeLog
|
@ -1,3 +1,24 @@
|
||||||
|
2007-07-22 Robert Millan <rmh@aybabtu.com>
|
||||||
|
|
||||||
|
* include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): Add
|
||||||
|
GRUB_IEEE1275_FLAG_BROKEN_OUTPUT flag.
|
||||||
|
* kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): Set this
|
||||||
|
flag when running on SmartFirmware.
|
||||||
|
* term/ieee1275/ofconsole.c (grub_ofconsole_init): Avoid running
|
||||||
|
"output-device output" command when GRUB_IEEE1275_FLAG_BROKEN_OUTPUT
|
||||||
|
was set.
|
||||||
|
|
||||||
|
* kern/powerpc/ieee1275/openfw.c (grub_ieee1275_encode_devname):
|
||||||
|
Increase partno when GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS flag is set,
|
||||||
|
rather than decreasing it.
|
||||||
|
|
||||||
|
* util/i386/pc/grub-setup.c (setup): When embedding is required, but
|
||||||
|
there's not enough space to do it, fail in the same way as when it
|
||||||
|
can't be done because there are no partitions.
|
||||||
|
|
||||||
|
* util/powerpc/ieee1275/grub-install.in: Improve error message shown
|
||||||
|
when nvsetenv failed.
|
||||||
|
|
||||||
2007-07-22 Yoshinori K. Okuji <okuji@enbug.org>
|
2007-07-22 Yoshinori K. Okuji <okuji@enbug.org>
|
||||||
|
|
||||||
* conf/i386-pc.rmk (CLEANFILES): Removed for grub-mkrescue,
|
* conf/i386-pc.rmk (CLEANFILES): Removed for grub-mkrescue,
|
||||||
|
|
|
@ -79,6 +79,9 @@ enum grub_ieee1275_flag
|
||||||
/* CHRP specifies partitions are numbered from 1 (partition 0 refers to the
|
/* CHRP specifies partitions are numbered from 1 (partition 0 refers to the
|
||||||
whole disk). However, CodeGen firmware numbers partitions from 0. */
|
whole disk). However, CodeGen firmware numbers partitions from 0. */
|
||||||
GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS,
|
GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS,
|
||||||
|
|
||||||
|
/* CodeGen firmware does not correctly implement "output-device output" */
|
||||||
|
GRUB_IEEE1275_FLAG_BROKEN_OUTPUT,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag);
|
extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag);
|
||||||
|
|
|
@ -62,7 +62,10 @@ grub_ieee1275_find_options (void)
|
||||||
grub_ieee1275_finddevice ("/openprom", &openprom);
|
grub_ieee1275_finddevice ("/openprom", &openprom);
|
||||||
rc = grub_ieee1275_get_property (openprom, "SmartFirmware-version", 0, 0, 0);
|
rc = grub_ieee1275_get_property (openprom, "SmartFirmware-version", 0, 0, 0);
|
||||||
if (rc >= 0)
|
if (rc >= 0)
|
||||||
grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS);
|
{
|
||||||
|
grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS);
|
||||||
|
grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_BROKEN_OUTPUT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmain (uint32_t r3, uint32_t r4, uint32_t r5);
|
void cmain (uint32_t r3, uint32_t r4, uint32_t r5);
|
||||||
|
|
|
@ -372,7 +372,7 @@ grub_ieee1275_encode_devname (const char *path)
|
||||||
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS))
|
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS))
|
||||||
/* GRUB partition 1 is OF partition 0. */
|
/* GRUB partition 1 is OF partition 0. */
|
||||||
partno--;
|
partno++;
|
||||||
|
|
||||||
/* Assume partno will require less than five bytes to encode. */
|
/* Assume partno will require less than five bytes to encode. */
|
||||||
encoding = grub_malloc (grub_strlen (device) + 3 + 5);
|
encoding = grub_malloc (grub_strlen (device) + 3 + 5);
|
||||||
|
|
|
@ -311,8 +311,10 @@ grub_ofconsole_init (void)
|
||||||
int col;
|
int col;
|
||||||
|
|
||||||
/* The latest PowerMacs don't actually initialize the screen for us, so we
|
/* The latest PowerMacs don't actually initialize the screen for us, so we
|
||||||
* use this trick to re-open the output device. */
|
* use this trick to re-open the output device (but we avoid doing this on
|
||||||
grub_ieee1275_interpret ("output-device output", 0);
|
* platforms where it's known to be broken). */
|
||||||
|
if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_OUTPUT))
|
||||||
|
grub_ieee1275_interpret ("output-device output", 0);
|
||||||
|
|
||||||
if (grub_ieee1275_get_property (grub_ieee1275_chosen, "stdout", data,
|
if (grub_ieee1275_get_property (grub_ieee1275_chosen, "stdout", data,
|
||||||
sizeof data, &actual)
|
sizeof data, &actual)
|
||||||
|
|
|
@ -105,6 +105,7 @@ setup (const char *prefix, const char *dir,
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
unsigned long first_start = ~0UL;
|
unsigned long first_start = ~0UL;
|
||||||
|
int able_to_embed = 1;
|
||||||
|
|
||||||
auto void save_first_sector (grub_disk_addr_t sector, unsigned offset,
|
auto void save_first_sector (grub_disk_addr_t sector, unsigned offset,
|
||||||
unsigned length);
|
unsigned length);
|
||||||
|
@ -323,8 +324,13 @@ setup (const char *prefix, const char *dir,
|
||||||
|
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
able_to_embed = 0;
|
||||||
}
|
}
|
||||||
else if (must_embed)
|
else
|
||||||
|
able_to_embed = 0;
|
||||||
|
|
||||||
|
if (must_embed && !able_to_embed)
|
||||||
grub_util_error ("Can't embed the core image, but this is required when\n"
|
grub_util_error ("Can't embed the core image, but this is required when\n"
|
||||||
"the root device is on a RAID array or LVM volume.");
|
"the root device is on a RAID array or LVM volume.");
|
||||||
|
|
||||||
|
|
|
@ -208,9 +208,11 @@ if test $update_nvram = yes; then
|
||||||
}
|
}
|
||||||
|
|
||||||
# Point boot-device at the new grub install
|
# Point boot-device at the new grub install
|
||||||
"$nvsetenv" boot-device "$ofpath:$partno,"'\grub' || {
|
boot_device="boot-device $ofpath:$partno,\\grub"
|
||||||
|
"$nvsetenv" "$boot_device" || {
|
||||||
echo "$nvsetenv failed."
|
echo "$nvsetenv failed."
|
||||||
echo "You will have to set boot-device manually."
|
echo "You will have to set boot-device manually. At the Open Firmware prompt, type:"
|
||||||
|
echo " setenv $boot_device"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Add table
Reference in a new issue