#define KERNEL_LINK_ADDR_PPC32 0xC0000000UL
#define KERNEL_LINK_ADDR_PPC64 0xC000000000000000ULL
+#define INITRD_CHUNKSIZE 0x100000
+
typedef struct {
union {
Elf32_Ehdr elf32hdr;
else if (prom_getprop(root, "device_type", model, 256 ) > 0 &&
!strncmp("chrp", model, 4))
_machine = _MACH_chrp;
+ else if (prom_getprop(root, "compatible", model, 256 ) > 0 &&
+ strstr(model, "ibm,powernv"))
+ _machine = _MACH_chrp;
else {
if (prom_getprop(root, "model", model, 256 ) > 0 &&
!strncmp(model, "IBM", 3))
prom_printf ("\n");
#ifdef USE_MD5_PASSWORDS
if (!strncmp (password, "$1$", 3)) {
- if (!check_md5_password(passwdbuff, password))
+ if (!check_md5_password((unsigned char*)passwdbuff, (unsigned char*)password))
return;
}
else if (!strcmp (password, passwdbuff))
loadinfo_t loadinfo;
void *initrd_more,*initrd_want;
unsigned long initrd_read;
+ unsigned int len = INITRD_CHUNKSIZE;
loadinfo.load_loc = 0;
}
prom_printf("Loading ramdisk...\n");
result = open_file(¶ms.rd, &file);
+ if (result == FILE_ERR_OK && file.fs->ino_size) {
+ result = file.fs->ino_size(&file, &len);
+ }
if (result != FILE_ERR_OK) {
prom_printf("%s:%d,", params.rd.dev, params.rd.part);
prom_perror(result, params.rd.file);
}
else {
-#define INITRD_CHUNKSIZE 0x100000
- unsigned int len = INITRD_CHUNKSIZE;
-
- /* We add a bit to the actual size so the loop below doesn't think
- * there is more to load.
+ /* We add a bit to the actual size so the loop below
+ * doesn't think there is more to load.
*/
- if (file.fs->ino_size && file.fs->ino_size(&file) > 0)
- len = file.fs->ino_size(&file) + 0x1000;
+ len += 0x1000;
initrd_base = prom_claim_chunk(loadinfo.base+loadinfo.memsize, len, 0);
if (initrd_base == (void *)-1) {