On 11/15/18 12:11 AM, Simon Glass wrote: > There is still duplicated code in efi_loader for tests and normal > operation. > > Add a new bootefi_run_prepare() function which holds common code used to > set up U-Boot to run EFI code. Make use of this from the existing > bootefi_test_prepare() function, as well as do_bootefi_exec(). > > Also shorten a few variable names. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > Changes in v14: > - Go back to the horrible long variable names > > Changes in v13: None > Changes in v12: None > Changes in v11: None > Changes in v9: None > Changes in v7: None > Changes in v5: > - Drop call to efi_init_obj_list() which is now done in do_bootefi() > - Introduce load_options_path to specifyc U-Boot env var for load_options_path > > Changes in v4: > - Rebase to master > > Changes in v3: > - Add patch to create a function to set up for running EFI code > > cmd/bootefi.c | 63 ++++++++++++++++++++++++++++++--------------------- > 1 file changed, 37 insertions(+), 26 deletions(-) > > diff --git a/cmd/bootefi.c b/cmd/bootefi.c > index b633e956c23..ab7ada9f2d6 100644 > --- a/cmd/bootefi.c > +++ b/cmd/bootefi.c > @@ -325,6 +325,31 @@ static efi_status_t efi_install_fdt(ulong fdt_addr) > return ret; > } > > +static efi_status_t bootefi_run_prepare(const char *load_options_path, > + struct efi_device_path *device_path, > + struct efi_device_path *image_path, > + struct efi_loaded_image_obj **image_objp, > + struct efi_loaded_image **loaded_image_infop) > +{ > + efi_status_t ret; > + > + ret = efi_setup_loaded_image(device_path, image_path, image_objp, > + loaded_image_infop); > + if (ret != EFI_SUCCESS) > + return ret; > + > + /* > + * gd lives in a fixed register which may get clobbered while we execute > + * the payload. So save it here and restore it on every callback entry > + */ > + efi_save_gd(); > + > + /* Transfer environment variable as load options */ > + set_load_options(*loaded_image_infop, load_options_path); > + > + return 0; > +} > + > /** > * do_bootefi_exec() - execute EFI binary > * > @@ -374,13 +399,11 @@ static efi_status_t do_bootefi_exec(void *efi, > assert(device_path && image_path); > } > > - ret = efi_setup_loaded_image(device_path, image_path, &image_obj, > - &loaded_image_info); > - if (ret != EFI_SUCCESS) > - goto exit; > + ret = bootefi_run_prepare("bootargs", device_path, image_path, > + &image_obj, &loaded_image_info); > + if (ret) > + return ret; > > - /* Transfer environment variable bootargs as load options */ > - set_load_options(loaded_image_info, "bootargs"); > /* Load the EFI payload */ > entry = efi_load_pe(image_obj, efi, loaded_image_info); > if (!entry) { > @@ -468,35 +491,23 @@ exit: > * @path: File path to the test being run (often just the test name with a > * backslash before it > * @test_func: Address of the test function that is being run > + * @load_options_path: U-Boot environment variable to use as load options > * @return 0 if OK, -ve on error > */ > static efi_status_t bootefi_test_prepare(
CHECK: Alignment should match open parenthesis #29: FILE: cmd/bootefi.c:330: +static efi_status_t bootefi_run_prepare(const char *load_options_path, + struct efi_device_path *device_path, > struct efi_loaded_image_obj **image_objp, > - struct efi_loaded_image **loaded_image_infop, > - const char *path, > - ulong test_func) > + struct efi_loaded_image **loaded_image_infop, const char *path, > + ulong test_func, const char *load_options_path) > { > - efi_status_t r; > - > /* Construct a dummy device path */ > bootefi_device_path = efi_dp_from_mem(EFI_RESERVED_MEMORY_TYPE, > (uintptr_t)test_func, > (uintptr_t)test_func); > bootefi_image_path = efi_dp_from_file(NULL, 0, path); > - r = efi_setup_loaded_image(bootefi_device_path, bootefi_image_path, > - image_objp, loaded_image_infop); > - if (r) > - return r; > - /* > - * gd lives in a fixed register which may get clobbered while we execute > - * the payload. So save it here and restore it on every callback entry > - */ > - efi_save_gd(); > - > - /* Transfer environment variable efi_selftest as load options */ > - set_load_options(*loaded_image_infop, "efi_selftest"); > > - return 0; > + return bootefi_run_prepare(load_options_path, bootefi_device_path, > + bootefi_image_path, image_objp, > + loaded_image_infop); > } > > /** > @@ -590,8 +601,8 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int > argc, char * const argv[]) > struct efi_loaded_image *loaded_image_info; > > if (bootefi_test_prepare(&image_obj, &loaded_image_info, > - "\\selftest", > - (uintptr_t)&efi_selftest)) > + "\\selftest", (uintptr_t)&efi_selftest, > + "efi_selftest")) > return CMD_RET_FAILURE; > > /* Execute the test */ > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot