Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / u-boot / arch / sandbox / include / asm / getopt.h
diff --git a/qemu/roms/u-boot/arch/sandbox/include/asm/getopt.h b/qemu/roms/u-boot/arch/sandbox/include/asm/getopt.h
new file mode 100644 (file)
index 0000000..3048c2c
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * 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 sandbox_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 _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 = 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 sandbox_cmdline_option \
+                       *sandbox_cmdline_option_##f##_ptr = \
+                       &sandbox_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:
+ *   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
+ * sandbox_cmdline_cb_foo() will automatically be called.
+ */
+#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.
+ *   SANDBOX_CMDLINE_OPT(foo, 'f', 0, "The foo arg");
+ */
+#define SANDBOX_CMDLINE_OPT_SHORT(f, s, ha, h) _SANDBOX_CMDLINE_OPT(f, s, ha, h)
+
+#endif