bootstd: Treat DHCP and PXE as bootdev labels

These are associated with the ethernet boot device but do not match its
uclass name, so handle them as special cases.

Provide a way to pass flags through with the bootdev so that we know
how to process it. The flags are checked by the bootmeths, to ensure that
only the selected bootmeth is used.

While these both use the network device, they work quite differently. It
is common to run only one of these, or to run PXE before DHCP. Provide
bootflow flags to control which methods are used. Check these in the two
bootmeths so that only the chosen one is used.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2023-01-17 10:48:05 -07:00 committed by Tom Rini
parent 5143a41e10
commit d9f48579dc
10 changed files with 81 additions and 34 deletions

View file

@ -222,19 +222,26 @@ int bootdev_next_bootflow(struct bootflow **bflowp);
* @label: Label to look up (e.g. "mmc1" or "mmc0")
* @devp: Returns the bootdev device found, or NULL if none (note it does not
* return the media device, but its bootdev child)
* @method_flagsp: If non-NULL, returns any flags implied by the label
* (enum bootflow_meth_flags_t), 0 if none. Unset if function fails
* Return: 0 if OK, -EINVAL if the uclass is not supported by this board,
* -ENOENT if there is no device with that number
* -ENOENT if there is no device with that number
*/
int bootdev_find_by_label(const char *label, struct udevice **devp);
int bootdev_find_by_label(const char *label, struct udevice **devp,
int *method_flagsp);
/**
* bootdev_find_by_any() - Find a bootdev by name, label or sequence
*
* @name: name (e.g. "mmc2.bootdev"), label ("mmc2"), or sequence ("2") to find
* @devp: returns the device found, on success
* Return: 0 if OK, -ve on error
* @method_flagsp: If non-NULL, returns any flags implied by the label
* (enum bootflow_meth_flags_t), 0 if none. Unset if function fails
* Return: 0 if OK, -EINVAL if the uclass is not supported by this board,
* -ENOENT if there is no device with that number
*/
int bootdev_find_by_any(const char *name, struct udevice **devp);
int bootdev_find_by_any(const char *name, struct udevice **devp,
int *method_flagsp);
/**
* bootdev_setup_iter_order() - Set up the ordering of bootdevs to scan