diff options
Diffstat (limited to 'arch/sandbox/include')
| -rw-r--r-- | arch/sandbox/include/asm/getopt.h | 71 | ||||
| -rw-r--r-- | arch/sandbox/include/asm/sections.h | 22 | ||||
| -rw-r--r-- | arch/sandbox/include/asm/state.h | 5 | ||||
| -rw-r--r-- | arch/sandbox/include/asm/u-boot-sandbox.h | 1 | 
4 files changed, 99 insertions, 0 deletions
| diff --git a/arch/sandbox/include/asm/getopt.h b/arch/sandbox/include/asm/getopt.h new file mode 100644 index 000000000..685883cd3 --- /dev/null +++ b/arch/sandbox/include/asm/getopt.h @@ -0,0 +1,71 @@ +/* + * Code for setting up command line flags like `./u-boot --help` + * + * Copyright (c) 2011 The Chromium OS Authors. + * + * Licensed under the GPL-2 or later. + */ + +#ifndef __SANDBOX_GETOPT_H +#define __SANDBOX_GETOPT_H + +struct sandbox_state; + +/* + * Internal structure for storing details about the flag. + * Most people should not have to dig around in this as + * it only gets parsed by the core sandbox code.  End + * consumer code should focus on the macros below and + * the callback function. + */ +struct sb_cmdline_option { +	/* The long flag name: "help" for "--help" */ +	const char *flag; +	/* The (optional) short flag name: "h" for "-h" */ +	int flag_short; +	/* The help string shown to the user when processing --help */ +	const char *help; +	/* Whether this flag takes an argument */ +	int has_arg; +	/* Callback into the end consumer code with the option */ +	int (*callback)(struct sandbox_state *state, const char *opt); +}; + +/* + * 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 = { \ +		.flag = #f, \ +		.flag_short = s, \ +		.help = h, \ +		.has_arg = ha, \ +		.callback = sb_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 + +/** + * Macros for end code to declare new command line flags. + * + * @param f   The long flag name e.g. help + * @param ha  Does the flag have an argument e.g. 0/1 + * @param h   The help string displayed when showing --help + * + * This invocation: + *   SB_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. + */ +#define SB_CMDLINE_OPT(f, ha, h) _SB_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"); + */ +#define SB_CMDLINE_OPT_SHORT(f, s, ha, h) _SB_CMDLINE_OPT(f, s, ha, h) + +#endif diff --git a/arch/sandbox/include/asm/sections.h b/arch/sandbox/include/asm/sections.h new file mode 100644 index 000000000..eafce7d8a --- /dev/null +++ b/arch/sandbox/include/asm/sections.h @@ -0,0 +1,22 @@ +/* + * decls for symbols defined in the linker script + * + * Copyright (c) 2012 The Chromium OS Authors. + * + * Licensed under the GPL-2 or later. + */ + +#ifndef __SANDBOX_SECTIONS_H +#define __SANDBOX_SECTIONS_H + +struct sb_cmdline_option; + +extern struct sb_cmdline_option *__u_boot_sandbox_option_start[], +	*__u_boot_sandbox_option_end[]; + +static inline size_t __u_boot_sandbox_option_count(void) +{ +	return __u_boot_sandbox_option_end - __u_boot_sandbox_option_start; +} + +#endif diff --git a/arch/sandbox/include/asm/state.h b/arch/sandbox/include/asm/state.h index 5b34e9448..2b62b46ea 100644 --- a/arch/sandbox/include/asm/state.h +++ b/arch/sandbox/include/asm/state.h @@ -22,6 +22,8 @@  #ifndef __SANDBOX_STATE_H  #define __SANDBOX_STATE_H +#include <config.h> +  /* How we exited U-Boot */  enum exit_type_id {  	STATE_EXIT_NORMAL, @@ -33,6 +35,9 @@ enum exit_type_id {  struct sandbox_state {  	const char *cmd;		/* Command to execute */  	enum exit_type_id exit_type;	/* How we exited U-Boot */ +	const char *parse_err;		/* Error to report from parsing */ +	int argc;			/* Program arguments */ +	char **argv;  };  /** diff --git a/arch/sandbox/include/asm/u-boot-sandbox.h b/arch/sandbox/include/asm/u-boot-sandbox.h index 99e950b80..50bf8c605 100644 --- a/arch/sandbox/include/asm/u-boot-sandbox.h +++ b/arch/sandbox/include/asm/u-boot-sandbox.h @@ -36,6 +36,7 @@ int board_init(void);  int dram_init(void);  /* start.c */ +int sandbox_early_getopt_check(void);  int sandbox_main_loop_init(void);  #endif	/* _U_BOOT_SANDBOX_H_ */ |