summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2014-04-23 13:11:40 -0700
committerMarc Jones <marc.jones@se-eng.com>2015-04-14 21:25:34 +0200
commit90f6cd35673b10535227db0b2b5fa8379804933f (patch)
treeaa50a90d5c5ee0dfbc17e82bd5cbc811de0dd1ef /src
parentd73c440959f7e8472143775a97bfa082877d139d (diff)
downloadcoreboot-90f6cd35673b10535227db0b2b5fa8379804933f.tar.gz
coreboot-90f6cd35673b10535227db0b2b5fa8379804933f.tar.bz2
coreboot-90f6cd35673b10535227db0b2b5fa8379804933f.zip
Add console wrapper for UART driver
Coreboot is designed to have a single serial console at most, on top of that it may have a CBMEM (virtual) console. Matters are complicated by the fact that console interface is different between bootblock and later stages. A linker list of console driver descriptors is used to allow to determine the set and type of console drivers at compile time. Even though the upstream seems to have done away with this approach, which does not seem the best idea. As an alternative this patch introduces a common wrapper which different UART drivers can plug in into. The driver exports a single API which can be used both directly (in bootblock) and through the wrapper (in later stages). The existing drivers can be adjusted to fit this scheme one by one. The common UART driver API also aligns fine with the upstream approach. BUG=chrome-os-partner:27784 TEST=none yet Original-Change-Id: Id1fe73d29f2a3c722bd77180beebaedb9bf7d6a1 Original-Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/196660 Original-Reviewed-by: Stefan Reinauer <reinauer@chromium.org> (cherry picked from commit 94a36ad79a96f83d283c0fd073b05f98ae48820c) Signed-off-by: Marc Jones <marc.jones@se-eng.com> Change-Id: Id1fe73d29f2a3c722bd77180beebaedb9bf7d6a1 Reviewed-on: http://review.coreboot.org/7872 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/console/uart_wrapper.c28
-rw-r--r--src/include/console/console.h14
2 files changed, 42 insertions, 0 deletions
diff --git a/src/console/uart_wrapper.c b/src/console/uart_wrapper.c
new file mode 100644
index 000000000000..0454cfc213dc
--- /dev/null
+++ b/src/console/uart_wrapper.c
@@ -0,0 +1,28 @@
+/*
+ * This file is part of the coreboot project.
+ * Copyright 2014 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <console/console.h>
+#include <console/uart.h>
+
+static const struct console_driver uart_console __console = {
+ .init = uart_init,
+ .tx_byte = uart_tx_byte,
+ .tx_flush = uart_tx_flush,
+ .rx_byte = uart_rx_byte,
+ .tst_byte = uart_can_rx_byte,
+};
diff --git a/src/include/console/console.h b/src/include/console/console.h
index b5de7d7f441a..b0971e5323f8 100644
--- a/src/include/console/console.h
+++ b/src/include/console/console.h
@@ -26,6 +26,20 @@
#include <console/loglevel.h>
#ifndef __ROMCC__
+struct console_driver {
+ void (*init)(int);
+ void (*tx_byte)(int, unsigned char byte);
+ void (*tx_flush)(int);
+ unsigned char (*rx_byte)(int);
+ int (*tst_byte)(void);
+};
+
+#define __console __attribute__((used, __section__ (".rodata.console_drivers")))
+
+/* Defined by the linker... */
+extern struct console_driver console_drivers[];
+extern struct console_driver econsole_drivers[];
+
void post_code(u8 value);
#if CONFIG_CMOS_POST_EXTRA
void post_log_extra(u32 value);