From 1487e6b9ad2ec0fafb0a2a35c921a33fb6c37fec Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Tue, 10 Mar 2015 15:54:26 +0100 Subject: state: add framework for persistent state handling This patch adds a framework to describe, access, store and restore a set of variables. A state variable set can be fully described in a devicetree node. This node could be part of the regular devicetree blob or it could be an extra devicetree solely for the state. The state variable set contains variables of different types and a place to store the variable set. For more information see: Documentation/devicetree/bindings/barebox/barebox,state.rst Signed-off-by: Sascha Hauer Signed-off-by: Jan Luebbe Signed-off-by: Marc Kleine-Budde Signed-off-by: Sascha Hauer --- commands/Kconfig | 5 ++++ commands/Makefile | 1 + commands/state.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 commands/state.c (limited to 'commands') diff --git a/commands/Kconfig b/commands/Kconfig index e4f68e7bda..00ce96238c 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -2062,6 +2062,11 @@ config CMD_TIME Note: This command depends on COMMAND being interruptible, otherwise the timer may overrun resulting in incorrect results +config CMD_STATE + tristate + depends on STATE + prompt "state" + # end Miscellaneous commands endmenu diff --git a/commands/Makefile b/commands/Makefile index 99a65d4609..7344e010f4 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -109,3 +109,4 @@ obj-$(CONFIG_CMD_FIRMWARELOAD) += firmwareload.o obj-$(CONFIG_CMD_CMP) += cmp.o obj-$(CONFIG_CMD_NV) += nv.o obj-$(CONFIG_CMD_DEFAULTENV) += defaultenv.o +obj-$(CONFIG_CMD_STATE) += state.o diff --git a/commands/state.c b/commands/state.c new file mode 100644 index 0000000000..82c29d00c8 --- /dev/null +++ b/commands/state.c @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2012 Jan Luebbe + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include + +static int do_state(int argc, char *argv[]) +{ + int opt, ret = 0; + struct state *state = NULL; + int do_save = 0, do_load = 0; + const char *statename = "state"; + + while ((opt = getopt(argc, argv, "sl")) > 0) { + switch (opt) { + case 's': + do_save = 1; + break; + case 'l': + do_load = 1; + break; + default: + return COMMAND_ERROR_USAGE; + } + } + + if (do_save && do_load) + return COMMAND_ERROR_USAGE; + + if (!do_save && !do_load) { + state_info(); + return 0; + } + + if (optind < argc) + statename = argv[optind]; + + state = state_by_name(statename); + if (!state) { + printf("cannot find state %s\n", statename); + return -ENOENT; + } + + if (do_save) + ret = state_save(state); + else if (do_load) + ret = state_load(state); + + return ret; +} + +static const __maybe_unused char cmd_state_help[] = +"Usage: state [OPTIONS] [STATENAME]\n" +"\n" +"options:\n" +"-s save state\n" +"-l load state\n"; + +BAREBOX_CMD_START(state) + .cmd = do_state, + BAREBOX_CMD_DESC("handle state information") + BAREBOX_CMD_GROUP(CMD_GRP_MISC) + BAREBOX_CMD_HELP(cmd_state_help) +BAREBOX_CMD_END -- cgit v1.2.3