Home | History | Annotate | Download | only in include
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * (C) Copyright 2000-2009
      4  * Wolfgang Denk, DENX Software Engineering, wd (at) denx.de.
      5  */
      6 
      7 /*
      8  *  Definitions for Command Processor
      9  */
     10 #ifndef __COMMAND_H
     11 #define __COMMAND_H
     12 
     13 #include <linker_lists.h>
     14 
     15 #ifndef NULL
     16 #define NULL	0
     17 #endif
     18 
     19 /* Default to a width of 8 characters for help message command width */
     20 #ifndef CONFIG_SYS_HELP_CMD_WIDTH
     21 #define CONFIG_SYS_HELP_CMD_WIDTH	8
     22 #endif
     23 
     24 #ifndef	__ASSEMBLY__
     25 /*
     26  * Monitor Command Table
     27  */
     28 
     29 struct cmd_tbl_s {
     30 	char		*name;		/* Command Name			*/
     31 	int		maxargs;	/* maximum number of arguments	*/
     32 	int		repeatable;	/* autorepeat allowed?		*/
     33 					/* Implementation function	*/
     34 	int		(*cmd)(struct cmd_tbl_s *, int, int, char * const []);
     35 	char		*usage;		/* Usage message	(short)	*/
     36 #ifdef	CONFIG_SYS_LONGHELP
     37 	char		*help;		/* Help  message	(long)	*/
     38 #endif
     39 #ifdef CONFIG_AUTO_COMPLETE
     40 	/* do auto completion on the arguments */
     41 	int		(*complete)(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
     42 #endif
     43 };
     44 
     45 typedef struct cmd_tbl_s	cmd_tbl_t;
     46 
     47 
     48 #if defined(CONFIG_CMD_RUN)
     49 extern int do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
     50 #endif
     51 
     52 /* common/command.c */
     53 int _do_help (cmd_tbl_t *cmd_start, int cmd_items, cmd_tbl_t * cmdtp, int
     54 	      flag, int argc, char * const argv[]);
     55 cmd_tbl_t *find_cmd(const char *cmd);
     56 cmd_tbl_t *find_cmd_tbl (const char *cmd, cmd_tbl_t *table, int table_len);
     57 
     58 extern int cmd_usage(const cmd_tbl_t *cmdtp);
     59 
     60 #ifdef CONFIG_AUTO_COMPLETE
     61 extern int var_complete(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
     62 extern int cmd_auto_complete(const char *const prompt, char *buf, int *np, int *colp);
     63 #endif
     64 
     65 /**
     66  * cmd_process_error() - report and process a possible error
     67  *
     68  * @cmdtp: Command which caused the error
     69  * @err: Error code (0 if none, -ve for error, like -EIO)
     70  * @return 0 if there is not error, 1 (CMD_RET_FAILURE) if an error is found
     71  */
     72 int cmd_process_error(cmd_tbl_t *cmdtp, int err);
     73 
     74 /*
     75  * Monitor Command
     76  *
     77  * All commands use a common argument format:
     78  *
     79  * void function (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
     80  */
     81 
     82 #if defined(CONFIG_CMD_MEMORY) || \
     83 	defined(CONFIG_CMD_I2C) || \
     84 	defined(CONFIG_CMD_ITEST) || \
     85 	defined(CONFIG_CMD_PCI)
     86 #define CMD_DATA_SIZE
     87 extern int cmd_get_data_size(char* arg, int default_size);
     88 #endif
     89 
     90 #ifdef CONFIG_CMD_BOOTD
     91 extern int do_bootd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
     92 #endif
     93 #ifdef CONFIG_CMD_BOOTM
     94 extern int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
     95 extern int bootm_maybe_autostart(cmd_tbl_t *cmdtp, const char *cmd);
     96 #else
     97 static inline int bootm_maybe_autostart(cmd_tbl_t *cmdtp, const char *cmd)
     98 {
     99 	return 0;
    100 }
    101 #endif
    102 
    103 extern int do_bootz(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
    104 
    105 extern int do_booti(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
    106 
    107 extern int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,
    108 			   char *const argv[]);
    109 
    110 extern int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
    111 extern int do_poweroff(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
    112 
    113 extern unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc,
    114 				char * const argv[]);
    115 /*
    116  * Error codes that commands return to cmd_process(). We use the standard 0
    117  * and 1 for success and failure, but add one more case - failure with a
    118  * request to call cmd_usage(). But the cmd_process() function handles
    119  * CMD_RET_USAGE itself and after calling cmd_usage() it will return 1.
    120  * This is just a convenience for commands to avoid them having to call
    121  * cmd_usage() all over the place.
    122  */
    123 enum command_ret_t {
    124 	CMD_RET_SUCCESS,	/* 0 = Success */
    125 	CMD_RET_FAILURE,	/* 1 = Failure */
    126 	CMD_RET_USAGE = -1,	/* Failure, please report 'usage' error */
    127 };
    128 
    129 /**
    130  * Process a command with arguments. We look up the command and execute it
    131  * if valid. Otherwise we print a usage message.
    132  *
    133  * @param flag		Some flags normally 0 (see CMD_FLAG_.. above)
    134  * @param argc		Number of arguments (arg 0 must be the command text)
    135  * @param argv		Arguments
    136  * @param repeatable	This function sets this to 0 if the command is not
    137  *			repeatable. If the command is repeatable, the value
    138  *			is left unchanged.
    139  * @param ticks		If ticks is not null, this function set it to the
    140  *			number of ticks the command took to complete.
    141  * @return 0 if the command succeeded, 1 if it failed
    142  */
    143 int cmd_process(int flag, int argc, char * const argv[],
    144 			       int *repeatable, unsigned long *ticks);
    145 
    146 void fixup_cmdtable(cmd_tbl_t *cmdtp, int size);
    147 
    148 /**
    149  * board_run_command() - Fallback function to execute a command
    150  *
    151  * When no command line features are enabled in U-Boot, this function is
    152  * called to execute a command. Typically the function can look at the
    153  * command and perform a few very specific tasks, such as booting the
    154  * system in a particular way.
    155  *
    156  * This function is only used when CONFIG_CMDLINE is not enabled.
    157  *
    158  * In normal situations this function should not return, since U-Boot will
    159  * simply hang.
    160  *
    161  * @cmdline:	Command line string to execute
    162  * @return 0 if OK, 1 for error
    163  */
    164 int board_run_command(const char *cmdline);
    165 #endif	/* __ASSEMBLY__ */
    166 
    167 /*
    168  * Command Flags:
    169  */
    170 #define CMD_FLAG_REPEAT		0x0001	/* repeat last command		*/
    171 #define CMD_FLAG_BOOTD		0x0002	/* command is from bootd	*/
    172 #define CMD_FLAG_ENV		0x0004	/* command is from the environment */
    173 
    174 #ifdef CONFIG_AUTO_COMPLETE
    175 # define _CMD_COMPLETE(x) x,
    176 #else
    177 # define _CMD_COMPLETE(x)
    178 #endif
    179 #ifdef CONFIG_SYS_LONGHELP
    180 # define _CMD_HELP(x) x,
    181 #else
    182 # define _CMD_HELP(x)
    183 #endif
    184 
    185 #ifdef CONFIG_CMDLINE
    186 #define U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,		\
    187 				_usage, _help, _comp)			\
    188 		{ #_name, _maxargs, _rep, _cmd, _usage,			\
    189 			_CMD_HELP(_help) _CMD_COMPLETE(_comp) }
    190 
    191 #define U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, _comp) \
    192 	ll_entry_declare(cmd_tbl_t, _name, cmd) =			\
    193 		U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,	\
    194 						_usage, _help, _comp);
    195 
    196 #else
    197 #define U_BOOT_SUBCMD_START(name)	static cmd_tbl_t name[] = {};
    198 #define U_BOOT_SUBCMD_END
    199 
    200 #define _CMD_REMOVE(_name, _cmd)					\
    201 	int __remove_ ## _name(void)					\
    202 	{								\
    203 		if (0)							\
    204 			_cmd(NULL, 0, 0, NULL);				\
    205 		return 0;						\
    206 	}
    207 #define U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd, _usage,	\
    208 				  _help, _comp)				\
    209 		{ #_name, _maxargs, _rep, 0 ? _cmd : NULL, _usage,	\
    210 			_CMD_HELP(_help) _CMD_COMPLETE(_comp) }
    211 
    212 #define U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help,	\
    213 			    _comp)				\
    214 	_CMD_REMOVE(sub_ ## _name, _cmd)
    215 
    216 #endif /* CONFIG_CMDLINE */
    217 
    218 #define U_BOOT_CMD(_name, _maxargs, _rep, _cmd, _usage, _help)		\
    219 	U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, NULL)
    220 
    221 #define U_BOOT_CMD_MKENT(_name, _maxargs, _rep, _cmd, _usage, _help)	\
    222 	U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd,		\
    223 					_usage, _help, NULL)
    224 
    225 #endif	/* __COMMAND_H */
    226