summaryrefslogtreecommitdiff
path: root/common/command.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/command.c')
-rw-r--r--common/command.c328
1 files changed, 328 insertions, 0 deletions
diff --git a/common/command.c b/common/command.c
new file mode 100644
index 0000000..2f50e6d
--- /dev/null
+++ b/common/command.c
@@ -0,0 +1,328 @@
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * Command Processor Table
+ */
+
+#include <common.h>
+#include <command.h>
+#include <cmd_cache.h>
+#include <cmd_mem.h>
+#include <cmd_boot.h>
+#include <cmd_flash.h>
+#include <cmd_bootm.h>
+#include <cmd_net.h>
+#include <cmd_nvedit.h>
+#include <cmd_misc.h>
+#include <cmd_kgdb.h>
+#include <cmd_ide.h>
+#include <cmd_disk.h>
+#include <cmd_console.h>
+#include <cmd_reginfo.h>
+#include <cmd_pcmcia.h>
+#include <cmd_autoscript.h>
+#include <cmd_diag.h>
+
+#include <cmd_eeprom.h>
+#include <cmd_i2c.h>
+#include <cmd_immap.h>
+#include <cmd_rtc.h>
+
+#include <cmd_elf.h>
+#include <cmd_fdc.h> /* Floppy support */
+#include <cmd_usb.h> /* USB support */
+#include <cmd_scsi.h>
+#include <cmd_pci.h>
+#include <cmd_mii.h>
+#include <cmd_dcr.h> /* 4xx DCR register access */
+#include <cmd_doc.h>
+#include <cmd_jffs2.h>
+#include <cmd_fpga.h>
+
+#include <cmd_bsp.h> /* board special functions */
+
+#include <cmd_bedbug.h>
+#include <cmd_elf.h>
+
+#include <cmd_dtt.h>
+
+#include <cmd_vfd.h> /* load a bitmap to the VFDs on TRAB */
+
+/*
+ * HELP command
+ */
+#define CMD_TBL_HELP MK_CMD_TBL_ENTRY( \
+ "help", 1, CFG_MAXARGS, 1, do_help, \
+ "help - print online help\n", \
+ "[command ...]\n" \
+ " - show help information (for 'command')\n" \
+ "'help' prints online help for the monitor commands.\n\n" \
+ "Without arguments, it prints a short usage message for all commands.\n\n" \
+ "To get detailed help information for specific commands you can type\n" \
+ "'help' with one or more command names as arguments.\n" \
+ ),
+
+#define CMD_TBL_QUES MK_CMD_TBL_ENTRY( \
+ "?", 1, CFG_MAXARGS, 1, do_help, \
+ "? - alias for 'help'\n", \
+ NULL \
+ ),
+
+#define CMD_TBL_VERS MK_CMD_TBL_ENTRY( \
+ "version", 4, 1, 1, do_version, \
+ "version - print monitor version\n", \
+ NULL \
+ ),
+
+#define CMD_TBL_ECHO MK_CMD_TBL_ENTRY( \
+ "echo", 4, CFG_MAXARGS, 1, do_echo, \
+ "echo - echo args to console\n", \
+ "[args..]\n" \
+ " - echo args to console; \\c suppresses newline\n" \
+ ),
+
+int
+do_version (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ extern char version_string[];
+ printf ("\n%s\n", version_string);
+ return 0;
+}
+
+int
+do_echo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ int i, putnl = 1;
+
+ for (i = 1; i < argc; i++) {
+ char *p = argv[i], c;
+
+ if (i > 1)
+ putc(' ');
+ while ((c = *p++) != '\0')
+ if (c == '\\' && *p == 'c') {
+ putnl = 0;
+ p++;
+ }
+ else
+ putc(c);
+ }
+
+ if (putnl)
+ putc('\n');
+ return 0;
+}
+
+/*
+ * Use puts() instead of printf() to avoid printf buffer overflow
+ * for long help messages
+ */
+int
+do_help (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ int i;
+ int rcode = 0;
+
+ if (argc == 1) { /* print short help (usage) */
+
+ for (cmdtp=&cmd_tbl[0]; cmdtp->name; cmdtp++) {
+ /* allow user abort */
+ if (ctrlc())
+ return 1;
+
+ if (cmdtp->usage == NULL)
+ continue;
+ puts (cmdtp->usage);
+ }
+
+ return 0;
+ }
+
+ /*
+ * command help (long version)
+ */
+ for (i=1; i<argc; ++i) {
+ if ((cmdtp = find_cmd(argv[i])) != NULL) {
+#ifdef CFG_LONGHELP
+ /* found - print (long) help info */
+ puts (cmdtp->name);
+ putc (' ');
+ if (cmdtp->help) {
+ puts (cmdtp->help);
+ } else {
+ puts ("- No help available.\n");
+ rcode = 1;
+ }
+ putc ('\n');
+#else /* no long help available */
+ if (cmdtp->usage)
+ puts (cmdtp->usage);
+#endif /* CFG_LONGHELP */
+ }
+ else {
+ printf ("Unknown command '%s' - try 'help'"
+ " without arguments for list of all"
+ " known commands\n\n",
+ argv[i]
+ );
+ rcode = 1;
+ }
+ }
+ return rcode;
+}
+
+/***************************************************************************
+ * find command table entry for a command
+ */
+cmd_tbl_t *find_cmd(const char *cmd)
+{
+ cmd_tbl_t *cmdtp;
+
+ /* Search command table - Use linear search - it's a small table */
+ for (cmdtp = &cmd_tbl[0]; cmdtp->name; cmdtp++) {
+ if (strncmp (cmd, cmdtp->name, cmdtp->lmin) == 0)
+ return cmdtp;
+ }
+ return NULL; /* not found */
+}
+
+/*
+ * The commands in this table are sorted alphabetically by the
+ * command name and in descending order by the command name string
+ * length. This is to prevent conflicts in command name parsing.
+ * Please ensure that new commands are added according to that rule.
+ * Please use $(TOPDIR)/doc/README.commands as a reference AND make
+ * sure it gets updated.
+ */
+
+cmd_tbl_t cmd_tbl[] = {
+ CMD_TBL_ASKENV
+ CMD_TBL_ASM
+ CMD_TBL_AUTOSCRIPT
+ CMD_TBL_BASE
+ CMD_TBL_BDINFO
+ CMD_TBL_BOOTELF
+ CMD_TBL_BOOTM
+ CMD_TBL_BOOTP
+ CMD_TBL_BOOTVX
+ CMD_TBL_BOOTD
+ CMD_TBL_BREAK
+ CMD_TBL_BRGINFO
+ CMD_TBL_CARINFO
+ CMD_TBL_JFFS2_CHPART
+ CMD_TBL_CMP
+ CMD_TBL_CONINFO
+ CMD_TBL_CONTINUE
+ CMD_TBL_CP
+ CMD_TBL_CRC
+ CMD_TBL_DATE
+ CMD_TBL_DCACHE
+ CMD_TBL_DHCP
+ CMD_TBL_DIAG
+ CMD_TBL_DISK
+ CMD_TBL_DMAINFO
+ CMD_TBL_DIS
+ CMD_TBL_DOCBOOT
+ CMD_TBL_DOC
+ CMD_TBL_DTT
+ CMD_TBL_ECHO
+ CMD_TBL_EEPROM
+ CMD_TBL_FCCINFO
+ CMD_TBL_FLERASE
+ CMD_TBL_FDC
+ CMD_TBL_FLINFO
+ CMD_TBL_FPGA
+ CMD_TBL_JFFS2_FSINFO
+ CMD_TBL_JFFS2_FSLOAD
+ CMD_TBL_GETDCR
+ CMD_TBL_GO
+ CMD_TBL_HELP
+ CMD_TBL_HWFLOW
+ CMD_TBL_I2CINFO
+ CMD_TBL_ICACHE
+#ifdef CONFIG_8260
+ CMD_TBL_ICINFO
+#endif
+ CMD_TBL_IMD
+ CMD_TBL_IMM
+ CMD_TBL_INM
+ CMD_TBL_IMW
+ CMD_TBL_ICRC
+ CMD_TBL_IPROBE
+ CMD_TBL_ILOOP
+ CMD_TBL_ISDRAM
+ CMD_TBL_IDE
+ CMD_TBL_IMINFO
+ CMD_TBL_IOPINFO
+ CMD_TBL_IOPSET
+ CMD_TBL_IRQINFO
+ CMD_TBL_KGDB
+ CMD_TBL_LOADB
+ CMD_TBL_LOADS
+ CMD_TBL_LOOP
+ CMD_TBL_JFFS2_LS
+ CMD_TBL_MCCINFO
+ CMD_TBL_MD
+ CMD_TBL_MEMCINFO
+ CMD_TBL_MII
+ CMD_TBL_MM
+ CMD_TBL_MTEST
+ CMD_TBL_MUXINFO
+ CMD_TBL_MW
+ CMD_TBL_NEXT
+ CMD_TBL_NM
+ CMD_TBL_PCI
+ CMD_TBL_PRINTENV
+ CMD_TBL_PROTECT
+ CMD_TBL_RARPB
+ CMD_TBL_RDUMP
+ CMD_TBL_PINIT
+ CMD_TBL_REGINFO
+ CMD_TBL_RESET
+ CMD_TBL_RUN
+ CMD_TBL_SAVEENV
+ CMD_TBL_SAVES
+ CMD_TBL_SCCINFO
+ CMD_TBL_SCSIBOOT
+ CMD_TBL_SCSI
+ CMD_TBL_SETDCR
+ CMD_TBL_SETENV
+ CMD_TBL_SIINFO
+ CMD_TBL_SITINFO
+ CMD_TBL_SIUINFO
+ CMD_TBL_MISC /* sleep */
+ CMD_TBL_SMCINFO
+ CMD_TBL_SPIINFO
+ CMD_TBL_STACK
+ CMD_TBL_STEP
+ CMD_TBL_TFTPB
+ CMD_TBL_USBBOOT
+ CMD_TBL_USB
+ CMD_TBL_VERS
+ CMD_TBL_BSP
+ CMD_TBL_VFD
+ CMD_TBL_QUES /* keep this ("help") the last entry */
+ /* the following entry terminates this table */
+ MK_CMD_TBL_ENTRY( NULL, 0, 0, 0, NULL, NULL, NULL )
+};