summaryrefslogtreecommitdiff
path: root/boot/vbe_common.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2025-01-15 18:27:07 -0700
committerTom Rini <trini@konsulko.com>2025-01-22 09:47:49 -0600
commit190b128252b3861865d63c73ac9f13731aeb950f (patch)
treedeeb19dfcf4eb935f234aac0141ade0222ecd6da /boot/vbe_common.c
parent27008ce51388faa448bf7b20b7e8104b8bc972a6 (diff)
vbe: Create a common function to get the block device
Add a vbe_get_blk() function and use it to obtain the block device used by VBE. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'boot/vbe_common.c')
-rw-r--r--boot/vbe_common.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/boot/vbe_common.c b/boot/vbe_common.c
new file mode 100644
index 00000000000..ede452ba306
--- /dev/null
+++ b/boot/vbe_common.c
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Verified Boot for Embedded (VBE) common functions
+ *
+ * Copyright 2024 Google LLC
+ * Written by Simon Glass <sjg@chromium.org>
+ */
+
+#include <part.h>
+#include <vsprintf.h>
+#include "vbe_common.h"
+
+int vbe_get_blk(const char *storage, struct udevice **blkp)
+{
+ struct blk_desc *desc;
+ char devname[16];
+ const char *end;
+ int devnum;
+
+ /* First figure out the block device */
+ log_debug("storage=%s\n", storage);
+ devnum = trailing_strtoln_end(storage, NULL, &end);
+ if (devnum == -1)
+ return log_msg_ret("num", -ENODEV);
+ if (end - storage >= sizeof(devname))
+ return log_msg_ret("end", -E2BIG);
+ strlcpy(devname, storage, end - storage + 1);
+ log_debug("dev=%s, %x\n", devname, devnum);
+
+ desc = blk_get_dev(devname, devnum);
+ if (!desc)
+ return log_msg_ret("get", -ENXIO);
+ *blkp = desc->bdev;
+
+ return 0;
+}