Re: [PATCH 09/10] efi: Support showing tables

2023-03-10 Thread Simon Glass
Hi Heinrich,

On Mon, 6 Mar 2023 at 01:39, Heinrich Schuchardt  wrote:
>
> On 2/26/23 02:33, Simon Glass wrote:
> > Add a command to display the tables provided by EFI.
> >
> > Signed-off-by: Simon Glass 
> > ---
> >
> >   cmd/efi.c | 40 +++-
> >   doc/usage/cmd/efi.rst | 22 ++
> >   2 files changed, 61 insertions(+), 1 deletion(-)
> >
> > diff --git a/cmd/efi.c b/cmd/efi.c
> > index c0384e0db28..86988d9e9e2 100644
> > --- a/cmd/efi.c
> > +++ b/cmd/efi.c
> > @@ -7,10 +7,12 @@
> >   #include 
> >   #include 
> >   #include 
> > +#include 
> >   #include 
> >   #include 
> >   #include 
> >   #include 
> > +#include 
> >   #include 
> >
> >   DECLARE_GLOBAL_DATA_PTR;
> > @@ -273,8 +275,43 @@ done:
> >   return ret ? CMD_RET_FAILURE : 0;
> >   }
> >
> > +static int do_efi_tables(struct cmd_tbl *cmdtp, int flag, int argc,
> > +  char *const argv[])
>
>
> We already have function do_efi_show_tables() to print the list of EFI
> configuration tables. Please, avoid code duplication.

OK I created a separate file.

Of course the 'efidebug' command cannot be used in the app or payload,
since it did not create the systab.

>
> > +{
> > + struct efi_system_table *systab;
> > + int i;
> > +
> > + 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 **), );
> > + if (ret) {
> > + printf("Cannot find EFI system table (err=%d)\n", 
> > ret);
> > + return CMD_RET_FAILURE;
> > + }
> > + }
> > + for (i = 0; i < systab->nr_tables; i++) {
> > + struct efi_configuration_table *tab = >tables[i];
> > + char guid_str[37];
> > +
> > + uuid_bin_to_str(tab->guid.b, guid_str, 1);
> > + printf("%p  %s  %s\n", tab->table, guid_str,
> > +uuid_guid_get_str(tab->guid.b));
>
>
> do_efi_show_tables() does this with printf("%pUl (%pUs)\n",..).
>
> > + }
> > +
> > + 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 +335,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..2424d3bb587 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
> > +1f8eda98  ee4e5898-3914-4259-9d6e-dc7bd79403cf  
> > EFI_LZMA_COMPRESSED
> > +1ff2ace0  05ad34ba-6f02-4214-952e-4da0398e2bb9  
> > EFI_DXE_SERVICES
> > +1f8ea018  7739f24c-93d7-11d4-9a3a-0090273fc14d  EFI_HOB_LIST
> > +1ff2bac0  4c19049f-4137-4dd3-9c10-8b97a83ffdfa  EFI_MEMORY_TYPE
> > +1ff2cb10  49152e77-1ada-4764-b7a2-7afefed95e8b  
>
> This is what 'efi tables' / printf("%pUl (%pUs)\n",..). would output for
> an unknown table:
>
> 8868e871-e4f1-11d3-bc22-0080c73c8881 (8868e871-e4f1-11d3-bc22-0080c73c8881)
>
> Maybe uuid_guid_get_str() should return an empty string in case of an
> unknown GUID.

OK

>
> > +1f9ac018  060cc026-4c0d-4dda-8f41-595fef00a502  
> > EFI_MEM_STATUS_CODE_REC
> > +1f9ab000  eb9d2d31-2d88-11d3-9a16-0090273fc14d  EFI_SMBIOS
> > +1fb7e000  eb9d2d30-2d88-11d3-9a16-0090273fc14d  
> > 

Re: [PATCH 09/10] efi: Support showing tables

2023-03-06 Thread Heinrich Schuchardt

On 2/26/23 02:33, Simon Glass wrote:

Add a command to display the tables provided by EFI.

Signed-off-by: Simon Glass 
---

  cmd/efi.c | 40 +++-
  doc/usage/cmd/efi.rst | 22 ++
  2 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/cmd/efi.c b/cmd/efi.c
index c0384e0db28..86988d9e9e2 100644
--- a/cmd/efi.c
+++ b/cmd/efi.c
@@ -7,10 +7,12 @@
  #include 
  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
  #include 
+#include 
  #include 

  DECLARE_GLOBAL_DATA_PTR;
@@ -273,8 +275,43 @@ done:
return ret ? CMD_RET_FAILURE : 0;
  }

+static int do_efi_tables(struct cmd_tbl *cmdtp, int flag, int argc,
+char *const argv[])



We already have function do_efi_show_tables() to print the list of EFI
configuration tables. Please, avoid code duplication.


+{
+   struct efi_system_table *systab;
+   int i;
+
+   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 **), );
+   if (ret) {
+   printf("Cannot find EFI system table (err=%d)\n", ret);
+   return CMD_RET_FAILURE;
+   }
+   }
+   for (i = 0; i < systab->nr_tables; i++) {
+   struct efi_configuration_table *tab = >tables[i];
+   char guid_str[37];
+
+   uuid_bin_to_str(tab->guid.b, guid_str, 1);
+   printf("%p  %s  %s\n", tab->table, guid_str,
+  uuid_guid_get_str(tab->guid.b));



do_efi_show_tables() does this with printf("%pUl (%pUs)\n",..).


+   }
+
+   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 +335,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..2424d3bb587 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
+1f8eda98  ee4e5898-3914-4259-9d6e-dc7bd79403cf  EFI_LZMA_COMPRESSED
+1ff2ace0  05ad34ba-6f02-4214-952e-4da0398e2bb9  EFI_DXE_SERVICES
+1f8ea018  7739f24c-93d7-11d4-9a3a-0090273fc14d  EFI_HOB_LIST
+1ff2bac0  4c19049f-4137-4dd3-9c10-8b97a83ffdfa  EFI_MEMORY_TYPE
+1ff2cb10  49152e77-1ada-4764-b7a2-7afefed95e8b  


This is what 'efi tables' / printf("%pUl (%pUs)\n",..). would output for
an unknown table:

8868e871-e4f1-11d3-bc22-0080c73c8881 (8868e871-e4f1-11d3-bc22-0080c73c8881)

Maybe uuid_guid_get_str() should return an empty string in case of an
unknown GUID.


+1f9ac018  060cc026-4c0d-4dda-8f41-595fef00a502  
EFI_MEM_STATUS_CODE_REC
+1f9ab000  eb9d2d31-2d88-11d3-9a16-0090273fc14d  EFI_SMBIOS
+1fb7e000  eb9d2d30-2d88-11d3-9a16-0090273fc14d  EFI_GUID_EFI_ACPI1
+1fb7e014  8868e871-e4f1-11d3-bc22-0080c73c8881  EFI_GUID_EFI_ACPI2
+1e550018  dcfa911d-26eb-469f-a220-38b7dc461220  


Who would care about the address of the table?

Best regards

Heinrich




[PATCH 09/10] efi: Support showing tables

2023-02-25 Thread Simon Glass
Add a command to display the tables provided by EFI.

Signed-off-by: Simon Glass 
---

 cmd/efi.c | 40 +++-
 doc/usage/cmd/efi.rst | 22 ++
 2 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/cmd/efi.c b/cmd/efi.c
index c0384e0db28..86988d9e9e2 100644
--- a/cmd/efi.c
+++ b/cmd/efi.c
@@ -7,10 +7,12 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
 #include 
+#include 
 #include 
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -273,8 +275,43 @@ 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;
+   int i;
+
+   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 **), );
+   if (ret) {
+   printf("Cannot find EFI system table (err=%d)\n", ret);
+   return CMD_RET_FAILURE;
+   }
+   }
+   for (i = 0; i < systab->nr_tables; i++) {
+   struct efi_configuration_table *tab = >tables[i];
+   char guid_str[37];
+
+   uuid_bin_to_str(tab->guid.b, guid_str, 1);
+   printf("%p  %s  %s\n", tab->table, guid_str,
+  uuid_guid_get_str(tab->guid.b));
+   }
+
+   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 +335,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..2424d3bb587 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
+1f8eda98  ee4e5898-3914-4259-9d6e-dc7bd79403cf  EFI_LZMA_COMPRESSED
+1ff2ace0  05ad34ba-6f02-4214-952e-4da0398e2bb9  EFI_DXE_SERVICES
+1f8ea018  7739f24c-93d7-11d4-9a3a-0090273fc14d  EFI_HOB_LIST
+1ff2bac0  4c19049f-4137-4dd3-9c10-8b97a83ffdfa  EFI_MEMORY_TYPE
+1ff2cb10  49152e77-1ada-4764-b7a2-7afefed95e8b  
+1f9ac018  060cc026-4c0d-4dda-8f41-595fef00a502  
EFI_MEM_STATUS_CODE_REC
+1f9ab000  eb9d2d31-2d88-11d3-9a16-0090273fc14d  EFI_SMBIOS
+1fb7e000  eb9d2d30-2d88-11d3-9a16-0090273fc14d  EFI_GUID_EFI_ACPI1
+1fb7e014  8868e871-e4f1-11d3-bc22-0080c73c8881  EFI_GUID_EFI_ACPI2
+1e550018  dcfa911d-26eb-469f-a220-38b7dc461220  
-- 
2.39.2.637.g21b0678d19-goog