[PATCH v2 1/2] efi_selftest: export efi_st_get_config_table()

Ilias Apalodimas ilias.apalodimas at linaro.org
Sun Sep 4 07:08:39 CEST 2022


On Sat, 3 Sept 2022 at 18:01, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> We can use efi_st_get_config_table() in multiple unit tests.
> Export the function.
>
> Export system-table and boot-services.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> ---
> v2:
>         no change
> ---
>  include/efi_selftest.h               | 11 ++++++++
>  lib/efi_selftest/efi_selftest.c      | 38 ++++++++++++++--------------
>  lib/efi_selftest/efi_selftest_fdt.c  | 17 -------------
>  lib/efi_selftest/efi_selftest_util.c | 11 ++++++++
>  4 files changed, 41 insertions(+), 36 deletions(-)
>
> diff --git a/include/efi_selftest.h b/include/efi_selftest.h
> index 5340cefbb6..e900cb85a9 100644
> --- a/include/efi_selftest.h
> +++ b/include/efi_selftest.h
> @@ -18,6 +18,9 @@
>  #define EFI_ST_FAILURE 1
>  #define EFI_ST_SUCCESS_STR u"SUCCESS"
>
> +extern const struct efi_system_table *st_systable;
> +extern const struct efi_boot_services *st_boottime;
> +
>  /**
>   * efi_st_printf() - print a message
>   *
> @@ -130,6 +133,14 @@ u16 *efi_st_translate_code(u16 code);
>   */
>  int efi_st_strcmp_16_8(const u16 *buf1, const char *buf2);
>
> +/**
> + * efi_st_get_config_table() - get configuration table
> + *
> + * @guid:      GUID of the configuration table
> + * Return:     pointer to configuration table or NULL
> + */
> +void *efi_st_get_config_table(const efi_guid_t *guid);
> +
>  /**
>   * efi_st_get_key() - reads an Unicode character from the input device
>   *
> diff --git a/lib/efi_selftest/efi_selftest.c b/lib/efi_selftest/efi_selftest.c
> index 8e427b9e51..191da7fc45 100644
> --- a/lib/efi_selftest/efi_selftest.c
> +++ b/lib/efi_selftest/efi_selftest.c
> @@ -14,8 +14,8 @@
>  #define EFI_ST_EXECUTE 2
>  #define EFI_ST_TEARDOWN        4
>
> -static const struct efi_system_table *systable;
> -static const struct efi_boot_services *boottime;
> +const struct efi_system_table *st_systable;
> +const struct efi_boot_services *st_boottime;
>  static const struct efi_runtime_services *runtime;
>  static efi_handle_t handle;
>  static u16 reset_message[] = u"Selftest completed";
> @@ -41,7 +41,7 @@ void efi_st_exit_boot_services(void)
>         /* Do not detach devices in ExitBootServices. We need the console. */
>         efi_st_keep_devices = true;
>
> -       ret = boottime->get_memory_map(&map_size, NULL, &map_key, &desc_size,
> +       ret = st_boottime->get_memory_map(&map_size, NULL, &map_key, &desc_size,
>                                        &desc_version);
>         if (ret != EFI_BUFFER_TOO_SMALL) {
>                 efi_st_error(
> @@ -50,19 +50,19 @@ void efi_st_exit_boot_services(void)
>         }
>         /* Allocate extra space for newly allocated memory */
>         map_size += sizeof(struct efi_mem_desc);
> -       ret = boottime->allocate_pool(EFI_BOOT_SERVICES_DATA, map_size,
> +       ret = st_boottime->allocate_pool(EFI_BOOT_SERVICES_DATA, map_size,
>                                       (void **)&memory_map);
>         if (ret != EFI_SUCCESS) {
>                 efi_st_error("AllocatePool did not return EFI_SUCCESS\n");
>                 return;
>         }
> -       ret = boottime->get_memory_map(&map_size, memory_map, &map_key,
> +       ret = st_boottime->get_memory_map(&map_size, memory_map, &map_key,
>                                        &desc_size, &desc_version);
>         if (ret != EFI_SUCCESS) {
>                 efi_st_error("GetMemoryMap did not return EFI_SUCCESS\n");
>                 return;
>         }
> -       ret = boottime->exit_boot_services(handle, map_key);
> +       ret = st_boottime->exit_boot_services(handle, map_key);
>         if (ret != EFI_SUCCESS) {
>                 efi_st_error("ExitBootServices did not return EFI_SUCCESS\n");
>                 return;
> @@ -84,7 +84,7 @@ static int setup(struct efi_unit_test *test, unsigned int *failures)
>         if (!test->setup)
>                 return EFI_ST_SUCCESS;
>         efi_st_printc(EFI_LIGHTBLUE, "\nSetting up '%s'\n", test->name);
> -       ret = test->setup(handle, systable);
> +       ret = test->setup(handle, st_systable);
>         if (ret != EFI_ST_SUCCESS) {
>                 efi_st_error("Setting up '%s' failed\n", test->name);
>                 ++*failures;
> @@ -240,8 +240,8 @@ void efi_st_do_tests(const u16 *testname, unsigned int phase,
>   * All tests use a driver model and are run in three phases:
>   * setup, execute, teardown.
>   *
> - * A test may be setup and executed at boottime,
> - * it may be setup at boottime and executed at runtime,
> + * A test may be setup and executed at st_boottime,
> + * it may be setup at st_boottime and executed at runtime,
>   * or it may be setup and executed at runtime.
>   *
>   * After executing all tests the system is reset.
> @@ -257,14 +257,14 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
>         struct efi_loaded_image *loaded_image;
>         efi_status_t ret;
>
> -       systable = systab;
> -       boottime = systable->boottime;
> -       runtime = systable->runtime;
> +       st_systable = systab;
> +       st_boottime = st_systable->boottime;
> +       runtime = st_systable->runtime;
>         handle = image_handle;
> -       con_out = systable->con_out;
> -       con_in = systable->con_in;
> +       con_out = st_systable->con_out;
> +       con_in = st_systable->con_in;
>
> -       ret = boottime->handle_protocol(image_handle, &efi_guid_loaded_image,
> +       ret = st_boottime->handle_protocol(image_handle, &efi_guid_loaded_image,
>                                         (void **)&loaded_image);
>         if (ret != EFI_SUCCESS) {
>                 efi_st_error("Cannot open loaded image protocol\n");
> @@ -280,9 +280,9 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
>                         list_all_tests();
>                         /*
>                          * TODO:
> -                        * Once the Exit boottime service is correctly
> +                        * Once the Exit st_boottime service is correctly
>                          * implemented we should call
> -                        *   boottime->exit(image_handle, EFI_SUCCESS, 0, NULL);
> +                        *   st_boottime->exit(image_handle, EFI_SUCCESS, 0, NULL);
>                          * here, cf.
>                          * https://lists.denx.de/pipermail/u-boot/2017-October/308720.html
>                          */
> @@ -300,7 +300,7 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
>                                              efi_unit_test));
>
>         /* Allocate buffer for setup results */
> -       ret = boottime->allocate_pool(EFI_RUNTIME_SERVICES_DATA, sizeof(int) *
> +       ret = st_boottime->allocate_pool(EFI_RUNTIME_SERVICES_DATA, sizeof(int) *
>                                       ll_entry_count(struct efi_unit_test,
>                                                      efi_unit_test),
>                                       (void **)&setup_status);
> @@ -309,7 +309,7 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
>                 return ret;
>         }
>
> -       /* Execute boottime tests */
> +       /* Execute st_boottime tests */
>         efi_st_do_tests(testname, EFI_EXECUTE_BEFORE_BOOTTIME_EXIT,
>                         EFI_ST_SETUP | EFI_ST_EXECUTE | EFI_ST_TEARDOWN,
>                         &failures);
> diff --git a/lib/efi_selftest/efi_selftest_fdt.c b/lib/efi_selftest/efi_selftest_fdt.c
> index 114ac58bf5..aa3b13ae3a 100644
> --- a/lib/efi_selftest/efi_selftest_fdt.c
> +++ b/lib/efi_selftest/efi_selftest_fdt.c
> @@ -144,23 +144,6 @@ static char *get_property(const u16 *property, const u16 *node)
>         return NULL;
>  }
>
> -/**
> - * efi_st_get_config_table() - get configuration table
> - *
> - * @guid:      GUID of the configuration table
> - * Return:     pointer to configuration table or NULL
> - */
> -static void *efi_st_get_config_table(const efi_guid_t *guid)
> -{
> -       size_t i;
> -
> -       for (i = 0; i < systab.nr_tables; i++) {
> -               if (!guidcmp(guid, &systemtab->tables[i].guid))
> -                       return systemtab->tables[i].table;
> -       }
> -       return NULL;
> -}
> -
>  /*
>   * Setup unit test.
>   *
> diff --git a/lib/efi_selftest/efi_selftest_util.c b/lib/efi_selftest/efi_selftest_util.c
> index dba02d6b56..7e03e0c939 100644
> --- a/lib/efi_selftest/efi_selftest_util.c
> +++ b/lib/efi_selftest/efi_selftest_util.c
> @@ -110,3 +110,14 @@ int efi_st_strcmp_16_8(const u16 *buf1, const char *buf2)
>         }
>         return 0;
>  }
> +
> +void *efi_st_get_config_table(const efi_guid_t *guid)
> +{
> +       size_t i;
> +
> +       for (i = 0; i < st_systable->nr_tables; i++) {
> +               if (!guidcmp(guid, &st_systable->tables[i].guid))
> +                       return st_systable->tables[i].table;
> +       }
> +       return NULL;
> +}
> --
> 2.37.2
>

Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>


More information about the U-Boot mailing list