diff --git a/ChangeLog b/ChangeLog index 485327fd5..c88a9a99e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2004-10-14 Hollis Blanchard + + * include/grub/powerpc/ieee1275/ieee1275.h (abort): Add function + prototype. + * kern/powerpc/ieee1275/init.c (grub_machine_init): Call + grub_console_init first. + Change the memory range used for grub_ieee1275_claim and + grub_mm_init_region. + Print an error message if the claim fails. + Include . + 2004-10-13 Hollis Blanchard * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_iterate): diff --git a/include/grub/powerpc/ieee1275/ieee1275.h b/include/grub/powerpc/ieee1275/ieee1275.h index cfcf286a7..8102ee186 100644 --- a/include/grub/powerpc/ieee1275/ieee1275.h +++ b/include/grub/powerpc/ieee1275/ieee1275.h @@ -104,5 +104,7 @@ grub_err_t EXPORT_FUNC(grub_devalias_iterate) grub_err_t EXPORT_FUNC(grub_children_iterate) (char *devpath, int (*hook) (struct grub_ieee1275_devalias *alias)); +void EXPORT_FUNC(abort) (void); + #endif /* ! GRUB_IEEE1275_MACHINE_HEADER */ diff --git a/kern/powerpc/ieee1275/init.c b/kern/powerpc/ieee1275/init.c index 32e487ec8..168bafb38 100644 --- a/kern/powerpc/ieee1275/init.c +++ b/kern/powerpc/ieee1275/init.c @@ -28,6 +28,7 @@ #include #include #include +#include void grub_ofdisk_init (void); void grub_console_init (void); @@ -49,11 +50,25 @@ abort (void) void grub_machine_init (void) { - if (grub_ieee1275_claim (0x300000, 0x150000, 0, 0) == -1) - abort (); /* Damn, we are in trouble! */ - - /* The memory allocations were copied from yaboot. */ - grub_mm_init_region ((void *) 0x300000, 0x150000); + 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; + + if (grub_ieee1275_claim (heap_start, heap_len, 0, 0)) + { + grub_printf ("Failed to claim heap at 0x%x, len 0x%x\n", heap_start, + heap_len); + abort (); + } + grub_mm_init_region ((void *) heap_start, heap_len); /* XXX: Loadable modules are not supported. */ grub_env_set ("prefix", ""); @@ -64,7 +79,6 @@ grub_machine_init (void) grub_linux_init (); grub_linux_normal_init (); grub_ofdisk_init (); - grub_console_init (); } int