diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-10-07 08:29:16 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-10-07 16:35:20 +0200 |
commit | 6ec438e8a323cf623cdaecce6f2b3b52b062881a (patch) | |
tree | 8cd71b9fb974897a825b36ea1f070dd4405af46f /c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c | |
parent | bsps: Add Termios console driver initialization (diff) | |
download | rtems-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/gen83xx/console/console-config.c | 114 |
1 files changed, 51 insertions, 63 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c b/c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c index b3ccb9c63f..8dd7249651 100644 --- a/c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c +++ b/c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c @@ -5,10 +5,10 @@ */ /* - * Copyright (c) 2008, 2010 embedded brains GmbH. All rights reserved. + * Copyright (c) 2008-2014 embedded brains GmbH. All rights reserved. * * embedded brains GmbH - * Obere Lagerstr. 30 + * Dornierstr. 4 * 82178 Puchheim * Germany * <rtems@embedded-brains.de> @@ -20,104 +20,92 @@ #include <rtems/bspIo.h> -#include <libchip/serial.h> #include <libchip/ns16550.h> -#include "../../../shared/console_private.h" #include <mpc83xx/mpc83xx.h> -#include <bspopts.h> +#include <bsp.h> #include <bsp/irq.h> - -#ifdef BSP_USE_UART2 - #define PORT_COUNT 2 -#else - #define PORT_COUNT 1 -#endif +#include <bsp/console-termios.h> #ifdef BSP_USE_UART_INTERRUPTS - #define DEVICE_FNS &ns16550_fns + #define DEVICE_FNS &ns16550_handler_interrupt #else - #define DEVICE_FNS &ns16550_fns_polled + #define DEVICE_FNS &ns16550_handler_polled #endif -static uint8_t gen83xx_console_get_register(uint32_t addr, uint8_t i) +static uint8_t gen83xx_console_get_register(uintptr_t addr, uint8_t i) { volatile uint8_t *reg = (volatile uint8_t *) addr; return reg [i]; } -static void gen83xx_console_set_register(uint32_t addr, uint8_t i, uint8_t val) +static void gen83xx_console_set_register(uintptr_t addr, uint8_t i, uint8_t val) { volatile uint8_t *reg = (volatile uint8_t *) addr; - reg [i] = val; + reg [i] = val; } -unsigned long Console_Configuration_Count = PORT_COUNT; - -console_tbl Console_Configuration_Ports [PORT_COUNT] = { - { - .sDeviceName = "/dev/ttyS0", - .deviceType = SERIAL_NS16550, - .pDeviceFns = DEVICE_FNS, - .deviceProbe = NULL, - .pDeviceFlow = NULL, - .ulMargin = 16, - .ulHysteresis = 8, - .pDeviceParams = (void *) BSP_CONSOLE_BAUD, - .ulCtrlPort1 = (uint32_t) &mpc83xx.duart [0], - .ulCtrlPort2 = 0, - .ulDataPort = (uint32_t) &mpc83xx.duart [0], - .getRegister = gen83xx_console_get_register, - .setRegister = gen83xx_console_set_register, - .getData = NULL, - .setData = NULL, - .ulClock = 0, +static ns16550_context gen83xx_uart_context_0 = { + .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 0"), + .get_reg = gen83xx_console_get_register, + .set_reg = gen83xx_console_set_register, + .port = (uintptr_t) &mpc83xx.duart[0], #if MPC83XX_CHIP_TYPE / 10 == 830 - .ulIntVector = BSP_IPIC_IRQ_UART + .irq = BSP_IPIC_IRQ_UART, #else - .ulIntVector = BSP_IPIC_IRQ_UART1 + .irq = BSP_IPIC_IRQ_UART1, #endif - } + .initial_baud = BSP_CONSOLE_BAUD +}; + #ifdef BSP_USE_UART2 - , { - .sDeviceName = "/dev/ttyS1", - .deviceType = SERIAL_NS16550, - .pDeviceFns = DEVICE_FNS, - .deviceProbe = NULL, - .pDeviceFlow = NULL, - .ulMargin = 16, - .ulHysteresis = 8, - .pDeviceParams = (void *) BSP_CONSOLE_BAUD, - .ulCtrlPort1 = (uint32_t) &mpc83xx.duart [1], - .ulCtrlPort2 = 0, - .ulDataPort = (uint32_t) &mpc83xx.duart [1], - .getRegister = gen83xx_console_get_register, - .setRegister = gen83xx_console_set_register, - .getData = NULL, - .setData = NULL, - .ulClock = 0, +static ns16550_context gen83xx_uart_context_1 = { + .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 1"), + .get_reg = gen83xx_console_get_register, + .set_reg = gen83xx_console_set_register, + .port = (uintptr_t) &mpc83xx.duart[1], #if MPC83XX_CHIP_TYPE / 10 == 830 - .ulIntVector = BSP_IPIC_IRQ_UART + .irq = BSP_IPIC_IRQ_UART, #else - .ulIntVector = BSP_IPIC_IRQ_UART2 + .irq = BSP_IPIC_IRQ_UART2, #endif + .initial_baud = BSP_CONSOLE_BAUD +}; +#endif + +const console_device console_device_table[] = { + { + .device_file = "/dev/ttyS0", + .probe = ns16550_probe, + .handler = DEVICE_FNS, + .context = &gen83xx_uart_context_0.base + } +#ifdef BSP_USE_UART2 + , { + .device_file = "/dev/ttyS1", + .probe = ns16550_probe, + .handler = DEVICE_FNS, + .context = &gen83xx_uart_context_1.base } #endif }; +const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table); + static void gen83xx_output_char(char c) { - const console_fns *console = Console_Port_Tbl [Console_Port_Minor]->pDeviceFns; - + rtems_termios_device_context *ctx = console_device_table[0].context; + if (c == '\n') { - console->deviceWritePolled((int) Console_Port_Minor, '\r'); + ns16550_polled_putchar(ctx, '\r'); } - console->deviceWritePolled((int) Console_Port_Minor, c); + + ns16550_polled_putchar(ctx, c); } -BSP_output_char_function_type BSP_output_char = gen83xx_output_char; +BSP_output_char_function_type BSP_output_char = gen83xx_output_char; BSP_polling_getchar_function_type BSP_poll_char = NULL; |