summaryrefslogtreecommitdiff
path: root/fs/sandbox/host_bootdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/sandbox/host_bootdev.c')
-rw-r--r--fs/sandbox/host_bootdev.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/fs/sandbox/host_bootdev.c b/fs/sandbox/host_bootdev.c
new file mode 100644
index 0000000000..0d12ee4ef7
--- /dev/null
+++ b/fs/sandbox/host_bootdev.c
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Bootdevice for MMC
+ *
+ * Copyright 2021 Google LLC
+ * Written by Simon Glass <sjg@chromium.org>
+ */
+
+#include <common.h>
+#include <bootdev.h>
+#include <bootflow.h>
+#include <bootmeth.h>
+#include <dm.h>
+#include <fs.h>
+
+static int host_get_bootflow(struct udevice *dev, struct bootflow_iter *iter,
+ struct bootflow *bflow)
+{
+ int ret;
+
+ if (iter->part)
+ return log_msg_ret("max", -ESHUTDOWN);
+
+ bflow->name = strdup(dev->name);
+ if (!bflow->name)
+ return log_msg_ret("name", -ENOMEM);
+
+ ret = bootmeth_check(bflow->method, iter);
+ if (ret)
+ return log_msg_ret("check", ret);
+
+ bflow->state = BOOTFLOWST_MEDIA;
+ bflow->fs_type = FS_TYPE_SANDBOX;
+
+ ret = bootmeth_read_bootflow(bflow->method, bflow);
+ if (ret)
+ return log_msg_ret("method", ret);
+
+ return 0;
+}
+
+struct bootdev_ops host_bootdev_ops = {
+ .get_bootflow = host_get_bootflow,
+};
+
+static const struct udevice_id host_bootdev_ids[] = {
+ { .compatible = "sandbox,bootdev-host" },
+ { }
+};
+
+U_BOOT_DRIVER(host_bootdev) = {
+ .name = "host_bootdev",
+ .id = UCLASS_BOOTDEV,
+ .ops = &host_bootdev_ops,
+ .of_match = host_bootdev_ids,
+};