bootstd: Provide a bootmeth method to obtain state info

Some bootmeths can provide information about what is available to boot.
For example, VBE simple provides access to the firmware state.

Add a new method for this, along with a sandbox test.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/boot/bootmeth-uclass.c b/boot/bootmeth-uclass.c
index b8ba4ec..1e276c0 100644
--- a/boot/bootmeth-uclass.c
+++ b/boot/bootmeth-uclass.c
@@ -20,6 +20,16 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+int bootmeth_get_state_desc(struct udevice *dev, char *buf, int maxsize)
+{
+	const struct bootmeth_ops *ops = bootmeth_get_ops(dev);
+
+	if (!ops->get_state_desc)
+		return -ENOSYS;
+
+	return ops->get_state_desc(dev, buf, maxsize);
+}
+
 int bootmeth_check(struct udevice *dev, struct bootflow_iter *iter)
 {
 	const struct bootmeth_ops *ops = bootmeth_get_ops(dev);
diff --git a/boot/bootmeth_distro.c b/boot/bootmeth_distro.c
index 2b41e65..fea09b2 100644
--- a/boot/bootmeth_distro.c
+++ b/boot/bootmeth_distro.c
@@ -22,6 +22,19 @@
 #include <mmc.h>
 #include <pxe_utils.h>
 
+static int distro_get_state_desc(struct udevice *dev, char *buf, int maxsize)
+{
+	if (IS_ENABLED(CONFIG_SANDBOX)) {
+		int len;
+
+		len = snprintf(buf, maxsize, "OK");
+
+		return len + 1 < maxsize ? 0 : -ENOSPC;
+	}
+
+	return 0;
+}
+
 static int disto_getfile(struct pxe_context *ctx, const char *file_path,
 			 char *file_addr, ulong *sizep)
 {
@@ -123,6 +136,7 @@
 }
 
 static struct bootmeth_ops distro_bootmeth_ops = {
+	.get_state_desc	= distro_get_state_desc,
 	.check		= distro_check,
 	.read_bootflow	= distro_read_bootflow,
 	.read_file	= bootmeth_common_read_file,