summaryrefslogtreecommitdiff
path: root/arch/sandbox/include
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sandbox/include')
-rw-r--r--arch/sandbox/include/asm/getopt.h71
-rw-r--r--arch/sandbox/include/asm/sections.h22
-rw-r--r--arch/sandbox/include/asm/state.h5
-rw-r--r--arch/sandbox/include/asm/u-boot-sandbox.h1
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 0000000..685883c
--- /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 0000000..eafce7d
--- /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 5b34e94..2b62b46 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 99e950b..50bf8c6 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_ */