summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-08-07 09:47:05 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-08-10 09:05:46 +0200
commit19b365fdadf3d93973d56dd96b4cbc732392ee41 (patch)
treef2f7b1fbd8e015dcbe195a9d755d4fc793e7846e
parent634848fc5b645a4e26c9af0d9715786f0030e8d1 (diff)
bsps: Add shared XM console device
-rw-r--r--c/src/lib/libbsp/shared/include/fatal.h3
-rw-r--r--c/src/lib/libbsp/shared/xm/console-xm.c65
-rw-r--r--c/src/lib/libbsp/shared/xm/printk-support-xm.c29
3 files changed, 97 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/shared/include/fatal.h b/c/src/lib/libbsp/shared/include/fatal.h
index cc303fa1f5..3a63fb4b8b 100644
--- a/c/src/lib/libbsp/shared/include/fatal.h
+++ b/c/src/lib/libbsp/shared/include/fatal.h
@@ -42,6 +42,9 @@ typedef enum {
BSP_FATAL_CONSOLE_INSTALL_1,
BSP_FATAL_CONSOLE_REGISTER_DEV_2,
+ /* XtratuM fatal codes */
+ XM_BSP_FATAL_CONSOLE_DEVICE_INSTALL_XM = BSP_FATAL_CODE_BLOCK(7949),
+
/* ARM fatal codes */
BSP_ARM_A9MPCORE_FATAL_CLOCK_IRQ_INSTALL = BSP_FATAL_CODE_BLOCK(1),
BSP_ARM_A9MPCORE_FATAL_CLOCK_IRQ_REMOVE,
diff --git a/c/src/lib/libbsp/shared/xm/console-xm.c b/c/src/lib/libbsp/shared/xm/console-xm.c
new file mode 100644
index 0000000000..0657484639
--- /dev/null
+++ b/c/src/lib/libbsp/shared/xm/console-xm.c
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <info@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <rtems/console.h>
+#include <rtems/termiostypes.h>
+#include <bsp/fatal.h>
+#include <xm.h>
+
+static int xtratum_console_read_polled(rtems_termios_device_context *ctx)
+{
+ (void) ctx;
+
+ return -1;
+}
+
+static void xtratum_console_write(
+ rtems_termios_device_context *ctx,
+ const char *buf,
+ size_t len
+)
+{
+ (void) ctx;
+
+ XM_write_console(buf, len);
+}
+
+const rtems_termios_device_handler xtratum_console_handler = {
+ .write = xtratum_console_write,
+ .poll_read = xtratum_console_read_polled,
+ .mode = TERMIOS_POLLED
+};
+
+rtems_device_driver console_initialize(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+)
+{
+ rtems_status_code status;
+
+ rtems_termios_initialize();
+
+ status = rtems_termios_device_install(
+ CONSOLE_DEVICE_NAME,
+ &xtratum_console_handler,
+ NULL,
+ NULL
+ );
+ if (status != RTEMS_SUCCESSFUL) {
+ bsp_fatal(XM_BSP_FATAL_CONSOLE_DEVICE_INSTALL_XM);
+ }
+
+ return RTEMS_SUCCESSFUL;
+}
diff --git a/c/src/lib/libbsp/shared/xm/printk-support-xm.c b/c/src/lib/libbsp/shared/xm/printk-support-xm.c
new file mode 100644
index 0000000000..bd704f5b8f
--- /dev/null
+++ b/c/src/lib/libbsp/shared/xm/printk-support-xm.c
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <info@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <rtems/bspIo.h>
+#include <xm.h>
+
+static void console_output(char c)
+{
+ if (c == '\n') {
+ char r = '\r';
+ XM_write_console(&r, sizeof(r));
+ }
+
+ XM_write_console(&c, sizeof(c));
+}
+
+BSP_output_char_function_type BSP_output_char = console_output;
+BSP_polling_getchar_function_type BSP_poll_char = NULL;