summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c')
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c181
1 files changed, 0 insertions, 181 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
deleted file mode 100644
index 588e0a42ad..0000000000
--- a/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * @file
- *
- * @ingroup QorIQUartBridge
- *
- * @brief UART bridge master implementation.
- */
-
-/*
- * Copyright (c) 2011-2015 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@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 <sys/stat.h>
-#include <assert.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <termios.h>
-
-#include <bspopts.h>
-#include <bsp/uart-bridge.h>
-
-#define TRANSMIT_EVENT RTEMS_EVENT_13
-
-static void serial_settings(int fd)
-{
- struct termios term;
- int rv = tcgetattr(fd, &term);
- assert(rv == 0);
-
- term.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
- term.c_oflag &= ~OPOST;
- term.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
- term.c_cflag &= ~(CSIZE | PARENB);
- term.c_cflag |= CS8;
-
- term.c_cc [VMIN] = 1;
- term.c_cc [VTIME] = 1;
-
- rv = tcsetattr(fd, TCSANOW, &term);
- assert(rv == 0);
-}
-
-static void uart_bridge_master_service(intercom_packet *packet, void *arg)
-{
- rtems_status_code sc = RTEMS_SUCCESSFUL;
- uart_bridge_master_context *ctx = arg;
-
- sc = rtems_chain_append_with_notification(
- &ctx->transmit_fifo,
- &packet->glue.node,
- ctx->transmit_task,
- TRANSMIT_EVENT
- );
- assert(sc == RTEMS_SUCCESSFUL);
-}
-
-static void receive_task(rtems_task_argument arg)
-{
- uart_bridge_master_context *ctx = (uart_bridge_master_context *) arg;
- intercom_type type = ctx->type;
-
- int fd = open(ctx->device_path, O_RDONLY);
- assert(fd >= 0);
-
- serial_settings(fd);
-
- while (true) {
- intercom_packet *packet = qoriq_intercom_allocate_packet(
- type,
- INTERCOM_SIZE_64
- );
- ssize_t in = read(fd, packet->data, packet->size - 1);
- if (in > 0) {
- packet->size = (size_t) in;
- qoriq_intercom_send_packet(QORIQ_UART_BRIDGE_SLAVE_CORE, packet);
- } else {
- qoriq_intercom_free_packet(packet);
- }
- }
-}
-
-static void transmit_task(rtems_task_argument arg)
-{
- rtems_status_code sc = RTEMS_SUCCESSFUL;
- uart_bridge_master_context *ctx = (uart_bridge_master_context *) arg;
- rtems_chain_control *fifo = &ctx->transmit_fifo;
-
- int fd = open(ctx->device_path, O_WRONLY);
- assert(fd >= 0);
-
- serial_settings(fd);
-
- while (true) {
- intercom_packet *packet = NULL;
- sc = rtems_chain_get_with_wait(
- fifo,
- TRANSMIT_EVENT,
- RTEMS_NO_TIMEOUT,
- (rtems_chain_node **) &packet
- );
- assert(sc == RTEMS_SUCCESSFUL);
- write(fd, packet->data, packet->size);
- qoriq_intercom_free_packet(packet);
- }
-}
-
-static rtems_id create_task(
- char name,
- rtems_task_entry entry,
- uart_bridge_master_context *ctx
-)
-{
- rtems_status_code sc = RTEMS_SUCCESSFUL;
- rtems_id task = RTEMS_ID_NONE;
- char index = (char) ('0' + ctx->type - INTERCOM_TYPE_UART_0);
-
- sc = rtems_task_create(
- rtems_build_name('U', 'B', name, index),
- QORIQ_UART_BRIDGE_TASK_PRIORITY,
- 0,
- RTEMS_DEFAULT_MODES,
- RTEMS_DEFAULT_ATTRIBUTES,
- &task
- );
- assert(sc == RTEMS_SUCCESSFUL);
-
- sc = rtems_task_start(
- task,
- entry,
- (rtems_task_argument) ctx
- );
- assert(sc == RTEMS_SUCCESSFUL);
-
- return task;
-}
-
-bool qoriq_uart_bridge_master_probe(rtems_termios_device_context *base)
-{
- uart_bridge_master_context *ctx = (uart_bridge_master_context *) base;
- intercom_type type = ctx->type;
-
- 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);
-
- return true;
-}
-
-static bool first_open(
- struct rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- struct termios *term,
- rtems_libio_open_close_args_t *args
-)
-{
- return false;
-}
-
-static bool set_attributes(
- rtems_termios_device_context *base,
- const struct termios *term
-)
-{
- return false;
-}
-
-const rtems_termios_device_handler qoriq_uart_bridge_master = {
- .first_open = first_open,
- .set_attributes = set_attributes,
- .mode = TERMIOS_POLLED
-};