summaryrefslogtreecommitdiffstats
path: root/src/core/console.c
diff options
context:
space:
mode:
authorMichael Brown2013-11-27 20:42:23 +0100
committerMichael Brown2013-11-28 06:55:43 +0100
commitc501c980e0c2a0bf63b88fab6beea249690d05a9 (patch)
tree0ea9cb9d11063f1a1837c04de0e2e0db7e65a845 /src/core/console.c
parent[console] Allow console input and output to be disabled independently (diff)
downloadipxe-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.c32
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;
+}