bootstd: Move bootflow-adding to bootstd

This relates to more than just the bootdev, since there is a global list
of bootflows. Move the function to the bootstd file and rename it.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2024-11-15 16:19:08 -07:00 committed by Tom Rini
parent 5907c81647
commit 47903aacc5
5 changed files with 43 additions and 41 deletions

View file

@ -32,31 +32,6 @@ enum {
BOOT_TARGETS_MAX_LEN = 100,
};
int bootdev_add_bootflow(struct bootflow *bflow)
{
struct bootstd_priv *std;
struct bootflow *new;
int ret;
ret = bootstd_get_priv(&std);
if (ret)
return ret;
new = malloc(sizeof(*bflow));
if (!new)
return log_msg_ret("bflow", -ENOMEM);
memcpy(new, bflow, sizeof(*bflow));
list_add_tail(&new->glob_node, &std->glob_head);
if (bflow->dev) {
struct bootdev_uc_plat *ucp = dev_get_uclass_plat(bflow->dev);
list_add_tail(&new->bm_node, &ucp->bootflow_head);
}
return 0;
}
int bootdev_first_bootflow(struct udevice *dev, struct bootflow **bflowp)
{
struct bootdev_uc_plat *ucp = dev_get_uclass_plat(dev);

View file

@ -61,6 +61,31 @@ void bootstd_clear_glob(void)
bootstd_clear_glob_(std);
}
int bootstd_add_bootflow(struct bootflow *bflow)
{
struct bootstd_priv *std;
struct bootflow *new;
int ret;
ret = bootstd_get_priv(&std);
if (ret)
return ret;
new = malloc(sizeof(*bflow));
if (!new)
return log_msg_ret("bflow", -ENOMEM);
memcpy(new, bflow, sizeof(*bflow));
list_add_tail(&new->glob_node, &std->glob_head);
if (bflow->dev) {
struct bootdev_uc_plat *ucp = dev_get_uclass_plat(bflow->dev);
list_add_tail(&new->bm_node, &ucp->bootflow_head);
}
return 0;
}
static int bootstd_remove(struct udevice *dev)
{
struct bootstd_priv *priv = dev_get_priv(dev);

View file

@ -207,7 +207,7 @@ static int do_bootflow_scan(struct cmd_tbl *cmdtp, int flag, int argc,
bflow.err = ret;
if (!ret)
num_valid++;
ret = bootdev_add_bootflow(&bflow);
ret = bootstd_add_bootflow(&bflow);
if (ret) {
printf("Out of memory\n");
return CMD_RET_FAILURE;

View file

@ -195,21 +195,6 @@ void bootdev_list(bool probe);
*/
void bootdev_clear_bootflows(struct udevice *dev);
/**
* bootdev_add_bootflow() - Add a bootflow to the bootdev's list
*
* All fields in @bflow must be set up. Note that @bflow->dev is used to add the
* bootflow to that device.
*
* @dev: Bootdev device to add to
* @bflow: Bootflow to add. Note that fields within bflow must be allocated
* since this function takes over ownership of these. This functions makes
* a copy of @bflow itself (without allocating its fields again), so the
* caller must dispose of the memory used by the @bflow pointer itself
* Return: 0 if OK, -ENOMEM if out of memory
*/
int bootdev_add_bootflow(struct bootflow *bflow);
/**
* bootdev_first_bootflow() - Get the first bootflow from a bootdev
*

View file

@ -105,4 +105,21 @@ void bootstd_clear_glob(void);
*/
int bootstd_prog_boot(void);
/**
* bootstd_add_bootflow() - Add a bootflow to the bootdev's and global list
*
* All fields in @bflow must be set up. Note that @bflow->dev is used to add the
* bootflow to that device.
*
* The bootflow is also added to the global list of all bootflows
*
* @dev: Bootdev device to add to
* @bflow: Bootflow to add. Note that fields within bflow must be allocated
* since this function takes over ownership of these. This functions makes
* a copy of @bflow itself (without allocating its fields again), so the
* caller must dispose of the memory used by the @bflow pointer itself
* Return: 0 if OK, -ENOMEM if out of memory
*/
int bootstd_add_bootflow(struct bootflow *bflow);
#endif