1/* 2 * (C) Copyright 2014 Google, Inc 3 * Simon Glass <sjg@chromium.org> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8#ifndef __CLI_H 9#define __CLI_H 10 11/** 12 * Go into the command loop 13 * 14 * This will return if we get a timeout waiting for a command. See 15 * CONFIG_BOOT_RETRY_TIME. 16 */ 17void cli_simple_loop(void); 18 19/** 20 * cli_simple_run_command() - Execute a command with the simple CLI 21 * 22 * @cmd: String containing the command to execute 23 * @flag Flag value - see CMD_FLAG_... 24 * @return 1 - command executed, repeatable 25 * 0 - command executed but not repeatable, interrupted commands are 26 * always considered not repeatable 27 * -1 - not executed (unrecognized, bootd recursion or too many args) 28 * (If cmd is NULL or "" or longer than CONFIG_SYS_CBSIZE-1 it is 29 * considered unrecognized) 30 */ 31int cli_simple_run_command(const char *cmd, int flag); 32 33/** 34 * cli_simple_run_command_list() - Execute a list of command 35 * 36 * The commands should be separated by ; or \n and will be executed 37 * by the built-in parser. 38 * 39 * This function cannot take a const char * for the command, since if it 40 * finds newlines in the string, it replaces them with \0. 41 * 42 * @param cmd String containing list of commands 43 * @param flag Execution flags (CMD_FLAG_...) 44 * @return 0 on success, or != 0 on error. 45 */ 46int cli_simple_run_command_list(char *cmd, int flag); 47 48/** 49 * cli_readline() - read a line into the console_buffer 50 * 51 * This is a convenience function which calls cli_readline_into_buffer(). 52 * 53 * @prompt: Prompt to display 54 * @return command line length excluding terminator, or -ve on error 55 */ 56int cli_readline(const char *const prompt); 57 58/** 59 * readline_into_buffer() - read a line into a buffer 60 * 61 * Display the prompt, then read a command line into @buffer. The 62 * maximum line length is CONFIG_SYS_CBSIZE including a \0 terminator, which 63 * will always be added. 64 * 65 * The command is echoed as it is typed. Command editing is supported if 66 * CONFIG_CMDLINE_EDITING is defined. Tab auto-complete is supported if 67 * CONFIG_AUTO_COMPLETE is defined. If CONFIG_BOOT_RETRY_TIME is defined, 68 * then a timeout will be applied. 69 * 70 * If CONFIG_BOOT_RETRY_TIME is defined and retry_time >= 0, 71 * time out when time goes past endtime (timebase time in ticks). 72 * 73 * @prompt: Prompt to display 74 * @buffer: Place to put the line that is entered 75 * @timeout: Timeout in milliseconds, 0 if none 76 * @return command line length excluding terminator, or -ve on error: of the 77 * timeout is exceeded (either CONFIG_BOOT_RETRY_TIME or the timeout 78 * parameter), then -2 is returned. If a break is detected (Ctrl-C) then 79 * -1 is returned. 80 */ 81int cli_readline_into_buffer(const char *const prompt, char *buffer, 82 int timeout); 83 84/** 85 * parse_line() - split a command line down into separate arguments 86 * 87 * The argv[] array is filled with pointers into @line, and each argument 88 * is terminated by \0 (i.e. @line is changed in the process unless there 89 * is only one argument). 90 * 91 * #argv is terminated by a NULL after the last argument pointer. 92 * 93 * At most CONFIG_SYS_MAXARGS arguments are permited - if there are more 94 * than that then an error is printed, and this function returns 95 * CONFIG_SYS_MAXARGS, with argv[] set up to that point. 96 * 97 * @line: Command line to parse 98 * @args: Array to hold arguments 99 * @return number of arguments 100 */ 101int cli_simple_parse_line(char *line, char *argv[]); 102 103#ifdef CONFIG_OF_CONTROL 104/** 105 * cli_process_fdt() - process the boot command from the FDT 106 * 107 * If bootcmmd is defined in the /config node of the FDT, we use that 108 * as the boot command. Further, if bootsecure is set to 1 (in the same 109 * node) then we return true, indicating that the command should be executed 110 * as securely as possible, avoiding the CLI parser. 111 * 112 * @cmdp: On entry, the command that will be executed if the FDT does 113 * not have a command. Returns the command to execute after 114 * checking the FDT. 115 * @return true to execute securely, else false 116 */ 117bool cli_process_fdt(const char **cmdp); 118 119/** cli_secure_boot_cmd() - execute a command as securely as possible 120 * 121 * This avoids using the parser, thus executing the command with the 122 * smallest amount of code. Parameters are not supported. 123 */ 124void cli_secure_boot_cmd(const char *cmd); 125#else 126static inline bool cli_process_fdt(const char **cmdp) 127{ 128 return false; 129} 130 131static inline void cli_secure_boot_cmd(const char *cmd) 132{ 133} 134#endif /* CONFIG_OF_CONTROL */ 135 136/** 137 * Go into the command loop 138 * 139 * This will return if we get a timeout waiting for a command, but only for 140 * the simple parser (not hush). See CONFIG_BOOT_RETRY_TIME. 141 */ 142void cli_loop(void); 143 144/** Set up the command line interpreter ready for action */ 145void cli_init(void); 146 147#define endtick(seconds) (get_ticks() + (uint64_t)(seconds) * get_tbclk()) 148 149#endif 150