diff options
author | Ahmad Fatoum <a.fatoum@pengutronix.de> | 2021-05-03 13:48:51 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-05-12 07:59:59 +0200 |
commit | ff40047b3b6300015a8cc2c6a3e0989676250dbd (patch) | |
tree | 3d72f5c86f9be264098d1fcf2452abd8e7369a35 /common/system-partitions.c | |
parent | 15e26bb72b334da1830c26917e28ffcac64e8e4c (diff) | |
download | barebox-ff40047b3b6300015a8cc2c6a3e0989676250dbd.tar.gz barebox-ff40047b3b6300015a8cc2c6a3e0989676250dbd.tar.xz |
common: add generic system partitions interface
Both Fastboot and DFU have their own global variables that allow
specifying the partitions that can be flashed via the environment.
With the upcoming addition of the USB mass storage gadget, we will need
some way to define the partitions there as well.
Instead of adding yet another way download method-specific variable,
add a generic global.system.partitions variable that can be specified on a
per-board basis and can be used for all methods.
Existing variables will still remain for backwards-compatibility, but
when unset, it should fall back to this new parameter. This is done
in the follow-up patches.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.barebox.org/20210503114901.13095-7-a.fatoum@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/system-partitions.c')
-rw-r--r-- | common/system-partitions.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/common/system-partitions.c b/common/system-partitions.c new file mode 100644 index 0000000000..547e08a9f3 --- /dev/null +++ b/common/system-partitions.c @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2021 Ahmad Fatoum, Pengutronix + */ + +#include <file-list.h> +#include <param.h> +#include <globalvar.h> +#include <init.h> +#include <magicvar.h> +#include <system-partitions.h> + +static struct file_list *system_partitions; + +bool system_partitions_empty(void) +{ + return file_list_empty(system_partitions); +} + +struct file_list *system_partitions_get(void) +{ + return file_list_dup(system_partitions); +} + +void system_partitions_set(struct file_list *files) +{ + file_list_free(system_partitions); + system_partitions = files; +} + +static int system_partitions_var_init(void) +{ + struct param_d *param; + + system_partitions = file_list_parse(""); + param = dev_add_param_file_list(&global_device, "system.partitions", + NULL, NULL, &system_partitions, NULL); + + return PTR_ERR_OR_ZERO(param); +} +postcore_initcall(system_partitions_var_init); + +BAREBOX_MAGICVAR(global.system.partitions, + "board-specific list of updatable partitions"); |