mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
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:
parent
5907c81647
commit
47903aacc5
5 changed files with 43 additions and 41 deletions
|
@ -32,31 +32,6 @@ enum {
|
||||||
BOOT_TARGETS_MAX_LEN = 100,
|
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)
|
int bootdev_first_bootflow(struct udevice *dev, struct bootflow **bflowp)
|
||||||
{
|
{
|
||||||
struct bootdev_uc_plat *ucp = dev_get_uclass_plat(dev);
|
struct bootdev_uc_plat *ucp = dev_get_uclass_plat(dev);
|
||||||
|
|
|
@ -61,6 +61,31 @@ void bootstd_clear_glob(void)
|
||||||
bootstd_clear_glob_(std);
|
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)
|
static int bootstd_remove(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct bootstd_priv *priv = dev_get_priv(dev);
|
struct bootstd_priv *priv = dev_get_priv(dev);
|
||||||
|
|
|
@ -207,7 +207,7 @@ static int do_bootflow_scan(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
bflow.err = ret;
|
bflow.err = ret;
|
||||||
if (!ret)
|
if (!ret)
|
||||||
num_valid++;
|
num_valid++;
|
||||||
ret = bootdev_add_bootflow(&bflow);
|
ret = bootstd_add_bootflow(&bflow);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printf("Out of memory\n");
|
printf("Out of memory\n");
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
|
|
|
@ -195,21 +195,6 @@ void bootdev_list(bool probe);
|
||||||
*/
|
*/
|
||||||
void bootdev_clear_bootflows(struct udevice *dev);
|
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
|
* bootdev_first_bootflow() - Get the first bootflow from a bootdev
|
||||||
*
|
*
|
||||||
|
|
|
@ -105,4 +105,21 @@ void bootstd_clear_glob(void);
|
||||||
*/
|
*/
|
||||||
int bootstd_prog_boot(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
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue