The 'bootflow list' command supports looking at the EFI device-path when
available. Move this piece into a common function so it can be used
elsewhere.

This updates the output from 'bootflow list'.

Signed-off-by: Simon Glass <[email protected]>
---

Changes in v5:
- Move 'usb' rename into a separate patch

 boot/bootflow.c    | 16 ++++++++++++++++
 cmd/bootflow.c     |  8 +++++---
 include/bootflow.h |  8 ++++++++
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/boot/bootflow.c b/boot/bootflow.c
index 15df7069209..6485d473d69 100644
--- a/boot/bootflow.c
+++ b/boot/bootflow.c
@@ -11,6 +11,7 @@
 #include <bootmeth.h>
 #include <bootstd.h>
 #include <dm.h>
+#include <efi_device_path.h>
 #include <env_internal.h>
 #include <malloc.h>
 #include <serial.h>
@@ -1010,3 +1011,18 @@ int bootflow_get_seq(const struct bootflow *bflow)
 
        return alist_calc_index(&std->bootflows, bflow);
 }
+
+const char *bootflow_guess_label(const struct bootflow *bflow)
+{
+       const char *name = NULL;
+
+       if (bflow->dev) {
+               struct udevice *media = dev_get_parent(bflow->dev);
+
+               name = dev_get_uclass_name(media);
+       }
+       if (!name)
+               name = "(none)";
+
+       return name;
+}
diff --git a/cmd/bootflow.c b/cmd/bootflow.c
index 551dffbb8b8..5b803d4ace5 100644
--- a/cmd/bootflow.c
+++ b/cmd/bootflow.c
@@ -70,10 +70,12 @@ static void report_bootflow_err(struct bootflow *bflow, int 
err)
  */
 static void show_bootflow(int index, struct bootflow *bflow, bool errors)
 {
+       const char *name = bootflow_guess_label(bflow);
+
        printf("%3x  %-11s  %-6s  %-9.9s %4x  %-25.25s %s\n", index,
-              bflow->method->name, bootflow_state_get_name(bflow->state),
-              bflow->dev ? dev_get_uclass_name(dev_get_parent(bflow->dev)) :
-              "(none)", bflow->part, bflow->name, bflow->fname ?: "");
+              bflow->method ? bflow->method->name : "(none)",
+              bootflow_state_get_name(bflow->state), name, bflow->part,
+              bflow->name, bflow->fname ?: "");
        if (errors)
                report_bootflow_err(bflow, bflow->err);
 }
diff --git a/include/bootflow.h b/include/bootflow.h
index 2ef6eb25cf5..657e3731f11 100644
--- a/include/bootflow.h
+++ b/include/bootflow.h
@@ -692,4 +692,12 @@ int bootflow_menu_start(struct bootstd_priv *std, bool 
text_mode,
  */
 int bootflow_menu_poll(struct expo *exp, int *seqp);
 
+/**
+ * bootflow_guess_label() - Produce a plausible label for a bootflow
+ *
+ * This uses the uclass name or EFI device-path to come up with a useful label
+ * for display to the user. Ideally it will say "mmc", "usb", nvme", etc.
+ */
+const char *bootflow_guess_label(const struct bootflow *bflow);
+
 #endif
-- 
2.43.0

Reply via email to