summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2023-01-17 20:48:10 +0300
committerTom Rini <trini@konsulko.com>2023-01-24 02:11:41 +0300
commite4b694893f6cf1e4ac934f2ecb57c8e77a17e5b2 (patch)
tree6e416edec8454b22ebc3c459898b56742b857c40 /include
parent66e3dce78750f6fc4f6a402ce62c20ba95976dd1 (diff)
downloadu-boot-e4b694893f6cf1e4ac934f2ecb57c8e77a17e5b2.tar.xz
bootstd: Allow iterating to the next label in a list
Add a function which moves to the next label in a list of labels. This allows processing the boot_targets environment variable. This works using a new label list in the bootflow iterator. The logic to set this up is included in a subsequent commit. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include')
-rw-r--r--include/bootdev.h16
-rw-r--r--include/bootflow.h4
2 files changed, 20 insertions, 0 deletions
diff --git a/include/bootdev.h b/include/bootdev.h
index b1e320a7d8..300bc73642 100644
--- a/include/bootdev.h
+++ b/include/bootdev.h
@@ -333,6 +333,22 @@ int bootdev_hunt_prio(enum bootdev_prio_t prio, bool show);
int bootdev_hunt_and_find_by_label(const char *label, struct udevice **devp,
int *method_flagsp);
+/**
+ * bootdev_next_label() - Move to the next bootdev in the label sequence
+ *
+ * Looks through the remaining labels until it finds one that matches a bootdev.
+ * Bootdev scanners are used as needed. For example a label "mmc1" results in
+ * running the "mmc" bootdrv.
+ *
+ * @iter: Interation info, containing iter->cur_label
+ * @devp: New bootdev found, if any was found
+ * @method_flagsp: If non-NULL, returns any flags implied by the label
+ * (enum bootflow_meth_flags_t), 0 if none
+ * Returns 0 if OK, -ENODEV if no bootdev was found
+ */
+int bootdev_next_label(struct bootflow_iter *iter, struct udevice **devp,
+ int *method_flagsp);
+
#if CONFIG_IS_ENABLED(BOOTSTD)
/**
* bootdev_setup_for_dev() - Bind a new bootdev device (deprecated)
diff --git a/include/bootflow.h b/include/bootflow.h
index 81dbcd6754..8ab32ffd66 100644
--- a/include/bootflow.h
+++ b/include/bootflow.h
@@ -175,6 +175,8 @@ enum bootflow_meth_flags_t {
* @cur_dev: Current bootdev number, an index into @dev_order[]
* @dev_order: List of bootdevs to scan, in order of priority. The scan starts
* with the first one on the list
+ * @labels: List of labels to scan for bootdevs
+ * @cur_label: Current label being processed
* @num_methods: Number of bootmeth devices in @method_order
* @cur_method: Current method number, an index into @method_order
* @first_glob_method: First global method, if any, else -1
@@ -196,6 +198,8 @@ struct bootflow_iter {
int num_devs;
int cur_dev;
struct udevice **dev_order;
+ const char *const *labels;
+ int cur_label;
int num_methods;
int cur_method;
int first_glob_method;