[U-Boot] [PATCH 5/6] cmd_nvedit.c: allow board-specific code before/after saving the environment

Timur Tabi
2012-05-04T22:21:31Z

Introduce board_start_saveenv() and board_finish_saveenv(), two "weak"
functions that are called before and after saving the environment. This
allows for board-specific functions that "prepare" the board for saving
the environment. This is useful if, for some reason, the non-volatile
storage is normally unavailable (e.g. blocked via a mux).

Signed-off-by: Timur Tabi <timur@freescale.com>
---
common/cmd_nvedit.c | 24 +++++++++++++++++++++++-
1 files changed, 23 insertions(+), 1 deletions(-)

diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index e1ccdd8..9637682 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -595,11 +595,33 @@ ulong getenv_ulong(const char *name, int base, ulong default_val)
}

#if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
+
+static int __board_start_saveenv(void)
+{
+ return 0;
+}
+int board_start_saveenv(void) __attribute__((weak, alias("__board_start_saveenv")));
+
+static void __board_finish_saveenv(void)
+{
+}
+void board_finish_saveenv(void) __attribute__((weak, alias("__board_finish_saveenv")));
+
int do_env_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
+ int ret;
+
printf("Saving Environment to %s...\n", env_name_spec);

- return saveenv() ? 1 : 0;
+ ret = board_start_saveenv();
+ if (ret)
+ return 0;
+
+ ret = saveenv() ? 1 : 0;
+
+ board_finish_saveenv();
+
+ return ret;
}

U_BOOT_CMD(
--
1.7.3.4