[U-Boot] [PATCH 1/3] sandbox: add concept of sandbox state

Simon Glass sjg at chromium.org
Mon Feb 27 03:34:05 CET 2012


On Sun, Feb 26, 2012 at 2:38 PM, Mike Frysinger <vapier at gentoo.org> wrote:
> From: Simon Glass <sjg at chromium.org>
>
> The state exists through the life of U-Boot. It can be adjusted by command
> line options and perhaps later through a config file.  It is available to
> U-Boot through state_...() calls (within sandbox code).
>
> The primary purpose of this is to contain the "hardware" state.  It should
> only be used by sandbox internal code.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> Signed-off-by: Mike Frysinger <vapier at gentoo.org>

Acked-by: Simon Glass <sjg at chromium.org>

> ---
>  arch/sandbox/cpu/Makefile        |    2 +-
>  arch/sandbox/cpu/start.c         |    9 +++++-
>  arch/sandbox/cpu/state.c         |   51 ++++++++++++++++++++++++++++++++++
>  arch/sandbox/include/asm/state.h |   57 ++++++++++++++++++++++++++++++++++++++
>  4 files changed, 117 insertions(+), 2 deletions(-)
>  create mode 100644 arch/sandbox/cpu/state.c
>  create mode 100644 arch/sandbox/include/asm/state.h
>
> diff --git a/arch/sandbox/cpu/Makefile b/arch/sandbox/cpu/Makefile
> index 2ae0f71..6fd09ff 100644
> --- a/arch/sandbox/cpu/Makefile
> +++ b/arch/sandbox/cpu/Makefile
> @@ -27,7 +27,7 @@ include $(TOPDIR)/config.mk
>
>  LIB    = $(obj)lib$(CPU).o
>
> -COBJS  := cpu.o start.o os.o
> +COBJS  := cpu.o os.o start.o state.o
>
>  SRCS   := $(COBJS:.o=.c)
>  OBJS   := $(addprefix $(obj),$(COBJS))
> diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c
> index a429e29..2b66eed 100644
> --- a/arch/sandbox/cpu/start.c
> +++ b/arch/sandbox/cpu/start.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2011 The Chromium OS Authors.
> + * Copyright (c) 2011-2012 The Chromium OS Authors.
>  * See file CREDITS for list of people who contributed to this
>  * project.
>  *
> @@ -20,9 +20,16 @@
>  */
>
>  #include <common.h>
> +#include <asm/state.h>
>
>  int main(int argc, char *argv[])
>  {
> +       int err;
> +
> +       err = state_init();
> +       if (err)
> +               return err;
> +
>        /*
>         * Do pre- and post-relocation init, then start up U-Boot. This will
>         * never return.
> diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c
> new file mode 100644
> index 0000000..88ae2b0
> --- /dev/null
> +++ b/arch/sandbox/cpu/state.c
> @@ -0,0 +1,51 @@
> +/*
> + * Copyright (c) 2011-2012 The Chromium OS Authors.
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * 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.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <asm/state.h>
> +
> +/* Main state record for the sandbox */
> +static struct sandbox_state main_state;
> +static struct sandbox_state *state;    /* Pointer to current state record */
> +
> +void state_record_exit(enum exit_type_id exit_type)
> +{
> +       state->exit_type = exit_type;
> +}
> +
> +struct sandbox_state *state_get_current(void)
> +{
> +       assert(state);
> +       return state;
> +}
> +
> +int state_init(void)
> +{
> +       state = &main_state;
> +
> +       /*
> +        * Example of how to use GPIOs:
> +        *
> +        * sandbox_gpio_set_direction(170, 0);
> +        * sandbox_gpio_set_value(170, 0);
> +        */
> +       return 0;
> +}
> diff --git a/arch/sandbox/include/asm/state.h b/arch/sandbox/include/asm/state.h
> new file mode 100644
> index 0000000..5b34e94
> --- /dev/null
> +++ b/arch/sandbox/include/asm/state.h
> @@ -0,0 +1,57 @@
> +/*
> + * Copyright (c) 2011-2012 The Chromium OS Authors.
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * 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.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#ifndef __SANDBOX_STATE_H
> +#define __SANDBOX_STATE_H
> +
> +/* How we exited U-Boot */
> +enum exit_type_id {
> +       STATE_EXIT_NORMAL,
> +       STATE_EXIT_COLD_REBOOT,
> +       STATE_EXIT_POWER_OFF,
> +};
> +
> +/* The complete state of the test system */
> +struct sandbox_state {
> +       const char *cmd;                /* Command to execute */
> +       enum exit_type_id exit_type;    /* How we exited U-Boot */
> +};
> +
> +/**
> + * Record the exit type to be reported by the test program.
> + *
> + * @param exit_type    Exit type to record
> + */
> +void state_record_exit(enum exit_type_id exit_type);
> +
> +/**
> + * Gets a pointer to the current state.
> + *
> + * @return pointer to state
> + */
> +struct sandbox_state *state_get_current(void);
> +
> +/**
> + * Initialize the test system state
> + */
> +int state_init(void);
> +
> +#endif
> --
> 1.7.8.4
>


More information about the U-Boot mailing list