|
@@ -1038,6 +1038,7 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
|
|
int i;
|
|
|
unsigned long ramdisk_addr;
|
|
|
unsigned long ramdisk_size;
|
|
|
+ unsigned long initrd_addr_max;
|
|
|
|
|
|
efi_early = c;
|
|
|
sys_table = (efi_system_table_t *)(unsigned long)efi_early->table;
|
|
@@ -1100,14 +1101,21 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
|
|
|
|
|
memset(sdt, 0, sizeof(*sdt));
|
|
|
|
|
|
+ if (hdr->xloadflags & XLF_CAN_BE_LOADED_ABOVE_4G)
|
|
|
+ initrd_addr_max = -1UL;
|
|
|
+ else
|
|
|
+ initrd_addr_max = hdr->initrd_addr_max;
|
|
|
+
|
|
|
status = handle_cmdline_files(sys_table, image,
|
|
|
(char *)(unsigned long)hdr->cmd_line_ptr,
|
|
|
- "initrd=", hdr->initrd_addr_max,
|
|
|
+ "initrd=", initrd_addr_max,
|
|
|
&ramdisk_addr, &ramdisk_size);
|
|
|
if (status != EFI_SUCCESS)
|
|
|
goto fail2;
|
|
|
- hdr->ramdisk_image = ramdisk_addr;
|
|
|
- hdr->ramdisk_size = ramdisk_size;
|
|
|
+ hdr->ramdisk_image = ramdisk_addr & 0xffffffff;
|
|
|
+ hdr->ramdisk_size = ramdisk_size & 0xffffffff;
|
|
|
+ boot_params->ext_ramdisk_image = (u64)ramdisk_addr >> 32;
|
|
|
+ boot_params->ext_ramdisk_size = (u64)ramdisk_size >> 32;
|
|
|
|
|
|
return boot_params;
|
|
|
fail2:
|