From 87ed07a0022f0bc202be38abf4a748b5b12edf9a Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Wed, 15 Sep 2021 14:36:44 +0200 Subject: console: add new CONFIG_CONSOLE_DISABLE_INPUT option Add CONFIG_CONSOLE_DISABLE_INPUT to initialize the consoles without input support, making default bootup effectively non-interactive. Signed-off-by: Rouven Czerwinski Signed-off-by: Ahmad Fatoum Tested-by: Christian Melki Link: https://lore.barebox.org/20210915123644.1292607-1-ahmad@a3f.at Signed-off-by: Sascha Hauer --- common/Kconfig | 11 +++++++++++ common/console.c | 12 +++++++----- common/console_simple.c | 5 ++++- common/startup.c | 5 +++++ include/console.h | 2 ++ 5 files changed, 29 insertions(+), 6 deletions(-) diff --git a/common/Kconfig b/common/Kconfig index 506b1dd39a..a5114c5ab7 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -812,6 +812,17 @@ config CONSOLE_ALLOW_COLOR compile time default for colored console output. After boot it can be controlled using global.allow_color. +config CONSOLE_DISABLE_INPUT + prompt "Disable input on all consoles by default (non-interactive)" + def_bool CONSOLE_NONE + help + If enabled, all consoles are initially configured to not accept any input, + making the consoles effectively non-interactive. + The active device parameter can be used to override this on a per-console + basis. + CAUTION: this will also disable input devices by default, since they are + registered as consoles. + config PBL_CONSOLE depends on PBL_IMAGE depends on !CONSOLE_NONE diff --git a/common/console.c b/common/console.c index ad1a6aaab2..0368c72d0b 100644 --- a/common/console.c +++ b/common/console.c @@ -328,7 +328,7 @@ int console_register(struct console_device *newcdev) return of_platform_populate(serdev_node, NULL, dev); if (newcdev->dev && of_device_is_stdout_path(newcdev->dev, &baudrate)) { - activate = 1; + activate = CONSOLE_STDIOE; console_set_stdoutpath(newcdev, baudrate); } @@ -349,16 +349,18 @@ int console_register(struct console_device *newcdev) if (IS_ENABLED(CONFIG_CONSOLE_ACTIVATE_FIRST)) { if (list_empty(&console_list)) - activate = 1; + activate = CONSOLE_STDIOE; } else if (IS_ENABLED(CONFIG_CONSOLE_ACTIVATE_ALL)) { - activate = 1; + activate = CONSOLE_STDIOE; } list_add_tail(&newcdev->list, &console_list); + if (IS_ENABLED(CONFIG_CONSOLE_DISABLE_INPUT)) + activate &= ~CONSOLE_STDIN; + if (activate) - console_set_active(newcdev, CONSOLE_STDIN | - CONSOLE_STDOUT | CONSOLE_STDERR); + console_set_active(newcdev, activate); /* expose console as device in fs */ newcdev->devfs.name = basprintf("%s%d", newcdev->class_dev.name, diff --git a/common/console_simple.c b/common/console_simple.c index 42224842c5..3b95570e5e 100644 --- a/common/console_simple.c +++ b/common/console_simple.c @@ -92,7 +92,10 @@ int console_register(struct console_device *newcdev) newcdev->setbrg(newcdev, newcdev->baudrate); } - newcdev->f_active = CONSOLE_STDIN | CONSOLE_STDOUT | CONSOLE_STDERR; + newcdev->f_active = CONSOLE_STDIOE; + + if (IS_ENABLED(CONFIG_CONSOLE_DISABLE_INPUT)) + newcdev->f_active = ~CONSOLE_STDIN; barebox_banner(); diff --git a/common/startup.c b/common/startup.c index d170cb8a7c..0c7033f381 100644 --- a/common/startup.c +++ b/common/startup.c @@ -241,6 +241,11 @@ enum autoboot_state do_autoboot_countdown(void) if (autoboot_state != AUTOBOOT_UNKNOWN) return autoboot_state; + if (IS_ENABLED(CONFIG_CONSOLE_DISABLE_INPUT)) { + printf("\nNon-interactive console, booting system\n"); + return autoboot_state = AUTOBOOT_BOOT; + } + if (global_autoboot_state != AUTOBOOT_COUNTDOWN) return global_autoboot_state; diff --git a/include/console.h b/include/console.h index a71d0da42e..5d5783ca66 100644 --- a/include/console.h +++ b/include/console.h @@ -18,6 +18,8 @@ #define CONSOLE_STDOUT (1 << 1) #define CONSOLE_STDERR (1 << 2) +#define CONSOLE_STDIOE (CONSOLE_STDIN | CONSOLE_STDOUT | CONSOLE_STDERR) + enum console_mode { CONSOLE_MODE_NORMAL, CONSOLE_MODE_RS485, -- cgit v1.2.3