aboutsummaryrefslogtreecommitdiff
path: root/platforms/mambo/console.c
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2016-12-21 15:52:27 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-01-04 17:15:34 +1100
commit4005c1c7215364a4b53d5304d3b5afd44f5e17a7 (patch)
tree1b482567b2d3300c142f8fd74f3af3766dd3d5ce /platforms/mambo/console.c
parent8b00ce79a32f9a7dedd392f8a64a672fcbd8d1e0 (diff)
downloadskiboot-4005c1c7215364a4b53d5304d3b5afd44f5e17a7.zip
skiboot-4005c1c7215364a4b53d5304d3b5afd44f5e17a7.tar.gz
skiboot-4005c1c7215364a4b53d5304d3b5afd44f5e17a7.tar.bz2
console: move mambo con_ops into the platform
There's no need for this to be in the skiboot core console code. Also do a few cleanups while we're shovling code around. Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'platforms/mambo/console.c')
-rw-r--r--platforms/mambo/console.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/platforms/mambo/console.c b/platforms/mambo/console.c
new file mode 100644
index 0000000..c7d7ab0
--- /dev/null
+++ b/platforms/mambo/console.c
@@ -0,0 +1,68 @@
+/* Copyright 2016 IBM Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <skiboot.h>
+#include <console.h>
+
+#include "mambo.h"
+
+/*
+ * The SIM_READ_CONSOLE callout will return -1 if there is no character to read.
+ * There's no explicit poll callout so we "poll" by doing a read and stashing
+ * the result until we do an actual read.
+ */
+static int mambo_char = -1;
+
+static bool mambo_console_poll(void)
+{
+ if (mambo_char < 0)
+ mambo_char = callthru0(SIM_READ_CONSOLE_CODE);
+
+ return mambo_char >= 0;
+}
+
+static size_t mambo_console_read(char *buf, size_t len)
+{
+ size_t count = 0;
+
+ while (count < len) {
+ if (!mambo_console_poll())
+ break;
+
+ buf[count++] = mambo_char;
+ mambo_char = -1;
+ }
+
+ return count;
+}
+
+size_t mambo_console_write(const char *buf, size_t len)
+{
+ callthru2(SIM_WRITE_CONSOLE_CODE, (unsigned long)buf, len);
+ return len;
+}
+
+static struct con_ops mambo_con_driver = {
+ .poll_read = mambo_console_poll,
+ .read = mambo_console_read,
+ .write = mambo_console_write,
+};
+
+void enable_mambo_console(void)
+{
+ prlog(PR_NOTICE, "Enabling Mambo console\n");
+ set_console(&mambo_con_driver);
+}