[U-Boot] [PATCH v4 3/8] main: Remove CONFIG #ifdefs from the abortboot() code
Simon Glass
sjg at chromium.org
Mon Jun 17 16:44:55 CEST 2013
Move this code over to using autoconf. We can add the autoconf values to
the delaykey[] array, and move the code that checks for autoconf values into
the loop.
Also change to using ARRAY_SIZE on delaykey[].
Signed-off-by: Simon Glass <sjg at chromium.org>
Reviewed-by: Joe Hershberger <joe.hershberger at ni.com>
---
Changes in v4:
- Rebase on current master
Changes in v3: None
Changes in v2: None
common/main.c | 90 ++++++++++++++++++++++-------------------------------------
1 file changed, 34 insertions(+), 56 deletions(-)
diff --git a/common/main.c b/common/main.c
index 3a143ae..3a4754d 100644
--- a/common/main.c
+++ b/common/main.c
@@ -86,15 +86,20 @@ static int abortboot_keyed(int bootdelay)
int abort = 0;
uint64_t etime = endtick(bootdelay);
struct {
- char* str;
+ const char *str;
u_int len;
int retry;
+ const char *conf; /* Configuration value */
}
delaykey [] = {
- { str: getenv ("bootdelaykey"), retry: 1 },
- { str: getenv ("bootdelaykey2"), retry: 1 },
- { str: getenv ("bootstopkey"), retry: 0 },
- { str: getenv ("bootstopkey2"), retry: 0 },
+ { str: getenv("bootdelaykey"), retry: 1,
+ conf: autoconf_autoboot_delay_str() },
+ { str: getenv("bootdelaykey2"), retry: 1,
+ conf: autoconf_autoboot_delay_str2() },
+ { str: getenv("bootstopkey"), retry: 0,
+ conf: autoconf_autoboot_stop_str() },
+ { str: getenv("bootstopkey2"), retry: 0,
+ conf: autoconf_autoboot_stop_str2() },
};
char presskey [MAX_DELAY_STOP_STR];
@@ -102,33 +107,15 @@ static int abortboot_keyed(int bootdelay)
u_int presskey_max = 0;
u_int i;
-#ifndef CONFIG_ZERO_BOOTDELAY_CHECK
- if (bootdelay == 0)
+ if (!autoconf_zero_bootdelay_check() && bootdelay == 0)
return 0;
-#endif
-# ifdef CONFIG_AUTOBOOT_PROMPT
- printf(CONFIG_AUTOBOOT_PROMPT);
-# endif
-
-# ifdef CONFIG_AUTOBOOT_DELAY_STR
- if (delaykey[0].str == NULL)
- delaykey[0].str = CONFIG_AUTOBOOT_DELAY_STR;
-# endif
-# ifdef CONFIG_AUTOBOOT_DELAY_STR2
- if (delaykey[1].str == NULL)
- delaykey[1].str = CONFIG_AUTOBOOT_DELAY_STR2;
-# endif
-# ifdef CONFIG_AUTOBOOT_STOP_STR
- if (delaykey[2].str == NULL)
- delaykey[2].str = CONFIG_AUTOBOOT_STOP_STR;
-# endif
-# ifdef CONFIG_AUTOBOOT_STOP_STR2
- if (delaykey[3].str == NULL)
- delaykey[3].str = CONFIG_AUTOBOOT_STOP_STR2;
-# endif
-
- for (i = 0; i < sizeof(delaykey) / sizeof(delaykey[0]); i ++) {
+ if (autoconf_has_autoboot_prompt())
+ printf(autoconf_autoboot_prompt());
+
+ for (i = 0; i < ARRAY_SIZE(delaykey); i++) {
+ if (delaykey[i].conf && !delaykey[i].str)
+ delaykey[i].str = delaykey[i].conf;
delaykey[i].len = delaykey[i].str == NULL ?
0 : strlen (delaykey[i].str);
delaykey[i].len = delaykey[i].len > MAX_DELAY_STOP_STR ?
@@ -158,7 +145,7 @@ static int abortboot_keyed(int bootdelay)
}
}
- for (i = 0; i < sizeof(delaykey) / sizeof(delaykey[0]); i ++) {
+ for (i = 0; i < ARRAY_SIZE(delaykey); i++) {
if (delaykey[i].len > 0 &&
presskey_len >= delaykey[i].len &&
memcmp (presskey + presskey_len - delaykey[i].len,
@@ -180,45 +167,39 @@ static int abortboot_keyed(int bootdelay)
if (!abort)
debug_bootkeys("key timeout\n");
-#ifdef CONFIG_SILENT_CONSOLE
- if (abort)
+ if (autoconf_silent_console() && abort)
gd->flags &= ~GD_FLG_SILENT;
-#endif
return abort;
}
# else /* !defined(CONFIG_AUTOBOOT_KEYED) */
-#ifdef CONFIG_MENUKEY
-static int menukey = 0;
-#endif
+static int menukey;
static int abortboot_normal(int bootdelay)
{
int abort = 0;
unsigned long ts;
-#ifdef CONFIG_MENUPROMPT
- printf(CONFIG_MENUPROMPT);
-#else
- if (bootdelay >= 0)
+ if (autoconf_menuprompt())
+ printf(autoconf_menuprompt());
+ else if (bootdelay >= 0)
printf("Hit any key to stop autoboot: %2d ", bootdelay);
-#endif
-#if defined CONFIG_ZERO_BOOTDELAY_CHECK
/*
- * Check if key already pressed
- * Don't check if bootdelay < 0
+ * If we need to do a bootdelay check even if bootdelay is 0, do
+ * it here, since the loop below will be skipped in this case.
+ * We don't do this check if bootdelay < 0.
*/
- if (bootdelay >= 0) {
- if (tstc()) { /* we got a key press */
+ if (autoconf_zero_bootdelay_check() && bootdelay >= 0) {
+ /* Check if key already pressed */
+ if (tstc()) { /* we got a key press */
(void) getc(); /* consume input */
puts ("\b\b\b 0");
abort = 1; /* don't auto boot */
}
}
-#endif
while ((bootdelay > 0) && (!abort)) {
--bootdelay;
@@ -228,11 +209,10 @@ static int abortboot_normal(int bootdelay)
if (tstc()) { /* we got a key press */
abort = 1; /* don't auto boot */
bootdelay = 0; /* no more delay */
-# ifdef CONFIG_MENUKEY
- menukey = getc();
-# else
- (void) getc(); /* consume input */
-# endif
+ if (autoconf_menukey())
+ menukey = getc();
+ else
+ (void) getc(); /* consume input */
break;
}
udelay(10000);
@@ -243,10 +223,8 @@ static int abortboot_normal(int bootdelay)
putc('\n');
-#ifdef CONFIG_SILENT_CONSOLE
- if (abort)
+ if (autoconf_silent_console() && abort)
gd->flags &= ~GD_FLG_SILENT;
-#endif
return abort;
}
--
1.8.3
More information about the U-Boot
mailing list