summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2011-01-17 10:31:18 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2011-01-17 10:31:18 +0000
commit29badca6c11a3743e14c23b361ce886d3236979b (patch)
treedb5dd1417452768396fa94b013294eeff61e1aa1 /c
parent2011-01-14 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-29badca6c11a3743e14c23b361ce886d3236979b.tar.bz2
2011-01-17 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libchip/serial/ns16550.c: Install interrupt handler after TTY pointer is valid.
Diffstat (limited to 'c')
-rw-r--r--c/src/ChangeLog5
-rw-r--r--c/src/libchip/serial/ns16550.c7
2 files changed, 8 insertions, 4 deletions
diff --git a/c/src/ChangeLog b/c/src/ChangeLog
index b00fd9e446..92efa36870 100644
--- a/c/src/ChangeLog
+++ b/c/src/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-17 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * libchip/serial/ns16550.c: Install interrupt handler after TTY
+ pointer is valid.
+
2010-10-25 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libchip/ide/ata.c: Do not violate chain API.
diff --git a/c/src/libchip/serial/ns16550.c b/c/src/libchip/serial/ns16550.c
index 11e33f8915..e6552a908a 100644
--- a/c/src/libchip/serial/ns16550.c
+++ b/c/src/libchip/serial/ns16550.c
@@ -68,10 +68,10 @@ console_flow ns16550_flow_DTRCTS = {
console_fns ns16550_fns = {
libchip_serial_default_probe, /* deviceProbe */
ns16550_open, /* deviceFirstOpen */
- NULL, /* deviceLastClose */
+ ns16550_close, /* deviceLastClose */
NULL, /* deviceRead */
ns16550_write_support_int, /* deviceWrite */
- ns16550_initialize_interrupts, /* deviceInitialize */
+ ns16550_init, /* deviceInitialize */
ns16550_write_polled, /* deviceWritePolled */
ns16550_set_attributes, /* deviceSetAttributes */
true /* deviceOutputUsesInterrupts */
@@ -186,6 +186,7 @@ NS16550_STATIC int ns16550_open(
rtems_termios_set_initial_baud( tty, (intptr_t) c->pDeviceParams);
if (c->pDeviceFns->deviceOutputUsesInterrupts) {
+ ns16550_initialize_interrupts( minor);
ns16550_enable_interrupts( minor, NS16550_ENABLE_ALL_INTR_EXCEPT_TX);
}
@@ -598,8 +599,6 @@ NS16550_STATIC void ns16550_initialize_interrupts( int minor)
#endif
console_data *d = &Console_Port_Data [minor];
- ns16550_init( minor);
-
d->bActive = false;
#ifdef BSP_FEATURE_IRQ_EXTENSION