From ca06e5e1bca4c965383ba78ea305541e25b55973 Mon Sep 17 00:00:00 2001 From: wdenk Date: Sat, 19 Oct 2002 19:42:10 +0000 Subject: [PATCH] Das U-Boot: Universal Boot Loader --- common/command.c | 328 ++++++++++++++++++++++++++++++++++++++++++++++ include/cmd_vfd.h | 44 +++++++ 2 files changed, 372 insertions(+) create mode 100644 common/command.c create mode 100644 include/cmd_vfd.h diff --git a/common/command.c b/common/command.c new file mode 100644 index 0000000000..2f50e6d1f8 --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include /* Floppy support */ +#include /* USB support */ +#include +#include +#include +#include /* 4xx DCR register access */ +#include +#include +#include + +#include /* board special functions */ + +#include +#include + +#include + +#include /* 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; iname); + 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 0000000000..40a9b34322 --- /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 */ -- 2.25.1