summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTill Straumann <strauman@slac.stanford.edu>2008-11-03 20:53:03 +0000
committerTill Straumann <strauman@slac.stanford.edu>2008-11-03 20:53:03 +0000
commit6cbfae0a9fdbb29e62c231e4a5b75deec70c1e47 (patch)
tree99c2ef3720ff9ba8be2293f8bdfee6d80557d458
parent618e9acc0d931bd20e77e2adf0842fd7ade13618 (diff)
2008-11-03 Till Straumann <strauman@slac.stanford.edu>
PR 1332: call BSP_uart_termios_set()/BSP_uart_intr_ctrl() only from 'firstOpen' and only if this is a serial console.
-rw-r--r--c/src/lib/libbsp/i386/pc386/ChangeLog5
-rw-r--r--c/src/lib/libbsp/i386/pc386/console/console.c25
2 files changed, 21 insertions, 9 deletions
diff --git a/c/src/lib/libbsp/i386/pc386/ChangeLog b/c/src/lib/libbsp/i386/pc386/ChangeLog
index 2f15899c42..a9e56c4c42 100644
--- a/c/src/lib/libbsp/i386/pc386/ChangeLog
+++ b/c/src/lib/libbsp/i386/pc386/ChangeLog
@@ -1,3 +1,8 @@
+2008-11-03 Till Straumann <strauman@slac.stanford.edu>
+
+ PR 1332: call BSP_uart_termios_set()/BSP_uart_intr_ctrl()
+ only from 'firstOpen' and only if this is a serial console.
+
2007-05-28 Joel Sherrill <joel.sherrill@OARcorp.com>
PR 1244/bsps
diff --git a/c/src/lib/libbsp/i386/pc386/console/console.c b/c/src/lib/libbsp/i386/pc386/console/console.c
index 5581c6583c..70f7814aa2 100644
--- a/c/src/lib/libbsp/i386/pc386/console/console.c
+++ b/c/src/lib/libbsp/i386/pc386/console/console.c
@@ -274,6 +274,20 @@ static int console_last_close(int major, int minor, void *arg)
return 0;
}
+static int ser_console_first_open(int major, int minor, void *arg)
+{
+ /*
+ * Pass data area info down to driver
+ */
+ BSP_uart_termios_set(BSPConsolePort,
+ ((rtems_libio_open_close_args_t *)arg)->iop->data1);
+
+ /* Enable interrupts on channel */
+ BSP_uart_intr_ctrl(BSPConsolePort, BSP_UART_INTR_CTRL_TERMIOS);
+
+ return 0;
+}
+
/*-------------------------------------------------------------------------+
| Console device driver OPEN entry point
+--------------------------------------------------------------------------*/
@@ -321,6 +335,8 @@ console_open(rtems_device_major_number major,
cb.write = BSP_uart_termios_write_com2;
}
+ cb.firstOpen = ser_console_first_open;
+
status = rtems_termios_open (major, minor, arg, &cb);
if(status != RTEMS_SUCCESSFUL)
@@ -329,15 +345,6 @@ console_open(rtems_device_major_number major,
return status;
}
- /*
- * Pass data area info down to driver
- */
- BSP_uart_termios_set(BSPConsolePort,
- ((rtems_libio_open_close_args_t *)arg)->iop->data1);
-
- /* Enable interrupts on channel */
- BSP_uart_intr_ctrl(BSPConsolePort, BSP_UART_INTR_CTRL_TERMIOS);
-
return RTEMS_SUCCESSFUL;
}