diff options
author | Michael Brown | 2013-11-27 20:42:23 +0100 |
---|---|---|
committer | Michael Brown | 2013-11-28 06:55:43 +0100 |
commit | c501c980e0c2a0bf63b88fab6beea249690d05a9 (patch) | |
tree | 0ea9cb9d11063f1a1837c04de0e2e0db7e65a845 /src/core/console.c | |
parent | [console] Allow console input and output to be disabled independently (diff) | |
download | ipxe-c501c980e0c2a0bf63b88fab6beea249690d05a9.tar.gz ipxe-c501c980e0c2a0bf63b88fab6beea249690d05a9.tar.xz ipxe-c501c980e0c2a0bf63b88fab6beea249690d05a9.zip |
[console] Add concept of generic console configuration
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/console.c')
-rw-r--r-- | src/core/console.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/core/console.c b/src/core/console.c index 73baf7f6..5f3c28d8 100644 --- a/src/core/console.c +++ b/src/core/console.c @@ -121,3 +121,35 @@ int getchar ( void ) { int iskey ( void ) { return has_input() ? 1 : 0; } + +/** + * Configure console + * + * @v config Console configuration + * @ret rc Return status code + * + * The configuration is passed to all configurable consoles, including + * those which are currently disabled. Consoles may choose to enable + * or disable themselves depending upon the configuration. + * + * If configuration fails, then all consoles will be reset. + */ +int console_configure ( struct console_configuration *config ) { + struct console_driver *console; + int rc; + + /* Try to configure each console */ + for_each_table_entry ( console, CONSOLES ) { + if ( ( console->configure ) && + ( ( rc = console->configure ( config ) ) != 0 ) ) + goto err; + } + + return 0; + + err: + /* Reset all consoles, avoiding a potential infinite loop */ + if ( config ) + console_reset(); + return rc; +} |