diff options
Diffstat (limited to 'arch/sandbox/include/asm')
| -rw-r--r-- | arch/sandbox/include/asm/config.h | 8 | ||||
| -rw-r--r-- | arch/sandbox/include/asm/getopt.h | 23 | ||||
| -rw-r--r-- | arch/sandbox/include/asm/sections.h | 4 | ||||
| -rw-r--r-- | arch/sandbox/include/asm/spi.h | 58 | ||||
| -rw-r--r-- | arch/sandbox/include/asm/state.h | 9 | 
5 files changed, 89 insertions, 13 deletions
| diff --git a/arch/sandbox/include/asm/config.h b/arch/sandbox/include/asm/config.h index 7755a4def..ec7729eb4 100644 --- a/arch/sandbox/include/asm/config.h +++ b/arch/sandbox/include/asm/config.h @@ -9,4 +9,12 @@  #define CONFIG_SANDBOX_ARCH +/* Used by drivers/spi/sandbox_spi.c and arch/sandbox/include/asm/state.h */ +#ifndef CONFIG_SANDBOX_SPI_MAX_BUS +#define CONFIG_SANDBOX_SPI_MAX_BUS 1 +#endif +#ifndef CONFIG_SANDBOX_SPI_MAX_CS +#define CONFIG_SANDBOX_SPI_MAX_CS 10 +#endif +  #endif diff --git a/arch/sandbox/include/asm/getopt.h b/arch/sandbox/include/asm/getopt.h index 685883cd3..3048c2cc3 100644 --- a/arch/sandbox/include/asm/getopt.h +++ b/arch/sandbox/include/asm/getopt.h @@ -18,7 +18,7 @@ struct sandbox_state;   * consumer code should focus on the macros below and   * the callback function.   */ -struct sb_cmdline_option { +struct sandbox_cmdline_option {  	/* The long flag name: "help" for "--help" */  	const char *flag;  	/* The (optional) short flag name: "h" for "-h" */ @@ -35,18 +35,19 @@ struct sb_cmdline_option {   * Internal macro to expand the lower macros into the necessary   * magic junk that makes this all work.   */ -#define _SB_CMDLINE_OPT(f, s, ha, h) \ -	static struct sb_cmdline_option sb_cmdline_option_##f = { \ +#define _SANDBOX_CMDLINE_OPT(f, s, ha, h) \ +	static struct sandbox_cmdline_option sandbox_cmdline_option_##f = { \  		.flag = #f, \  		.flag_short = s, \  		.help = h, \  		.has_arg = ha, \ -		.callback = sb_cmdline_cb_##f, \ +		.callback = sandbox_cmdline_cb_##f, \  	}; \  	/* Ppointer to the struct in a special section for the linker script */ \  	static __attribute__((section(".u_boot_sandbox_getopt"), used)) \ -		struct sb_cmdline_option *sb_cmdline_option_##f##_ptr = \ -		&sb_cmdline_option_##f +		struct sandbox_cmdline_option \ +			*sandbox_cmdline_option_##f##_ptr = \ +			&sandbox_cmdline_option_##f  /**   * Macros for end code to declare new command line flags. @@ -56,16 +57,16 @@ struct sb_cmdline_option {   * @param h   The help string displayed when showing --help   *   * This invocation: - *   SB_CMDLINE_OPT(foo, 0, "The foo arg"); + *   SANDBOX_CMDLINE_OPT(foo, 0, "The foo arg");   * Will create a new flag named "--foo" (no short option) that takes   * no argument.  If the user specifies "--foo", then the callback func - * sb_cmdline_cb_foo() will automatically be called. + * sandbox_cmdline_cb_foo() will automatically be called.   */ -#define SB_CMDLINE_OPT(f, ha, h) _SB_CMDLINE_OPT(f, 0, ha, h) +#define SANDBOX_CMDLINE_OPT(f, ha, h) _SANDBOX_CMDLINE_OPT(f, 0, ha, h)  /*   * Same as above, but @s is used to specify a short flag e.g. - *   SB_CMDLINE_OPT(foo, 'f', 0, "The foo arg"); + *   SANDBOX_CMDLINE_OPT(foo, 'f', 0, "The foo arg");   */ -#define SB_CMDLINE_OPT_SHORT(f, s, ha, h) _SB_CMDLINE_OPT(f, s, ha, h) +#define SANDBOX_CMDLINE_OPT_SHORT(f, s, ha, h) _SANDBOX_CMDLINE_OPT(f, s, ha, h)  #endif diff --git a/arch/sandbox/include/asm/sections.h b/arch/sandbox/include/asm/sections.h index 4c378600b..fbc1bd11a 100644 --- a/arch/sandbox/include/asm/sections.h +++ b/arch/sandbox/include/asm/sections.h @@ -11,9 +11,9 @@  #include <asm-generic/sections.h> -struct sb_cmdline_option; +struct sandbox_cmdline_option; -extern struct sb_cmdline_option *__u_boot_sandbox_option_start[], +extern struct sandbox_cmdline_option *__u_boot_sandbox_option_start[],  	*__u_boot_sandbox_option_end[];  static inline size_t __u_boot_sandbox_option_count(void) diff --git a/arch/sandbox/include/asm/spi.h b/arch/sandbox/include/asm/spi.h new file mode 100644 index 000000000..49b4a0f10 --- /dev/null +++ b/arch/sandbox/include/asm/spi.h @@ -0,0 +1,58 @@ +/* + * Simulate a SPI port and clients (see README.sandbox for details) + * + * Copyright (c) 2011-2013 The Chromium OS Authors. + * See file CREDITS for list of people who contributed to this + * project. + * + * Licensed under the GPL-2 or later. + */ + +#ifndef __ASM_SPI_H__ +#define __ASM_SPI_H__ + +#include <linux/types.h> + +/* + * The interface between the SPI bus and the SPI client.  The bus will + * instantiate a client, and that then call into it via these entry + * points.  These should be enough for the client to emulate the SPI + * device just like the real hardware. + */ +struct sandbox_spi_emu_ops { +	/* The bus wants to instantiate a new client, so setup everything */ +	int (*setup)(void **priv, const char *spec); +	/* The bus is done with us, so break things down */ +	void (*free)(void *priv); +	/* The CS has been "activated" -- we won't worry about low/high */ +	void (*cs_activate)(void *priv); +	/* The CS has been "deactivated" -- we won't worry about low/high */ +	void (*cs_deactivate)(void *priv); +	/* The client is rx-ing bytes from the bus, so it should tx some */ +	int (*xfer)(void *priv, const u8 *rx, u8 *tx, uint bytes); +}; + +/* + * There are times when the data lines are allowed to tristate.  What + * is actually sensed on the line depends on the hardware.  It could + * always be 0xFF/0x00 (if there are pull ups/downs), or things could + * float and so we'd get garbage back.  This func encapsulates that + * scenario so we can worry about the details here. + */ +static inline void sandbox_spi_tristate(u8 *buf, uint len) +{ +	/* XXX: make this into a user config option ? */ +	memset(buf, 0xff, len); +} + +/* + * Extract the bus/cs from the spi spec and return the start of the spi + * client spec.  If the bus/cs are invalid for the current config, then + * it returns NULL. + * + * Example: arg="0:1:foo" will set bus to 0, cs to 1, and return "foo" + */ +const char *sandbox_spi_parse_spec(const char *arg, unsigned long *bus, +				   unsigned long *cs); + +#endif diff --git a/arch/sandbox/include/asm/state.h b/arch/sandbox/include/asm/state.h index 093c81d91..a38820bde 100644 --- a/arch/sandbox/include/asm/state.h +++ b/arch/sandbox/include/asm/state.h @@ -15,6 +15,11 @@ enum exit_type_id {  	STATE_EXIT_POWER_OFF,  }; +struct sandbox_spi_info { +	const char *spec; +	const struct sandbox_spi_emu_ops *ops; +}; +  /* The complete state of the test system */  struct sandbox_state {  	const char *cmd;		/* Command to execute */ @@ -23,6 +28,10 @@ struct sandbox_state {  	const char *parse_err;		/* Error to report from parsing */  	int argc;			/* Program arguments */  	char **argv; + +	/* Pointer to information for each SPI bus/cs */ +	struct sandbox_spi_info spi[CONFIG_SANDBOX_SPI_MAX_BUS] +					[CONFIG_SANDBOX_SPI_MAX_CS];  };  /** |