From 016082f85e30d1bc24c3c9713476e5e8d8584668 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 14 Aug 2013 21:16:21 +0200 Subject: globalvar: Allow to set initial value Calling globalvar_add_simple() and setting a value is more than common. Add a parameter for the initial value. Signed-off-by: Sascha Hauer --- arch/arm/boards/crystalfontz-cfa10036/hwdetect.c | 4 ++-- arch/arm/boards/vexpress/init.c | 3 +-- commands/bootm.c | 6 +++--- commands/global.c | 17 +---------------- common/globalvar.c | 12 ++++++++++-- common/reset_source.c | 4 ++-- include/globalvar.h | 4 ++-- net/dhcp.c | 2 +- 8 files changed, 22 insertions(+), 30 deletions(-) diff --git a/arch/arm/boards/crystalfontz-cfa10036/hwdetect.c b/arch/arm/boards/crystalfontz-cfa10036/hwdetect.c index 21199d6433..e28dd49fad 100644 --- a/arch/arm/boards/crystalfontz-cfa10036/hwdetect.c +++ b/arch/arm/boards/crystalfontz-cfa10036/hwdetect.c @@ -104,8 +104,8 @@ void cfa10036_detect_hw(void) return; } - globalvar_add_simple("board.variant"); - setenv("global.board.variant", board_name); + globalvar_add_simple("board.variant", board_name); + pr_info("Booting on a CFA10036 with %s\n", board_name); } diff --git a/arch/arm/boards/vexpress/init.c b/arch/arm/boards/vexpress/init.c index 2b2d085a54..6e4fa7248f 100644 --- a/arch/arm/boards/vexpress/init.c +++ b/arch/arm/boards/vexpress/init.c @@ -107,8 +107,7 @@ static int vexpress_devices_init(void) devfs_add_partition("nor0", 0x40000, 0x20000, DEVFS_PARTITION_FIXED, "env0"); - globalvar_add_simple("hostname"); - setenv("global.hostname", v2m_init->hostname); + globalvar_add_simple("hostname", v2m_init->hostname); return 0; } diff --git a/commands/bootm.c b/commands/bootm.c index 97a6698b9b..eefcae3a74 100644 --- a/commands/bootm.c +++ b/commands/bootm.c @@ -164,10 +164,10 @@ err_out: static int bootm_init(void) { - globalvar_add_simple("bootm.image"); - globalvar_add_simple("bootm.oftree"); + globalvar_add_simple("bootm.image", NULL); + globalvar_add_simple("bootm.oftree", NULL); if (IS_ENABLED(CONFIG_CMD_BOOTM_INITRD)) - globalvar_add_simple("bootm.initrd"); + globalvar_add_simple("bootm.initrd", NULL); return 0; } diff --git a/commands/global.c b/commands/global.c index 427a231a9e..c526e6571a 100644 --- a/commands/global.c +++ b/commands/global.c @@ -23,21 +23,6 @@ #include #include -static int globalvar_set(char* name, char* value) -{ - int ret; - - ret = globalvar_add_simple(name); - - if (value) { - char *tmp = asprintf("global.%s", name); - ret = setenv(tmp, value); - free(tmp); - } - - return ret ? 1 : 0; -} - static int do_global(int argc, char *argv[]) { int opt; @@ -72,7 +57,7 @@ static int do_global(int argc, char *argv[]) return 0; } - return globalvar_set(argv[0], value); + return globalvar_add_simple(argv[0], value); } BAREBOX_CMD_HELP_START(global) diff --git a/common/globalvar.c b/common/globalvar.c index abcd881adf..6fd1d88522 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -2,6 +2,8 @@ #include #include #include +#include +#include static struct device_d global_device = { .name = "global", @@ -61,9 +63,15 @@ void globalvar_set_match(const char *match, const char *val) * * add a new globalvar named 'name' */ -int globalvar_add_simple(const char *name) +int globalvar_add_simple(const char *name, const char *value) { - return globalvar_add(name, NULL, NULL, 0); + int ret; + + ret = globalvar_add(name, NULL, NULL, 0); + if (ret && ret != -EEXIST) + return ret; + + return dev_set_param(&global_device, name, value); } static int globalvar_init(void) diff --git a/common/reset_source.c b/common/reset_source.c index 2a7f9ff6cc..fdc30f4853 100644 --- a/common/reset_source.c +++ b/common/reset_source.c @@ -36,8 +36,8 @@ EXPORT_SYMBOL(set_reset_source); /* ensure this runs after the 'global' device is already registerd */ static int init_reset_source(void) { - globalvar_add_simple("system.reset"); - set_reset_source(RESET_UKWN); + globalvar_add_simple("system.reset", reset_src_names[RESET_UKWN]); + return 0; } diff --git a/include/globalvar.h b/include/globalvar.h index eb3728717b..c2a13b3657 100644 --- a/include/globalvar.h +++ b/include/globalvar.h @@ -4,7 +4,7 @@ #include #ifdef CONFIG_GLOBALVAR -int globalvar_add_simple(const char *name); +int globalvar_add_simple(const char *name, const char *value); int globalvar_add(const char *name, int (*set)(struct device_d *dev, struct param_d *p, const char *val), @@ -13,7 +13,7 @@ int globalvar_add(const char *name, char *globalvar_get_match(const char *match, const char *separator); void globalvar_set_match(const char *match, const char *val); #else -static inline int globalvar_add_simple(const char *name) +static inline int globalvar_add_simple(const char *name, const char *value) { return 0; } diff --git a/net/dhcp.c b/net/dhcp.c index 1261b2d73a..cafefcb402 100644 --- a/net/dhcp.c +++ b/net/dhcp.c @@ -667,7 +667,7 @@ static void dhcp_global_add(const char *var) if (!var_global) return; - globalvar_add_simple(var_global); + globalvar_add_simple(var_global, NULL); free(var_global); } -- cgit v1.2.3