[U-Boot] [PATCH 1/1] efi_loader: deduplicate code in cmd/bootefi.c

Heinrich Schuchardt xypron.glpk at gmx.de
Sun May 12 18:40:51 UTC 2019


Move duplicate initialization code to single instance.

Adjust comments of concerned functions.

Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
---
 cmd/bootefi.c | 99 +++++++++++++++++++--------------------------------
 1 file changed, 37 insertions(+), 62 deletions(-)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 52116b308c..0b3c5cdb90 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -314,32 +314,15 @@ static efi_status_t do_bootefi_exec(efi_handle_t handle)
 }

 /**
- * do_efibootmgr() - execute EFI Boot Manager
+ * do_efibootmgr() - execute EFI boot manager
  *
- * @fdt_opt:	string of fdt start address
  * Return:	status code
- *
- * Execute EFI Boot Manager
  */
-static int do_efibootmgr(const char *fdt_opt)
+static int do_efibootmgr(void)
 {
 	efi_handle_t handle;
 	efi_status_t ret;

-	/* Initialize EFI drivers */
-	ret = efi_init_obj_list();
-	if (ret != EFI_SUCCESS) {
-		printf("Error: Cannot initialize UEFI sub-system, r = %lu\n",
-		       ret & ~EFI_ERROR_MASK);
-		return CMD_RET_FAILURE;
-	}
-
-	ret = efi_install_fdt(fdt_opt);
-	if (ret == EFI_INVALID_PARAMETER)
-		return CMD_RET_USAGE;
-	else if (ret != EFI_SUCCESS)
-		return CMD_RET_FAILURE;
-
 	ret = efi_bootmgr_load(&handle);
 	if (ret != EFI_SUCCESS) {
 		printf("EFI boot manager: Cannot load any image\n");
@@ -355,16 +338,15 @@ static int do_efibootmgr(const char *fdt_opt)
 }

 /*
- * do_bootefi_image() - execute EFI binary from command line
+ * do_bootefi_image() - execute EFI binary
+ *
+ * Set up memory image for the binary to be loaded, prepare device path, and
+ * then call do_bootefi_exec() to execute it.
  *
  * @image_opt:	string of image start address
- * @fdt_opt:	string of fdt start address
  * Return:	status code
- *
- * Set up memory image for the binary to be loaded, prepare
- * device path and then call do_bootefi_exec() to execute it.
  */
-static int do_bootefi_image(const char *image_opt, const char *fdt_opt)
+static int do_bootefi_image(const char *image_opt)
 {
 	void *image_buf;
 	struct efi_device_path *device_path, *image_path;
@@ -374,20 +356,6 @@ static int do_bootefi_image(const char *image_opt, const char *fdt_opt)
 	efi_handle_t mem_handle = NULL, handle;
 	efi_status_t ret;

-	/* Initialize EFI drivers */
-	ret = efi_init_obj_list();
-	if (ret != EFI_SUCCESS) {
-		printf("Error: Cannot initialize UEFI sub-system, r = %lu\n",
-		       ret & ~EFI_ERROR_MASK);
-		return CMD_RET_FAILURE;
-	}
-
-	ret = efi_install_fdt(fdt_opt);
-	if (ret == EFI_INVALID_PARAMETER)
-		return CMD_RET_USAGE;
-	else if (ret != EFI_SUCCESS)
-		return CMD_RET_FAILURE;
-
 #ifdef CONFIG_CMD_BOOTEFI_HELLO
 	if (!strcmp(image_opt, "hello")) {
 		char *saddr;
@@ -547,33 +515,16 @@ static void bootefi_run_finish(struct efi_loaded_image_obj *image_obj,
 }

 /**
- * do_efi_selftest() - execute EFI Selftest
+ * do_efi_selftest() - execute EFI selftest
  *
- * @fdt_opt:	string of fdt start address
  * Return:	status code
- *
- * Execute EFI Selftest
  */
-static int do_efi_selftest(const char *fdt_opt)
+static int do_efi_selftest(void)
 {
 	struct efi_loaded_image_obj *image_obj;
 	struct efi_loaded_image *loaded_image_info;
 	efi_status_t ret;

-	/* Initialize EFI drivers */
-	ret = efi_init_obj_list();
-	if (ret != EFI_SUCCESS) {
-		printf("Error: Cannot initialize UEFI sub-system, r = %lu\n",
-		       ret & ~EFI_ERROR_MASK);
-		return CMD_RET_FAILURE;
-	}
-
-	ret = efi_install_fdt(fdt_opt);
-	if (ret == EFI_INVALID_PARAMETER)
-		return CMD_RET_USAGE;
-	else if (ret != EFI_SUCCESS)
-		return CMD_RET_FAILURE;
-
 	ret = bootefi_test_prepare(&image_obj, &loaded_image_info,
 				   "\\selftest", "efi_selftest");
 	if (ret != EFI_SUCCESS)
@@ -587,20 +538,44 @@ static int do_efi_selftest(const char *fdt_opt)
 }
 #endif /* CONFIG_CMD_BOOTEFI_SELFTEST */

-/* Interpreter command to boot an arbitrary EFI image from memory */
+/**
+ * do_bootefi() - execute `bootefi` command
+ *
+ * @cmdtp:	table entry describing command
+ * @flag:	bitmap indicating how the command was invoked
+ * @argc:	number of arguments
+ * @argv:	command line arguments
+ * Return:	status code
+ */
 static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
+	efi_status_t ret;
+
 	if (argc < 2)
 		return CMD_RET_USAGE;

+	/* Initialize EFI drivers */
+	ret = efi_init_obj_list();
+	if (ret != EFI_SUCCESS) {
+		printf("Error: Cannot initialize UEFI sub-system, r = %lu\n",
+		       ret & ~EFI_ERROR_MASK);
+		return CMD_RET_FAILURE;
+	}
+
+	ret = efi_install_fdt(argc > 2 ? argv[2] : NULL);
+	if (ret == EFI_INVALID_PARAMETER)
+		return CMD_RET_USAGE;
+	else if (ret != EFI_SUCCESS)
+		return CMD_RET_FAILURE;
+
 	if (!strcmp(argv[1], "bootmgr"))
-		return do_efibootmgr(argc > 2 ? argv[2] : NULL);
+		return do_efibootmgr();
 #ifdef CONFIG_CMD_BOOTEFI_SELFTEST
 	else if (!strcmp(argv[1], "selftest"))
-		return do_efi_selftest(argc > 2 ? argv[2] : NULL);
+		return do_efi_selftest();
 #endif

-	return do_bootefi_image(argv[1], argc > 2 ? argv[2] : NULL);
+	return do_bootefi_image(argv[1]);
 }

 #ifdef CONFIG_SYS_LONGHELP
--
2.20.1



More information about the U-Boot mailing list