diff options
author | Frank Wunderlich <frank-w@public-files.de> | 2019-06-29 11:36:19 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2019-07-18 11:31:25 -0400 |
commit | cd121bdb6df3fe8dfe45ff1e34f46f86b8f060c0 (patch) | |
tree | 32dd275494f021a9ea3b8f9ddcc1ed5855b6c900 /env | |
parent | 4225f830c56d6a8f6e459bce8cec310a58a9df28 (diff) |
env: register erase command
this patch adds basic changes for adding a erase-subcommand to env
with this command the environment stored on non-volatile storage written
by saveenv can be cleared.
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
squashed fixes
- start message with "Erasing"
- mark erase-function as optional
- env: separate eraseenv from saveenv
Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Reviewed-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Diffstat (limited to 'env')
-rw-r--r-- | env/env.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -24,6 +24,8 @@ void env_fix_drivers(void) entry->load += gd->reloc_off; if (entry->save) entry->save += gd->reloc_off; + if (entry->erase) + entry->erase += gd->reloc_off; if (entry->init) entry->init += gd->reloc_off; } @@ -254,6 +256,34 @@ int env_save(void) return -ENODEV; } +int env_erase(void) +{ + struct env_driver *drv; + + drv = env_driver_lookup(ENVOP_ERASE, gd->env_load_prio); + if (drv) { + int ret; + + if (!drv->erase) + return -ENODEV; + + if (!env_has_inited(drv->location)) + return -ENODEV; + + printf("Erasing Environment on %s... ", drv->name); + ret = drv->erase(); + if (ret) + printf("Failed (%d)\n", ret); + else + printf("OK\n"); + + if (!ret) + return 0; + } + + return -ENODEV; +} + int env_init(void) { struct env_driver *drv; |