console-server: Add UART Mux Support

This commit adds support for uart-muxes which can be controlled via
gpios.

Change-Id: I91a4de1962554adf4302a2a59d2b371f492dc21d
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
diff --git a/console-server.c b/console-server.c
index 870e5a7..60d2d2e 100644
--- a/console-server.c
+++ b/console-server.c
@@ -38,6 +38,8 @@
 #include <sys/socket.h>
 #include <poll.h>
 
+#include "console-mux.h"
+
 #include "console-server.h"
 #include "config.h"
 
@@ -1075,6 +1077,12 @@
 		goto cleanup_console;
 	}
 
+	rc = console_mux_init(console, config);
+	if (rc) {
+		warnx("could not set mux gpios from config, exiting");
+		goto cleanup_rb;
+	}
+
 	if (set_socket_info(console, config, console_id)) {
 		warnx("set_socket_info failed");
 		goto cleanup_rb;
@@ -1210,6 +1218,11 @@
 		return -1;
 	}
 
+	rc = console_server_mux_init(server);
+	if (rc != 0) {
+		return -1;
+	}
+
 	uart_routing_init(server->config);
 
 	rc = tty_init(server, server->config, config_tty_kname);
@@ -1224,8 +1237,14 @@
 		return -1;
 	}
 
-	server->active = console_server_add_consoles(server, console_id);
-	if (server->active == NULL) {
+	struct console *initial_active =
+		console_server_add_consoles(server, console_id);
+	if (initial_active == NULL) {
+		return -1;
+	}
+
+	rc = console_mux_activate(initial_active);
+	if (rc != 0) {
 		return -1;
 	}
 
@@ -1242,6 +1261,7 @@
 	dbus_server_fini(server);
 	tty_fini(server);
 	free(server->pollfds);
+	console_server_mux_fini(server);
 	config_fini(server->config);
 }