[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