summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp')
-rw-r--r--c/src/lib/libbsp/shared/ChangeLog9
-rw-r--r--c/src/lib/libbsp/shared/console.c36
2 files changed, 32 insertions, 13 deletions
diff --git a/c/src/lib/libbsp/shared/ChangeLog b/c/src/lib/libbsp/shared/ChangeLog
index 2ae4c3ee32..f18af298de 100644
--- a/c/src/lib/libbsp/shared/ChangeLog
+++ b/c/src/lib/libbsp/shared/ChangeLog
@@ -1,3 +1,12 @@
+2003-09-26 Cedric Aubert <cedric_aubert@yahoo.fr>
+
+ PR 501/rtems_misc
+ * console.c: console_open disables ICANON on non-console port, which
+ should be ok for the first open but not for subsequent ones. If you
+ open one serial port, you will configure it, when you reopen it you
+ will lost the ICANON parameters if you had put it. Should be done by
+ console only at first open.
+
2003-09-04 Joel Sherrill <joel@OARcorp.com>
* bootcard.c, bspclean.c, clockdrv_shell.c, console-polled.c,
diff --git a/c/src/lib/libbsp/shared/console.c b/c/src/lib/libbsp/shared/console.c
index 7623b7c628..0f59a17231 100644
--- a/c/src/lib/libbsp/shared/console.c
+++ b/c/src/lib/libbsp/shared/console.c
@@ -20,6 +20,7 @@
#include <assert.h>
#include <termios.h>
+#include <rtems/termiostypes.h>
#include <libchip/serial.h>
/*
@@ -50,6 +51,7 @@ rtems_device_driver console_open(
struct termios Termios;
rtems_termios_callbacks Callbacks;
console_tbl *cptr;
+ struct rtems_termios_tty *current_tty;
/*
* Verify the port number is valid.
@@ -79,19 +81,27 @@ rtems_device_driver console_open(
status = rtems_termios_open ( major, minor, arg, &Callbacks );
Console_Port_Data[minor].termios_data = args->iop->data1;
-
- if (minor!=Console_Port_Minor) {
- /*
- * If this is not the console we do not want ECHO and
- * so forth
- */
- IoctlArgs.iop=args->iop;
- IoctlArgs.command=RTEMS_IO_GET_ATTRIBUTES;
- IoctlArgs.buffer=&Termios;
- rtems_termios_ioctl(&IoctlArgs);
- Termios.c_lflag=ICANON;
- IoctlArgs.command=RTEMS_IO_SET_ATTRIBUTES;
- rtems_termios_ioctl(&IoctlArgs);
+
+ /* Get tty pointeur from the Console_Port_Data */
+ current_tty = Console_Port_Data[minor].termios_data;
+
+ if ( (current_tty->refcount == 1) ) {
+ /*
+ * If it's the first open, modified, if need, the port parameters
+ */
+ if (minor!=Console_Port_Minor) {
+ /*
+ * If this is not the console we do not want ECHO and
+ * so forth
+ */
+ IoctlArgs.iop=args->iop;
+ IoctlArgs.command=RTEMS_IO_GET_ATTRIBUTES;
+ IoctlArgs.buffer=&Termios;
+ rtems_termios_ioctl(&IoctlArgs);
+ Termios.c_lflag=ICANON;
+ IoctlArgs.command=RTEMS_IO_SET_ATTRIBUTES;
+ rtems_termios_ioctl(&IoctlArgs);
+ }
}
if ( (args->iop->flags&LIBIO_FLAGS_READ) &&