X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=blobdiff_plain;f=second%2Fyaboot.c;h=765c7bf46618d47a4d67872349360ac70461c147;hp=f8e7d65675763d68ac08a59e50889f55eb23299d;hb=2c611ced5c7fa551d47da32e574bc7f2ff2df18b;hpb=4d84db875abc3fb337368263333c47bfd5c14d13 diff --git a/second/yaboot.c b/second/yaboot.c index f8e7d65..765c7bf 100644 --- a/second/yaboot.c +++ b/second/yaboot.c @@ -58,6 +58,8 @@ #define CONFIG_FILE_NAME "yaboot.conf" #define CONFIG_FILE_MAX 0x8000 /* 32k */ +#define MESSAGE_FILE_MAX 2048 + #ifdef USE_MD5_PASSWORDS #include "md5.h" #endif /* USE_MD5_PASSWORDS */ @@ -154,10 +156,6 @@ int fgcolor = 15; int bgcolor = 0; #endif /* CONFIG_COLOR_TEXT */ -#if DEBUG -static int test_bss; -static int test_data = 0; -#endif static int pause_after; static char *pause_message = "Type go to continue.\n"; static char given_bootargs[1024]; @@ -174,36 +172,21 @@ extern unsigned char linux_logo_blue[]; extern char* __bss_start; extern char* _end; -static struct first_info *quik_fip = NULL; - int yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) { int result; void* malloc_base = NULL; - unsigned long addr; prom_handle root; /* OF seems to do it, but I'm not very confident */ memset(&__bss_start, 0, &_end - &__bss_start); - /* Check for quik first stage bootloader (but I don't think we are - * compatible with it anyway, I'll look into backporting to older OF - * versions later - */ - if (r5 == 0xdeadbeef) { - r5 = r3; - quik_fip = (struct first_info *)r4; - } - /* Initialize OF interface */ prom_init ((prom_entry) r5); /* Allocate some memory for malloc'ator */ - for (addr = MALLOCADDR; addr <= MALLOCADDR * 16 ;addr+=0x100000) { - malloc_base = prom_claim((void *)addr, MALLOCSIZE, 0); - if (malloc_base != (void *)-1) break; - } + malloc_base = prom_claim_chunk((void *)MALLOCADDR, MALLOCSIZE, 0); if (malloc_base == (void *)-1) { prom_printf("Can't claim malloc buffer (%d bytes at 0x%08x)\n", MALLOCSIZE, MALLOCADDR); @@ -215,10 +198,6 @@ yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) /* A few useless DEBUG_F's */ DEBUG_F("reloc_offset : %ld (should be 0)\n", reloc_offset()); - DEBUG_F("test_bss : %d (should be 0)\n", test_bss); - DEBUG_F("test_data : %d (should be 0)\n", test_data); - DEBUG_F("&test_data : %p\n", &test_data); - DEBUG_F("&test_bss : %p\n", &test_bss); DEBUG_F("linked at : 0x%08x\n", TEXTADDR); /* ask the OF info if we're a chrp or pmac */ @@ -314,13 +293,13 @@ void print_message_file(char *filename) } else opened = 1; - msg = malloc(2001); + msg = malloc(MESSAGE_FILE_MAX + 1); if (!msg) goto done; else - memset(msg, 0, 2001); + memset(msg, 0, MESSAGE_FILE_MAX + 1); - if (file.fs->read(&file, 2000, msg) <= 0) + if (file.fs->read(&file, MESSAGE_FILE_MAX, msg) <= 0) goto done; else prom_printf("%s", msg); @@ -1002,7 +981,7 @@ int get_params(struct boot_param_t* params) /* check if user seted to use a initrd file from boot console */ if (!definitrd && p != manualinitrd) { - if (manualinitrd[0] != "/" && (prom_get_devtype(defdevice_bak) != FILE_DEVICE_NET)) { + if (manualinitrd[0] != '/' && (prom_get_devtype(defdevice_bak) != FILE_DEVICE_NET)) { strcpy(initrdpath, "/"); strcat(initrdpath, manualinitrd); } else @@ -1030,8 +1009,6 @@ int get_params(struct boot_param_t* params) void yaboot_text_ui(void) { -#define MAX_HEADERS 32 - struct boot_file_t file; int result; static struct boot_param_t params; @@ -1228,11 +1205,6 @@ load_elf32(struct boot_file_t *file, loadinfo_t *loadinfo) loadinfo->entry = e->e_entry; - if (e->e_phnum > MAX_HEADERS) { - prom_printf ("Can only load kernels with one program header\n"); - goto bail; - } - ph = (Elf32_Phdr *)malloc(sizeof(Elf32_Phdr) * e->e_phnum); if (!ph) { prom_printf ("Malloc error\n"); @@ -1366,11 +1338,6 @@ load_elf64(struct boot_file_t *file, loadinfo_t *loadinfo) loadinfo->entry = e->e_entry; - if (e->e_phnum > MAX_HEADERS) { - prom_printf ("Can only load kernels with one program header\n"); - goto bail; - } - ph = (Elf64_Phdr *)malloc(sizeof(Elf64_Phdr) * e->e_phnum); if (!ph) { prom_printf ("Malloc error\n");