uboot-mt623x/common/command.c

350 lines
7.2 KiB
C

/*
* (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_spi.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_nand.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 */
#include <cmd_log.h>
#include <cmd_fdos.h>
#ifdef CONFIG_AMIGAONEG3SE
#include <cmd_menu.h>
#include <cmd_boota.h>
#endif
/*
* 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
#ifdef CONFIG_AMIGAONEG3SE
CMD_TBL_BOOTA
#endif
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_FDOS_BOOT
CMD_TBL_FDOS_LS
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_LOG
CMD_TBL_LOOP
CMD_TBL_JFFS2_LS
CMD_TBL_MCCINFO
CMD_TBL_MD
CMD_TBL_MEMCINFO
#ifdef CONFIG_AMIGAONEG3SE
CMD_TBL_MENU
#endif
CMD_TBL_MII
CMD_TBL_MM
CMD_TBL_MTEST
CMD_TBL_MUXINFO
CMD_TBL_MW
CMD_TBL_NAND
CMD_TBL_NANDBOOT
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_SPI
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 )
};