From fc6d8c2ba5566a804386628855ad4980e764be03 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 24 Apr 2018 07:47:04 +0200 Subject: bsps: Move arm-pl050.c to bsps This patch is a part of the BSP source reorganization. Update #3285. --- bsps/arm/shared/serial/arm-pl050.c | 116 +++++++++++++++++++++++ c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am | 2 +- c/src/lib/libbsp/arm/shared/arm-pl050.c | 116 ----------------------- 3 files changed, 117 insertions(+), 117 deletions(-) create mode 100644 bsps/arm/shared/serial/arm-pl050.c delete mode 100644 c/src/lib/libbsp/arm/shared/arm-pl050.c diff --git a/bsps/arm/shared/serial/arm-pl050.c b/bsps/arm/shared/serial/arm-pl050.c new file mode 100644 index 0000000000..0b645095b5 --- /dev/null +++ b/bsps/arm/shared/serial/arm-pl050.c @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * 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 + +#include +#include + +static volatile pl050 *pl050_get_regs(rtems_termios_device_context *base) +{ + arm_pl050_context *ctx = (arm_pl050_context *) base; + + return ctx->regs; +} + +static void pl050_interrupt(void *arg) +{ + rtems_termios_tty *tty = arg; + rtems_termios_device_context *base = rtems_termios_get_device_context(tty); + volatile pl050 *regs = pl050_get_regs(base); + uint32_t kmiir_rx = PL050_KMIIR_KMIRXINTR; + uint32_t kmiir_tx = (regs->kmicr & PL050_KMICR_KMITXINTREN) != 0 ? + PL050_KMIIR_KMITXINTR : 0; + uint32_t kmiir = regs->kmiir; + + if ((kmiir & kmiir_rx) != 0) { + char c = (char) PL050_KMIDATA_KMIDATA_GET(regs->kmidata); + + rtems_termios_enqueue_raw_characters(tty, &c, 1); + } + + if ((kmiir & kmiir_tx) != 0) { + rtems_termios_dequeue_characters(tty, 1); + } +} + +static bool pl050_first_open( + struct rtems_termios_tty *tty, + rtems_termios_device_context *base, + struct termios *term, + rtems_libio_open_close_args_t *args +) +{ + arm_pl050_context *ctx = (arm_pl050_context *) base; + volatile pl050 *regs = pl050_get_regs(base); + rtems_status_code sc; + + rtems_termios_set_initial_baud(tty, ctx->initial_baud); + + regs->kmicr = PL050_KMICR_KMIEN | PL050_KMICR_KMIRXINTREN; + + sc = rtems_interrupt_handler_install( + ctx->irq, + "PL050", + RTEMS_INTERRUPT_UNIQUE, + pl050_interrupt, + tty + ); + assert(sc == RTEMS_SUCCESSFUL); + + return true; +} + +static void pl050_last_close( + struct rtems_termios_tty *tty, + rtems_termios_device_context *base, + rtems_libio_open_close_args_t *args +) +{ + arm_pl050_context *ctx = (arm_pl050_context *) base; + volatile pl050 *regs = pl050_get_regs(base); + rtems_status_code sc; + + regs->kmicr = 0; + + sc = rtems_interrupt_handler_remove( + ctx->irq, + pl050_interrupt, + tty + ); + assert(sc == RTEMS_SUCCESSFUL); +} + +static void pl050_write_support( + rtems_termios_device_context *base, + const char *s, + size_t n +) +{ + volatile pl050 *regs = pl050_get_regs(base); + + if (n > 0) { + regs->kmidata = PL050_KMIDATA_KMIDATA(s[0]); + regs->kmicr |= PL050_KMICR_KMITXINTREN; + } else { + regs->kmicr &= ~PL050_KMICR_KMITXINTREN; + } +} + +const rtems_termios_device_handler arm_pl050_fns = { + .first_open = pl050_first_open, + .last_close = pl050_last_close, + .write = pl050_write_support, + .mode = TERMIOS_IRQ_DRIVEN +}; diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am b/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am index 370849e909..b420560d7e 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am @@ -65,7 +65,7 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termio librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/getserialmouseps2.c librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/serial/arm-pl011.c -librtemsbsp_a_SOURCES += ../shared/arm-pl050.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/serial/arm-pl050.c librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/realview-pbx-a9/console/console-config.c # Clock diff --git a/c/src/lib/libbsp/arm/shared/arm-pl050.c b/c/src/lib/libbsp/arm/shared/arm-pl050.c deleted file mode 100644 index 0b645095b5..0000000000 --- a/c/src/lib/libbsp/arm/shared/arm-pl050.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved. - * - * embedded brains GmbH - * Dornierstr. 4 - * 82178 Puchheim - * Germany - * - * - * 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 - -#include -#include - -static volatile pl050 *pl050_get_regs(rtems_termios_device_context *base) -{ - arm_pl050_context *ctx = (arm_pl050_context *) base; - - return ctx->regs; -} - -static void pl050_interrupt(void *arg) -{ - rtems_termios_tty *tty = arg; - rtems_termios_device_context *base = rtems_termios_get_device_context(tty); - volatile pl050 *regs = pl050_get_regs(base); - uint32_t kmiir_rx = PL050_KMIIR_KMIRXINTR; - uint32_t kmiir_tx = (regs->kmicr & PL050_KMICR_KMITXINTREN) != 0 ? - PL050_KMIIR_KMITXINTR : 0; - uint32_t kmiir = regs->kmiir; - - if ((kmiir & kmiir_rx) != 0) { - char c = (char) PL050_KMIDATA_KMIDATA_GET(regs->kmidata); - - rtems_termios_enqueue_raw_characters(tty, &c, 1); - } - - if ((kmiir & kmiir_tx) != 0) { - rtems_termios_dequeue_characters(tty, 1); - } -} - -static bool pl050_first_open( - struct rtems_termios_tty *tty, - rtems_termios_device_context *base, - struct termios *term, - rtems_libio_open_close_args_t *args -) -{ - arm_pl050_context *ctx = (arm_pl050_context *) base; - volatile pl050 *regs = pl050_get_regs(base); - rtems_status_code sc; - - rtems_termios_set_initial_baud(tty, ctx->initial_baud); - - regs->kmicr = PL050_KMICR_KMIEN | PL050_KMICR_KMIRXINTREN; - - sc = rtems_interrupt_handler_install( - ctx->irq, - "PL050", - RTEMS_INTERRUPT_UNIQUE, - pl050_interrupt, - tty - ); - assert(sc == RTEMS_SUCCESSFUL); - - return true; -} - -static void pl050_last_close( - struct rtems_termios_tty *tty, - rtems_termios_device_context *base, - rtems_libio_open_close_args_t *args -) -{ - arm_pl050_context *ctx = (arm_pl050_context *) base; - volatile pl050 *regs = pl050_get_regs(base); - rtems_status_code sc; - - regs->kmicr = 0; - - sc = rtems_interrupt_handler_remove( - ctx->irq, - pl050_interrupt, - tty - ); - assert(sc == RTEMS_SUCCESSFUL); -} - -static void pl050_write_support( - rtems_termios_device_context *base, - const char *s, - size_t n -) -{ - volatile pl050 *regs = pl050_get_regs(base); - - if (n > 0) { - regs->kmidata = PL050_KMIDATA_KMIDATA(s[0]); - regs->kmicr |= PL050_KMICR_KMITXINTREN; - } else { - regs->kmicr &= ~PL050_KMICR_KMITXINTREN; - } -} - -const rtems_termios_device_handler arm_pl050_fns = { - .first_open = pl050_first_open, - .last_close = pl050_last_close, - .write = pl050_write_support, - .mode = TERMIOS_IRQ_DRIVEN -}; -- cgit v1.2.3