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/arm/lpc24xx/console | |
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 'c/src/lib/libbsp/arm/lpc24xx/console')
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/console/console-config.c | 151 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c | 10 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c | 10 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c | 10 |
4 files changed, 93 insertions, 88 deletions
diff --git a/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c b/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c index cce146fc5a..de94552c27 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c +++ b/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c @@ -7,10 +7,10 @@ */ /* - * Copyright (c) 2008-2011 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,13 +20,15 @@ * http://www.rtems.org/license/LICENSE. */ -#include <libchip/serial.h> +#include <rtems/console.h> + #include <libchip/ns16550.h> #include <bsp.h> #include <bsp/lpc24xx.h> #include <bsp/irq.h> #include <bsp/io.h> +#include <bsp/console-termios.h> static uint8_t lpc24xx_uart_get_register(uintptr_t addr, uint8_t i) { @@ -42,94 +44,91 @@ static void lpc24xx_uart_set_register(uintptr_t addr, uint8_t i, uint8_t val) reg [i] = val; } -console_tbl Console_Configuration_Ports [] = { +#ifdef LPC24XX_CONFIG_CONSOLE +static ns16550_context lpc24xx_uart_context_0 = { + .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 0"), + .get_reg = lpc24xx_uart_get_register, + .set_reg = lpc24xx_uart_set_register, + .port = UART0_BASE_ADDR, + .irq = LPC24XX_IRQ_UART_0, + .clock = LPC24XX_PCLK, + .initial_baud = LPC24XX_UART_BAUD, + .has_fractional_divider_register = true +}; +#endif + +#ifdef LPC24XX_CONFIG_UART_1 +static ns16550_context lpc24xx_uart_context_1 = { + .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 1"), + .get_reg = lpc24xx_uart_get_register, + .set_reg = lpc24xx_uart_set_register, + .port = UART1_BASE_ADDR, + .irq = LPC24XX_IRQ_UART_1, + .clock = LPC24XX_PCLK, + .initial_baud = LPC24XX_UART_BAUD, + .has_fractional_divider_register = true +}; +#endif + +#ifdef LPC24XX_CONFIG_UART_2 +static ns16550_context lpc24xx_uart_context_2 = { + .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 2"), + .get_reg = lpc24xx_uart_get_register, + .set_reg = lpc24xx_uart_set_register, + .port = UART2_BASE_ADDR, + .irq = LPC24XX_IRQ_UART_2, + .clock = LPC24XX_PCLK, + .initial_baud = LPC24XX_UART_BAUD, + .has_fractional_divider_register = true +}; +#endif + +#ifdef LPC24XX_CONFIG_UART_3 +static ns16550_context lpc24xx_uart_context_3 = { + .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 3"), + .get_reg = lpc24xx_uart_get_register, + .set_reg = lpc24xx_uart_set_register, + .port = UART3_BASE_ADDR, + .irq = LPC24XX_IRQ_UART_3, + .clock = LPC24XX_PCLK, + .initial_baud = LPC24XX_UART_BAUD, + .has_fractional_divider_register = true +}; +#endif + +const console_device console_device_table[] = { #ifdef LPC24XX_CONFIG_CONSOLE { - .sDeviceName = "/dev/ttyS0", - .deviceType = SERIAL_NS16550_WITH_FDR, - .pDeviceFns = &ns16550_fns, - .deviceProbe = NULL, - .pDeviceFlow = NULL, - .ulMargin = 16, - .ulHysteresis = 8, - .pDeviceParams = (void *) LPC24XX_UART_BAUD, - .ulCtrlPort1 = UART0_BASE_ADDR, - .ulCtrlPort2 = 0, - .ulDataPort = UART0_BASE_ADDR, - .getRegister = lpc24xx_uart_get_register, - .setRegister = lpc24xx_uart_set_register, - .getData = NULL, - .setData = NULL, - .ulClock = LPC24XX_PCLK, - .ulIntVector = LPC24XX_IRQ_UART_0 + .device_file = "/dev/ttyS0", + .probe = console_device_probe_default, + .handler = &ns16550_handler_interrupt, + .context = &lpc24xx_uart_context_0.base }, #endif #ifdef LPC24XX_CONFIG_UART_1 { - .sDeviceName = "/dev/ttyS1", - .deviceType = SERIAL_NS16550_WITH_FDR, - .pDeviceFns = &ns16550_fns, - .deviceProbe = lpc24xx_uart_probe_1, - .pDeviceFlow = NULL, - .ulMargin = 16, - .ulHysteresis = 8, - .pDeviceParams = (void *) LPC24XX_UART_BAUD, - .ulCtrlPort1 = UART1_BASE_ADDR, - .ulCtrlPort2 = 0, - .ulDataPort = UART1_BASE_ADDR, - .getRegister = lpc24xx_uart_get_register, - .setRegister = lpc24xx_uart_set_register, - .getData = NULL, - .setData = NULL, - .ulClock = LPC24XX_PCLK, - .ulIntVector = LPC24XX_IRQ_UART_1 + .device_file = "/dev/ttyS1", + .probe = lpc24xx_uart_probe_1, + .handler = &ns16550_handler_interrupt, + .context = &lpc24xx_uart_context_1.base }, #endif #ifdef LPC24XX_CONFIG_UART_2 { - .sDeviceName = "/dev/ttyS2", - .deviceType = SERIAL_NS16550_WITH_FDR, - .pDeviceFns = &ns16550_fns, - .deviceProbe = lpc24xx_uart_probe_2, - .pDeviceFlow = NULL, - .ulMargin = 16, - .ulHysteresis = 8, - .pDeviceParams = (void *) LPC24XX_UART_BAUD, - .ulCtrlPort1 = UART2_BASE_ADDR, - .ulCtrlPort2 = 0, - .ulDataPort = UART2_BASE_ADDR, - .getRegister = lpc24xx_uart_get_register, - .setRegister = lpc24xx_uart_set_register, - .getData = NULL, - .setData = NULL, - .ulClock = LPC24XX_PCLK, - .ulIntVector = LPC24XX_IRQ_UART_2 + .device_file = "/dev/ttyS2", + .probe = lpc24xx_uart_probe_2, + .handler = &ns16550_handler_interrupt, + .context = &lpc24xx_uart_context_2.base }, #endif #ifdef LPC24XX_CONFIG_UART_3 { - .sDeviceName = "/dev/ttyS3", - .deviceType = SERIAL_NS16550_WITH_FDR, - .pDeviceFns = &ns16550_fns, - .deviceProbe = lpc24xx_uart_probe_3, - .pDeviceFlow = NULL, - .ulMargin = 16, - .ulHysteresis = 8, - .pDeviceParams = (void *) LPC24XX_UART_BAUD, - .ulCtrlPort1 = UART3_BASE_ADDR, - .ulCtrlPort2 = 0, - .ulDataPort = UART3_BASE_ADDR, - .getRegister = lpc24xx_uart_get_register, - .setRegister = lpc24xx_uart_set_register, - .getData = NULL, - .setData = NULL, - .ulClock = LPC24XX_PCLK, - .ulIntVector = LPC24XX_IRQ_UART_3 + .device_file = "/dev/ttyS3", + .probe = lpc24xx_uart_probe_3, + .handler = &ns16550_handler_interrupt, + .context = &lpc24xx_uart_context_3.base }, #endif }; -#define LPC24XX_UART_COUNT \ - (sizeof(Console_Configuration_Ports) \ - / sizeof(Console_Configuration_Ports [0])) -unsigned long Console_Configuration_Count = LPC24XX_UART_COUNT; +const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table); diff --git a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c index e3af1513d5..3b5f08059f 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c +++ b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c @@ -7,10 +7,10 @@ */ /* - * Copyright (c) 2011-2013 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> @@ -20,10 +20,12 @@ * http://www.rtems.org/license/LICENSE. */ +#include <libchip/ns16550.h> + #include <bsp.h> #include <bsp/io.h> -bool lpc24xx_uart_probe_1(int minor) +bool lpc24xx_uart_probe_1(rtems_termios_device_context *context) { static const lpc24xx_pin_range pins [] = { LPC24XX_PIN_UART_1_TXD_P0_15, @@ -34,5 +36,5 @@ bool lpc24xx_uart_probe_1(int minor) lpc24xx_module_enable(LPC24XX_MODULE_UART_1, LPC24XX_MODULE_PCLK_DEFAULT); lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION); - return true; + return ns16550_probe(context); } diff --git a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c index 4f69d7f972..d45dbb755b 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c +++ b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c @@ -7,10 +7,10 @@ */ /* - * Copyright (c) 2011-2013 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> @@ -20,10 +20,12 @@ * http://www.rtems.org/license/LICENSE. */ +#include <libchip/ns16550.h> + #include <bsp.h> #include <bsp/io.h> -bool lpc24xx_uart_probe_2(int minor) +bool lpc24xx_uart_probe_2(rtems_termios_device_context *context) { static const lpc24xx_pin_range pins [] = { LPC24XX_PIN_UART_2_TXD_P0_10, @@ -34,5 +36,5 @@ bool lpc24xx_uart_probe_2(int minor) lpc24xx_module_enable(LPC24XX_MODULE_UART_2, LPC24XX_MODULE_PCLK_DEFAULT); lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION); - return true; + return ns16550_probe(context); } diff --git a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c index d71002fea1..fad932ef9e 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c +++ b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c @@ -7,10 +7,10 @@ */ /* - * Copyright (c) 2011-2013 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> @@ -20,10 +20,12 @@ * http://www.rtems.org/license/LICENSE. */ +#include <libchip/ns16550.h> + #include <bsp.h> #include <bsp/io.h> -bool lpc24xx_uart_probe_3(int minor) +bool lpc24xx_uart_probe_3(rtems_termios_device_context *context) { static const lpc24xx_pin_range pins [] = { LPC24XX_PIN_UART_3_TXD_P0_0, @@ -34,5 +36,5 @@ bool lpc24xx_uart_probe_3(int minor) lpc24xx_module_enable(LPC24XX_MODULE_UART_3, LPC24XX_MODULE_PCLK_DEFAULT); lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION); - return true; + return ns16550_probe(context); } |