[PATCH 15/16] efi: payload: initrd: move into common efi code

Ahmad Fatoum a.fatoum at pengutronix.de
Thu Dec 11 12:30:06 PST 2025


This code will be equally useful for barebox running as EFI loader, so
move it to a common location and touch it up to be reusable.

While at it, drop unneeded headers.

Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
 efi/Makefile                           |  1 +
 efi/{payload/efi-initrd.c => initrd.c} | 20 +++++++++++++-------
 efi/payload/Makefile                   |  1 -
 3 files changed, 14 insertions(+), 8 deletions(-)
 rename efi/{payload/efi-initrd.c => initrd.c} (87%)

diff --git a/efi/Makefile b/efi/Makefile
index 6693564f7071..4c35917475c0 100644
--- a/efi/Makefile
+++ b/efi/Makefile
@@ -4,3 +4,4 @@ obj-$(CONFIG_EFI_PAYLOAD)	+= payload/
 obj-$(CONFIG_EFI_GUID)		+= guid.o
 obj-$(CONFIG_EFI_DEVICEPATH)	+= devicepath.o
 obj-y				+= errno.o handle.o efivar.o efivar-filename.o
+obj-y				+= initrd.o
diff --git a/efi/payload/efi-initrd.c b/efi/initrd.c
similarity index 87%
rename from efi/payload/efi-initrd.c
rename to efi/initrd.c
index 708418da62b7..7fd8e021f353 100644
--- a/efi/payload/efi-initrd.c
+++ b/efi/initrd.c
@@ -5,15 +5,14 @@
  * Copyright (c) 2025 Anis Chali <chalianis1 at gmail.com>
  * Copyright (C) 2025 Ahmad Fatoum <a.fatoum at pengutronix.de>
  */
-#include <common.h>
-#include <driver.h>
 #include <init.h>
 #include <linux/hw_random.h>
 #include <efi/devicepath.h>
+#include <efi/mode.h>
+#include <efi/services.h>
 #include <efi/protocol/file.h>
-#include <efi/protocol/initrd.h>
+#include <efi/initrd.h>
 #include <efi/guid.h>
-#include <efi/payload.h>
 #include <efi/error.h>
 
 static efi_status_t EFIAPI efi_initrd_load_file2(
@@ -73,6 +72,7 @@ static efi_status_t EFIAPI efi_initrd_load_file2(
 
 int efi_initrd_register(void *initrd_base, size_t initrd_sz)
 {
+	struct efi_boot_services *bs;
 	efi_status_t efiret;
 	int ret;
 
@@ -80,7 +80,11 @@ int efi_initrd_register(void *initrd_base, size_t initrd_sz)
 	initrd.start = initrd_base;
 	initrd.size = initrd_sz;
 
-	efiret = BS->install_multiple_protocol_interfaces(
+	bs = efi_get_boot_services();
+	if (!bs)
+		return -EOPNOTSUPP;
+
+	efiret = bs->install_multiple_protocol_interfaces(
 		&initrd.lf2_handle, &efi_load_file2_protocol_guid, &initrd.base,
 		&efi_device_path_protocol_guid, &initrd_dev_path, NULL);
 	if (EFI_ERROR(efiret)) {
@@ -95,10 +99,12 @@ int efi_initrd_register(void *initrd_base, size_t initrd_sz)
 
 void efi_initrd_unregister(void)
 {
-	if (!initrd.base.load_file)
+	struct efi_boot_services *bs = efi_get_boot_services();
+
+	if (!bs || !initrd.base.load_file)
 		return;
 
-	BS->uninstall_multiple_protocol_interfaces(
+	bs->uninstall_multiple_protocol_interfaces(
 		initrd.lf2_handle, &efi_device_path_protocol_guid, &initrd_dev_path,
 		&efi_load_file2_protocol_guid, &initrd.base, NULL);
 
diff --git a/efi/payload/Makefile b/efi/payload/Makefile
index 34efe6105d22..6306540ab595 100644
--- a/efi/payload/Makefile
+++ b/efi/payload/Makefile
@@ -4,7 +4,6 @@ obj-y += init.o
 obj-y += image.o
 obj-$(CONFIG_EFI_HANDOVER_PROTOCOL) += handover.o
 obj-y += bootm.o
-obj-y += efi-initrd.o
 obj-$(CONFIG_OFTREE) += fdt.o
 bbenv-y += env-efi
 obj-$(CONFIG_CMD_IOMEM) += iomem.o
-- 
2.47.3




More information about the barebox mailing list