summaryrefslogtreecommitdiff
path: root/cmd/source.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/source.c')
-rw-r--r--cmd/source.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/cmd/source.c b/cmd/source.c
new file mode 100644
index 00000000000..c9b5f8e400a
--- /dev/null
+++ b/cmd/source.c
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2001
+ * Kyle Harris, kharris@nexus-tech.net
+ */
+
+/*
+ * The "source" command allows to define "script images", i. e. files
+ * that contain command sequences that can be executed by the command
+ * interpreter. It returns the exit status of the last command
+ * executed from the script. This is very similar to running a shell
+ * script in a UNIX shell, hence the name for the command.
+ */
+
+/* #define DEBUG */
+
+#include <command.h>
+#include <env.h>
+#include <image.h>
+#include <log.h>
+#include <malloc.h>
+#include <mapmem.h>
+#include <asm/byteorder.h>
+#include <asm/io.h>
+
+static int do_source(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ ulong addr;
+ int rcode;
+ const char *fit_uname = NULL, *confname = NULL;
+
+ /* Find script image */
+ if (argc < 2) {
+ addr = CONFIG_SYS_LOAD_ADDR;
+ debug("* source: default load address = 0x%08lx\n", addr);
+#if defined(CONFIG_FIT)
+ } else if (fit_parse_subimage(argv[1], image_load_addr, &addr,
+ &fit_uname)) {
+ debug("* source: subimage '%s' from FIT image at 0x%08lx\n",
+ fit_uname, addr);
+ } else if (fit_parse_conf(argv[1], image_load_addr, &addr, &confname)) {
+ debug("* source: config '%s' from FIT image at 0x%08lx\n",
+ confname, addr);
+#endif
+ } else {
+ addr = hextoul(argv[1], NULL);
+ debug("* source: cmdline image address = 0x%08lx\n", addr);
+ }
+
+ printf ("## Executing script at %08lx\n", addr);
+ rcode = cmd_source_script(addr, fit_uname, confname);
+ return rcode;
+}
+
+U_BOOT_LONGHELP(source,
+#if defined(CONFIG_FIT)
+ "[<addr>][:[<image>]|#[<config>]]\n"
+ "\t- Run script starting at addr\n"
+ "\t- A FIT config name or subimage name may be specified with : or #\n"
+ "\t (like bootm). If the image or config name is omitted, the\n"
+ "\t default is used."
+#else
+ "[<addr>]\n"
+ "\t- Run script starting at addr"
+#endif
+ );
+
+U_BOOT_CMD(
+ source, 2, 0, do_source,
+ "run script from memory", source_help_text
+);