Initial revision
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 )
+};
diff --git a/include/cmd_vfd.h b/include/cmd_vfd.h
new file mode 100644
index 0000000..40a9b34
--- /dev/null
+++ b/include/cmd_vfd.h
@@ -0,0 +1,44 @@
+/*
+ * (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
+ */
+
+/*
+ * Miscellanious commands
+ */
+#ifndef	_CMD_VFD_H
+#define	_CMD_VFD_H
+
+#if (CONFIG_COMMANDS & CFG_CMD_VFD)
+#define	CMD_TBL_VFD	MK_CMD_TBL_ENTRY(					\
+	"vfd",	3,	2,	0,	do_vfd,			\
+	"vfd     - load a bitmap to the VFDs on TRAB\n",		\
+	"N\n"							\
+	"    - load bitmap N to the VFDs (N is _decimal_ !!!)\n"\
+),
+
+/* Implemented in common/cmd_misc.c */
+int do_vfd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
+#else
+#define CMD_TBL_VFD
+#endif	/* CFG_CMD_VFD */
+
+#endif	/* _CMD_VFD_H */