efi: Generalize relocate_kernel() for use by other architectures.
Rename relocate_kernel() to efi_relocate_kernel(), and take parameters rather than x86 specific structure. Add max_addr argument as for ARM we have some address constraints that we need to enforce when relocating the kernel. Add alloc_size parameter for use by ARM64 which uses an uncompressed kernel, and needs to allocate space for BSS. Signed-off-by: Roy Franz <roy.franz@linaro.org> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
This commit is contained in:
parent
c6866d7238
commit
4a9f3a7c33
2 changed files with 63 additions and 23 deletions
|
@ -733,10 +733,16 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table,
|
|||
* address, relocate it.
|
||||
*/
|
||||
if (hdr->pref_address != hdr->code32_start) {
|
||||
status = relocate_kernel(hdr);
|
||||
|
||||
unsigned long bzimage_addr = hdr->code32_start;
|
||||
status = efi_relocate_kernel(sys_table, &bzimage_addr,
|
||||
hdr->init_size, hdr->init_size,
|
||||
hdr->pref_address,
|
||||
hdr->kernel_alignment);
|
||||
if (status != EFI_SUCCESS)
|
||||
goto fail;
|
||||
|
||||
hdr->pref_address = hdr->code32_start;
|
||||
hdr->code32_start = bzimage_addr;
|
||||
}
|
||||
|
||||
status = exit_boot(boot_params, handle);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue