[PATCH v2 11/12] efi: Support showing tables

Heinrich Schuchardt xypron.glpk at gmx.de
Sun Mar 19 17:43:02 CET 2023


On 3/10/23 21:49, Simon Glass wrote:
> Add a command (for the app and payload) to display the tables provided
> by EFI.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> Changes in v2:
> - Make use of common code
>
>   cmd/Makefile          |  2 +-
>   cmd/efi.c             | 33 ++++++++++++++++++++++++++++++++-
>   doc/usage/cmd/efi.rst | 22 ++++++++++++++++++++++
>   3 files changed, 55 insertions(+), 2 deletions(-)
>
> diff --git a/cmd/Makefile b/cmd/Makefile
> index 1c5c6f3c00c..a0bfa2acefe 100644
> --- a/cmd/Makefile
> +++ b/cmd/Makefile
> @@ -62,7 +62,7 @@ obj-$(CONFIG_CMD_EXTENSION) += extension_board.o
>   obj-$(CONFIG_CMD_ECHO) += echo.o
>   obj-$(CONFIG_ENV_IS_IN_EEPROM) += eeprom.o
>   obj-$(CONFIG_CMD_EEPROM) += eeprom.o
> -obj-$(CONFIG_EFI) += efi.o
> +obj-$(CONFIG_EFI) += efi.o efi_common.o
>   obj-$(CONFIG_CMD_EFIDEBUG) += efidebug.o efi_common.o
>   obj-$(CONFIG_CMD_EFICONFIG) += eficonfig.o
>   ifdef CONFIG_CMD_EFICONFIG
> diff --git a/cmd/efi.c b/cmd/efi.c
> index c0384e0db28..4d0edfa7f27 100644
> --- a/cmd/efi.c
> +++ b/cmd/efi.c
> @@ -7,10 +7,12 @@
>   #include <common.h>
>   #include <command.h>
>   #include <efi.h>
> +#include <efi_api.h>
>   #include <errno.h>
>   #include <log.h>
>   #include <malloc.h>
>   #include <sort.h>
> +#include <uuid.h>
>   #include <asm/global_data.h>
>
>   DECLARE_GLOBAL_DATA_PTR;
> @@ -273,8 +275,36 @@ done:
>   	return ret ? CMD_RET_FAILURE : 0;
>   }
>
> +static int do_efi_tables(struct cmd_tbl *cmdtp, int flag, int argc,
> +			 char *const argv[])
> +{
> +	struct efi_system_table *systab;
> +
> +	if (IS_ENABLED(CONFIG_EFI_APP)) {
> +		systab = efi_get_sys_table();
> +		if (!systab) {
> +			printf("Cannot read system table\n");
> +			return CMD_RET_FAILURE;
> +		}
> +	} else {
> +		int size;
> +		int ret;
> +
> +		ret = efi_info_get(EFIET_SYS_TABLE, (void **)&systab, &size);
> +		if (ret) {
> +			printf("Cannot find EFI system table (err=%d)\n", ret);
> +			return CMD_RET_FAILURE;

Wouldn't U-Boot have failed earlier if there is no system table?

Best regards

Heinrich

> +		}
> +	}
> +
> +	efi_show_tables(systab);
> +
> +	return 0;
> +}
> +
>   static struct cmd_tbl efi_commands[] = {
>   	U_BOOT_CMD_MKENT(mem, 1, 1, do_efi_mem, "", ""),
> +	U_BOOT_CMD_MKENT(tables, 1, 1, do_efi_tables, "", ""),
>   };
>
>   static int do_efi(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
> @@ -298,5 +328,6 @@ static int do_efi(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>   U_BOOT_CMD(
>   	efi,     3,      1,      do_efi,
>   	"EFI access",
> -	"mem [all]        Dump memory information [include boot services]"
> +	"mem [all]        Dump memory information [include boot services]\n"
> +	"tables               Dump tables"
>   );
> diff --git a/doc/usage/cmd/efi.rst b/doc/usage/cmd/efi.rst
> index c029c423879..ef37ff2f4c1 100644
> --- a/doc/usage/cmd/efi.rst
> +++ b/doc/usage/cmd/efi.rst
> @@ -10,6 +10,7 @@ Synopsis
>   ::
>
>       efi mem [all]
> +    efi tables
>
>   Description
>   -----------
> @@ -54,6 +55,14 @@ Attributes
>       Shows a code for memory attributes. The key for this is shown below the
>       table.
>
> +efi tables
> +~~~~~~~~~~
> +
> +This shows a list of the EFI tables provided in the system table. These use
> +GUIDs so it is not possible in general to show the name of a table. But some
> +effort is made to provide a useful table, where the GUID is known by U-Boot.
> +
> +
>   Example
>   -------
>
> @@ -195,3 +204,16 @@ Example
>        f: uncached, write-coalescing, write-through, write-back
>       rf: uncached, write-coalescing, write-through, write-back, needs runtime mapping
>        1: uncached
> +
> +
> +    => efi tables
> +    000000001f8edf98  ee4e5898-3914-4259-9d6e-dc7bd79403cf  EFI_LZMA_COMPRESSED
> +    000000001ff2ace0  05ad34ba-6f02-4214-952e-4da0398e2bb9  EFI_DXE_SERVICES
> +    000000001f8ea018  7739f24c-93d7-11d4-9a3a-0090273fc14d  EFI_HOB_LIST
> +    000000001ff2bac0  4c19049f-4137-4dd3-9c10-8b97a83ffdfa  EFI_MEMORY_TYPE
> +    000000001ff2cb10  49152e77-1ada-4764-b7a2-7afefed95e8b  (unknown)
> +    000000001f9ac018  060cc026-4c0d-4dda-8f41-595fef00a502  EFI_MEM_STATUS_CODE_REC
> +    000000001f9ab000  eb9d2d31-2d88-11d3-9a16-0090273fc14d  SMBIOS table
> +    000000001fb7e000  eb9d2d30-2d88-11d3-9a16-0090273fc14d  EFI_GUID_EFI_ACPI1
> +    000000001fb7e014  8868e871-e4f1-11d3-bc22-0080c73c8881  ACPI table
> +    000000001e654018  dcfa911d-26eb-469f-a220-38b7dc461220  (unknown)



More information about the U-Boot mailing list