summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/lpc24xx
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/arm/lpc24xx
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 'c/src/lib/libbsp/arm/lpc24xx')
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/Makefile.am7
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/console/console-config.c151
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c10
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c10
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c10
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/include/bsp.h12
6 files changed, 102 insertions, 98 deletions
diff --git a/c/src/lib/libbsp/arm/lpc24xx/Makefile.am b/c/src/lib/libbsp/arm/lpc24xx/Makefile.am
index 3ff85d6d7f..c7fcb86d13 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/Makefile.am
+++ b/c/src/lib/libbsp/arm/lpc24xx/Makefile.am
@@ -121,11 +121,8 @@ libbsp_a_SOURCES += irq/irq.c
libbsp_a_SOURCES += irq/irq-dispatch.c
# Console
-libbsp_a_SOURCES += ../../shared/console.c
-libbsp_a_SOURCES += ../../shared/console_control.c
-libbsp_a_SOURCES += ../../shared/console_read.c
-libbsp_a_SOURCES += ../../shared/console_select.c
-libbsp_a_SOURCES += ../../shared/console_write.c
+libbsp_a_SOURCES += ../../shared/console-termios-init.c
+libbsp_a_SOURCES += ../../shared/console-termios.c
libbsp_a_SOURCES += console/console-config.c
libbsp_a_SOURCES += console/uart-probe-1.c
libbsp_a_SOURCES += console/uart-probe-2.c
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);
}
diff --git a/c/src/lib/libbsp/arm/lpc24xx/include/bsp.h b/c/src/lib/libbsp/arm/lpc24xx/include/bsp.h
index fad125a94d..e8c5d9ac12 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/include/bsp.h
+++ b/c/src/lib/libbsp/arm/lpc24xx/include/bsp.h
@@ -7,10 +7,10 @@
*/
/*
- * Copyright (c) 2008-2013 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>
@@ -53,6 +53,8 @@ extern "C" {
struct rtems_bsdnet_ifconfig;
+struct rtems_termios_device_context;
+
/**
* @defgroup lpc24xx LPC24XX Support
*
@@ -111,11 +113,11 @@ void *bsp_idle_thread(uintptr_t ignored);
void bsp_restart(void *addr);
-bool lpc24xx_uart_probe_1(int minor);
+bool lpc24xx_uart_probe_1(struct rtems_termios_device_context *context);
-bool lpc24xx_uart_probe_2(int minor);
+bool lpc24xx_uart_probe_2(struct rtems_termios_device_context *context);
-bool lpc24xx_uart_probe_3(int minor);
+bool lpc24xx_uart_probe_3(struct rtems_termios_device_context *context);
/** @} */