]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/main.c
cros_ec: Move EC interface into common library
[karo-tx-uboot.git] / common / main.c
index e5173d7284130f70144eea55df2ec9777cde2728..8b6f274fa25f723fd2553c1c61a2a32606a90f1a 100644 (file)
@@ -6,23 +6,7 @@
  * (C) Copyright 2005
  * JinHua Luo, GuangDong Linux Center, <luo.jinhua@gd-linux.com>
  *
- * 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
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /* #define     DEBUG   */
@@ -48,7 +32,16 @@ void show_boot_progress (int val) __attribute__((weak, alias("__show_boot_progre
 
 #define MAX_DELAY_STOP_STR 32
 
-#undef DEBUG_PARSER
+#define DEBUG_PARSER   0       /* set to 1 to debug */
+
+#define debug_parser(fmt, args...)             \
+       debug_cond(DEBUG_PARSER, fmt, ##args)
+
+#ifndef DEBUG_BOOTKEYS
+#define DEBUG_BOOTKEYS 0
+#endif
+#define debug_bootkeys(fmt, args...)           \
+       debug_cond(DEBUG_BOOTKEYS, fmt, ##args)
 
 char        console_buffer[CONFIG_SYS_CBSIZE + 1];     /* console I/O buffer   */
 
@@ -134,11 +127,9 @@ static int abortboot_keyed(int bootdelay)
                presskey_max = presskey_max > delaykey[i].len ?
                                    presskey_max : delaykey[i].len;
 
-#  if DEBUG_BOOTKEYS
-               printf("%s key:<%s>\n",
-                      delaykey[i].retry ? "delay" : "stop",
-                      delaykey[i].str ? delaykey[i].str : "NULL");
-#  endif
+               debug_bootkeys("%s key:<%s>\n",
+                              delaykey[i].retry ? "delay" : "stop",
+                              delaykey[i].str ? delaykey[i].str : "NULL");
        }
 
        /* In order to keep up with incoming data, check timeout only
@@ -163,10 +154,9 @@ static int abortboot_keyed(int bootdelay)
                            memcmp (presskey + presskey_len - delaykey[i].len,
                                    delaykey[i].str,
                                    delaykey[i].len) == 0) {
-#  if DEBUG_BOOTKEYS
-                               printf("got %skey\n",
-                                      delaykey[i].retry ? "delay" : "stop");
-#  endif
+                               debug_bootkeys("got %skey\n",
+                                              delaykey[i].retry ? "delay" :
+                                              "stop");
 
 #  ifdef CONFIG_BOOT_RETRY_TIME
                                /* don't retry auto boot */
@@ -178,10 +168,8 @@ static int abortboot_keyed(int bootdelay)
                }
        } while (!abort && get_ticks() <= etime);
 
-#  if DEBUG_BOOTKEYS
        if (!abort)
-               puts("key timeout\n");
-#  endif
+               debug_bootkeys("key timeout\n");
 
 #ifdef CONFIG_SILENT_CONSOLE
        if (abort)
@@ -354,6 +342,11 @@ static void process_boot_delay(void)
        s = getenv ("bootdelay");
        bootdelay = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;
 
+#ifdef CONFIG_OF_CONTROL
+       bootdelay = fdtdec_get_config_int(gd->fdt_blob, "bootdelay",
+                       bootdelay);
+#endif
+
        debug ("### main_loop entered: bootdelay=%d\n\n", bootdelay);
 
 #if defined(CONFIG_MENU_SHOW)
@@ -372,7 +365,7 @@ static void process_boot_delay(void)
 #ifdef CONFIG_BOOTCOUNT_LIMIT
        if (bootlimit && (bootcount > bootlimit)) {
                printf ("Warning: Bootlimit (%u) exceeded. Using altbootcmd.\n",
-                       (unsigned)bootlimit);
+                       (unsigned)bootlimit);
                s = getenv ("altbootcmd");
        }
        else
@@ -399,13 +392,13 @@ static void process_boot_delay(void)
        debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
 
        if (bootdelay != -1 && s && !abortboot(bootdelay)) {
-#ifdef CONFIG_AUTOBOOT_KEYED
+#if defined(CONFIG_AUTOBOOT_KEYED) && !defined(CONFIG_AUTOBOOT_KEYED_CTRLC)
                int prev = disable_ctrlc(1);    /* disable Control C checking */
 #endif
 
                run_command_list(s, -1, 0);
 
-#ifdef CONFIG_AUTOBOOT_KEYED
+#if defined(CONFIG_AUTOBOOT_KEYED) && !defined(CONFIG_AUTOBOOT_KEYED_CTRLC)
                disable_ctrlc(prev);    /* restore Control C checking */
 #endif
        }
@@ -1179,9 +1172,7 @@ int parse_line (char *line, char *argv[])
 {
        int nargs = 0;
 
-#ifdef DEBUG_PARSER
-       printf ("parse_line: \"%s\"\n", line);
-#endif
+       debug_parser("parse_line: \"%s\"\n", line);
        while (nargs < CONFIG_SYS_MAXARGS) {
 
                /* skip any white space */
@@ -1190,10 +1181,8 @@ int parse_line (char *line, char *argv[])
 
                if (*line == '\0') {    /* end of line, no more args    */
                        argv[nargs] = NULL;
-#ifdef DEBUG_PARSER
-               printf ("parse_line: nargs=%d\n", nargs);
-#endif
-                       return (nargs);
+                       debug_parser("parse_line: nargs=%d\n", nargs);
+                       return nargs;
                }
 
                argv[nargs++] = line;   /* begin of argument string     */
@@ -1204,10 +1193,8 @@ int parse_line (char *line, char *argv[])
 
                if (*line == '\0') {    /* end of line, no more args    */
                        argv[nargs] = NULL;
-#ifdef DEBUG_PARSER
-               printf ("parse_line: nargs=%d\n", nargs);
-#endif
-                       return (nargs);
+                       debug_parser("parse_line: nargs=%d\n", nargs);
+                       return nargs;
                }
 
                *line++ = '\0';         /* terminate current arg         */
@@ -1215,9 +1202,7 @@ int parse_line (char *line, char *argv[])
 
        printf ("** Too many args (max. %d) **\n", CONFIG_SYS_MAXARGS);
 
-#ifdef DEBUG_PARSER
-       printf ("parse_line: nargs=%d\n", nargs);
-#endif
+       debug_parser("parse_line: nargs=%d\n", nargs);
        return (nargs);
 }
 
@@ -1235,12 +1220,10 @@ static void process_macros (const char *input, char *output)
        /* 1 = waiting for '(' or '{' */
        /* 2 = waiting for ')' or '}' */
        /* 3 = waiting for '''  */
-#ifdef DEBUG_PARSER
        char *output_start = output;
 
-       printf ("[PROCESS_MACROS] INPUT len %d: \"%s\"\n", strlen (input),
-               input);
-#endif
+       debug_parser("[PROCESS_MACROS] INPUT len %zd: \"%s\"\n", strlen(input),
+                    input);
 
        prev = '\0';            /* previous character   */
 
@@ -1328,10 +1311,8 @@ static void process_macros (const char *input, char *output)
        else
                *(output - 1) = 0;
 
-#ifdef DEBUG_PARSER
-       printf ("[PROCESS_MACROS] OUTPUT len %d: \"%s\"\n",
-               strlen (output_start), output_start);
-#endif
+       debug_parser("[PROCESS_MACROS] OUTPUT len %zd: \"%s\"\n",
+                    strlen(output_start), output_start);
 }
 
 /****************************************************************************
@@ -1362,12 +1343,12 @@ static int builtin_run_command(const char *cmd, int flag)
        int repeatable = 1;
        int rc = 0;
 
-#ifdef DEBUG_PARSER
-       printf ("[RUN_COMMAND] cmd[%p]=\"", cmd);
-       puts (cmd ? cmd : "NULL");      /* use puts - string may be loooong */
-       puts ("\"\n");
-#endif
-
+       debug_parser("[RUN_COMMAND] cmd[%p]=\"", cmd);
+       if (DEBUG_PARSER) {
+               /* use puts - string may be loooong */
+               puts(cmd ? cmd : "NULL");
+               puts("\"\n");
+       }
        clear_ctrlc();          /* forget any previous Control C */
 
        if (!cmd || !*cmd) {
@@ -1385,9 +1366,7 @@ static int builtin_run_command(const char *cmd, int flag)
         * repeatable commands
         */
 
-#ifdef DEBUG_PARSER
-       printf ("[PROCESS_SEPARATORS] %s\n", cmd);
-#endif
+       debug_parser("[PROCESS_SEPARATORS] %s\n", cmd);
        while (*str) {
 
                /*
@@ -1416,9 +1395,7 @@ static int builtin_run_command(const char *cmd, int flag)
                }
                else
                        str = sep;      /* no more commands for next pass */
-#ifdef DEBUG_PARSER
-               printf ("token: \"%s\"\n", token);
-#endif
+               debug_parser("token: \"%s\"\n", token);
 
                /* find macros in this token and replace them */
                process_macros (token, finaltoken);