summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-10-07 08:29:16 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-10-07 16:35:20 +0200
commit6ec438e8a323cf623cdaecce6f2b3b52b062881a (patch)
tree8cd71b9fb974897a825b36ea1f070dd4405af46f /c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c
parentbsps: Add Termios console driver initialization (diff)
downloadrtems-6ec438e8a323cf623cdaecce6f2b3b52b062881a.tar.bz2
libchip/serial: Add alternative NS16550 driver
Use the Termios device API.
Diffstat (limited to '')
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c88
1 files changed, 37 insertions, 51 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c b/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c
index 939448a795..41ad51779b 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c
+++ b/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c
@@ -7,10 +7,10 @@
*/
/*
- * Copyright (c) 2011 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2011-2014 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
- * Obere Lagerstr. 30
+ * Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
@@ -26,8 +26,6 @@
#include <unistd.h>
#include <termios.h>
-#include <libchip/sersupp.h>
-
#include <bspopts.h>
#include <bsp/uart-bridge.h>
@@ -55,12 +53,12 @@ static void serial_settings(int fd)
static void uart_bridge_master_service(intercom_packet *packet, void *arg)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- uart_bridge_master_control *control = arg;
+ uart_bridge_master_context *ctx = arg;
sc = rtems_chain_append_with_notification(
- &control->transmit_fifo,
+ &ctx->transmit_fifo,
&packet->glue.node,
- control->transmit_task,
+ ctx->transmit_task,
TRANSMIT_EVENT
);
assert(sc == RTEMS_SUCCESSFUL);
@@ -68,10 +66,10 @@ static void uart_bridge_master_service(intercom_packet *packet, void *arg)
static void receive_task(rtems_task_argument arg)
{
- uart_bridge_master_control *control = (uart_bridge_master_control *) arg;
- intercom_type type = control->type;
+ uart_bridge_master_context *ctx = (uart_bridge_master_context *) arg;
+ intercom_type type = ctx->type;
- int fd = open(control->device_path, O_RDONLY);
+ int fd = open(ctx->device_path, O_RDONLY);
assert(fd >= 0);
serial_settings(fd);
@@ -94,10 +92,10 @@ static void receive_task(rtems_task_argument arg)
static void transmit_task(rtems_task_argument arg)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
- uart_bridge_master_control *control = (uart_bridge_master_control *) arg;
- rtems_chain_control *fifo = &control->transmit_fifo;
+ uart_bridge_master_context *ctx = (uart_bridge_master_context *) arg;
+ rtems_chain_control *fifo = &ctx->transmit_fifo;
- int fd = open(control->device_path, O_WRONLY);
+ int fd = open(ctx->device_path, O_WRONLY);
assert(fd >= 0);
serial_settings(fd);
@@ -119,12 +117,12 @@ static void transmit_task(rtems_task_argument arg)
static rtems_id create_task(
char name,
rtems_task_entry entry,
- uart_bridge_master_control *control
+ uart_bridge_master_context *ctx
)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
rtems_id task = RTEMS_ID_NONE;
- char index = (char) ('0' + control->type - INTERCOM_TYPE_UART_0);
+ char index = (char) ('0' + ctx->type - INTERCOM_TYPE_UART_0);
sc = rtems_task_create(
rtems_build_name('U', 'B', name, index),
@@ -139,57 +137,45 @@ static rtems_id create_task(
sc = rtems_task_start(
task,
entry,
- (rtems_task_argument) control
+ (rtems_task_argument) ctx
);
assert(sc == RTEMS_SUCCESSFUL);
return task;
}
-static void initialize(int minor)
+bool qoriq_uart_bridge_master_probe(rtems_termios_device_context *base)
{
- console_tbl *ct = Console_Port_Tbl [minor];
- uart_bridge_master_control *control = ct->pDeviceParams;
- intercom_type type = control->type;
-
- qoriq_intercom_service_install(type, uart_bridge_master_service, control);
- create_task('R', receive_task, control);
- control->transmit_task = create_task('T', transmit_task, control);
-}
+ uart_bridge_master_context *ctx = (uart_bridge_master_context *) base;
+ intercom_type type = ctx->type;
-static int first_open(int major, int minor, void *arg)
-{
- return -1;
-}
+ qoriq_intercom_service_install(type, uart_bridge_master_service, ctx);
+ create_task('R', receive_task, ctx);
+ ctx->transmit_task = create_task('T', transmit_task, ctx);
-static int last_close(int major, int minor, void *arg)
-{
- return -1;
+ return true;
}
-static int read_polled(int minor)
-{
- return -1;
-}
-
-static void write_polled(int minor, char c)
+static bool first_open(
+ struct rtems_termios_tty *tty,
+ rtems_termios_device_context *base,
+ struct termios *term,
+ rtems_libio_open_close_args_t *args
+)
{
- /* Do nothing */
+ return false;
}
-static int set_attributes(int minor, const struct termios *term)
+static bool set_attributes(
+ rtems_termios_device_context *base,
+ const struct termios *term
+)
{
- return -1;
+ return false;
}
-const console_fns qoriq_uart_bridge_master = {
- .deviceProbe = libchip_serial_default_probe,
- .deviceFirstOpen = first_open,
- .deviceLastClose = last_close,
- .deviceRead = read_polled,
- .deviceWrite = NULL,
- .deviceInitialize = initialize,
- .deviceWritePolled = write_polled,
- .deviceSetAttributes = set_attributes,
- .deviceOutputUsesInterrupts = false
+const rtems_termios_device_handler qoriq_uart_bridge_master = {
+ .first_open = first_open,
+ .set_attributes = set_attributes,
+ .mode = TERMIOS_POLLED
};