minimal changes to do EFI boot on x86_64
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index 801df7c..1e28f31 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -1823,7 +1823,7 @@
module = {
name = linux;
- x86 = loader/i386/linux.c;
+ x86_64_efi = loader/efi/linux.c;
i386_xen_pvh = loader/i386/linux.c;
xen = loader/i386/xen.c;
i386_pc = lib/i386/pc/vesa_modes_table.c;
diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
index 3705b8b..99c5e7c 100644
--- a/grub-core/kern/efi/mm.c
+++ b/grub-core/kern/efi/mm.c
@@ -654,7 +654,7 @@
grub_mm_add_region_fn = grub_efi_mm_add_regions;
}
-#if defined (__aarch64__) || defined (__arm__) || defined (__riscv)
+#if defined (__aarch64__) || defined (__arm__) || defined (__riscv) || defined(__x86_64__)
grub_err_t
grub_efi_get_ram_base(grub_addr_t *base_addr)
{
diff --git a/grub-core/loader/efi/linux.c b/grub-core/loader/efi/linux.c
index 15e0686..ac612f5 100644
--- a/grub-core/loader/efi/linux.c
+++ b/grub-core/loader/efi/linux.c
@@ -125,6 +125,7 @@
return GRUB_ERR_NONE;
}
+#ifndef __x86_64__
static grub_err_t
finalize_params_linux (void)
{
@@ -169,6 +170,7 @@
grub_fdt_unload();
return grub_error(GRUB_ERR_BAD_OS, "failed to install/update FDT");
}
+#endif
grub_err_t
grub_arch_efi_linux_boot_image (grub_addr_t addr, grub_size_t size, char *args)
@@ -231,8 +233,10 @@
static grub_err_t
grub_linux_boot (void)
{
+#ifndef __x86_64__
if (finalize_params_linux () != GRUB_ERR_NONE)
return grub_errno;
+#endif
return (grub_arch_efi_linux_boot_image((grub_addr_t)kernel_addr,
kernel_size, linux_args));
@@ -253,7 +257,9 @@
if (kernel_addr)
grub_efi_free_pages ((grub_addr_t) kernel_addr,
GRUB_EFI_BYTES_TO_PAGES (kernel_size));
+#ifndef __x86_64__
grub_fdt_unload ();
+#endif
if (initrd_lf2_handle != NULL)
{
diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h
index b4c4646..b0d76e1 100644
--- a/include/grub/efi/api.h
+++ b/include/grub/efi/api.h
@@ -1229,7 +1229,7 @@
(*install_configuration_table) (grub_efi_guid_t *guid, void *table);
grub_efi_status_t
- (*load_image) (grub_efi_boolean_t boot_policy,
+ (__grub_efi_api *load_image) (grub_efi_boolean_t boot_policy,
grub_efi_handle_t parent_image_handle,
grub_efi_device_path_t *file_path,
void *source_buffer,
@@ -1237,7 +1237,7 @@
grub_efi_handle_t *image_handle);
grub_efi_status_t
- (*start_image) (grub_efi_handle_t image_handle,
+ (__grub_efi_api *start_image) (grub_efi_handle_t image_handle,
grub_efi_uintn_t *exit_data_size,
grub_efi_char16_t **exit_data);
@@ -1315,7 +1315,7 @@
void **protocol_interface);
grub_efi_status_t
- (*install_multiple_protocol_interfaces) (grub_efi_handle_t *handle, ...);
+ (__grub_efi_api *install_multiple_protocol_interfaces) (grub_efi_handle_t *handle, ...);
grub_efi_status_t
(*uninstall_multiple_protocol_interfaces) (grub_efi_handle_t handle, ...);
diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h
index 444bf5b..c56abfb 100644
--- a/include/grub/efi/efi.h
+++ b/include/grub/efi/efi.h
@@ -112,6 +112,8 @@
#if defined(__arm__) || defined(__aarch64__) || defined(__riscv)
void *EXPORT_FUNC(grub_efi_get_firmware_fdt)(void);
+#endif
+#if defined(__arm__) || defined(__aarch64__) || defined(__riscv) || defined(__x86_64__)
grub_err_t EXPORT_FUNC(grub_efi_get_ram_base)(grub_addr_t *);
#include <grub/file.h>
grub_err_t grub_arch_efi_linux_load_image_header(grub_file_t file,