Thu Jan 26 09:02:49 1995  Theodore Y. Ts'o  (tytso@rt-11)

	* serial.c (rs_init, set_serial_info, get_serial_info, rs_close):
		Support close_wait and close_wait2 in the serial driver.
		This is helpful for slow devices (like serial plotters) so
		that their outputs don't get flushed upon device close.
		This has to be configurable because normally we don't want
		ports to be hung up for long periods of time during a
		close when they are not connected to a device, or the
		device is powered off.

		The default is to wait 30 seconds after shutting down the
		receiver (to prevent echo wars).  This is done by setting
		close_wait=ASYNC_CLOSE_WAIT_NONE, close_wait2 = 3000.  If
		XON/XOFF handshaking is used, then the 30 second timeout
		should happen before the receiver is shutdown; this is
		done by reversing the values of close_wait and
		close_wait2.  In the case of a very slow device, the
		timeouts for close_wait or close_wait2 should be lengthened.
		If either value is set to 0, the kernel will wait forever
		for all of the data to be transmitted.  

Thu Jan 17 01:17:20 1995  Theodore Y. Ts'o  (tytso@rt-11)

	* serial.c (startup, change_speed, rs_init): Add support to detect
		the StarTech 16650 chip.  Treat it as a 16450 for now,
		because of its FIFO bugs.

Thu Jan  5 21:21:57 1995  <dhinds@allegro.stanford.edu>

	* serial.c: (receive_char): Added counter to prevent infinite loop
		when a PCMCIA serial device is ejected.

Thu Dec 29 17:53:48 1994    <tytso@rsx-11.mit.edu>

	* tty_io.c (check_tty_count): New procedure which checks
		tty->count to make sure that it matches with the number of
		open file descriptors which point at the structure.  If
		the number doesn't match, it prints a warning message.

Wed Dec 28 15:41:51 1994    <tytso@rsx-11.mit.edu>

	* tty_io.c (do_tty_hangup, disassociate_ctty): At hangup time,
		save the tty's current foreground process group in the
		session leader's task structure.  When the session leader
		terminates, send a SIGHUP, SIGCONT to that process group.
		This is not required by POSIX, but it's not prohibited
		either, and it appears to be the least intrusive way
		to fix a problem that dialup servers have with
		orphaned process groups caused by modem hangups.

Thu Dec  8 14:52:11 1994    <tytso@rsx-11.mit.edu>

	* serial.c (rs_ioctl): Don't allow most ioctl's if the serial port
		isn't initialized.

	* serial.c (rs_close): Don't clear the IER if the serial port
		isn't initialized. 

	* serial.c (block_til_ready): Don't try to block on the dialin
		port if the serial port isn't initialized.

Wed Dec  7 10:48:30 1994  Si Park (si@wimpol.demon.co.uk)
	* tty_io.c (tty_register_driver): Fix bug when linking onto
		the tty_drivers list. We now test that there are elements
		already on the list before setting the back link from the
		first element to the new driver.

	* tty_io.c (tty_unregister_driver): Fix bug in unlinking the
		specified driver from the tty_drivers list. We were not
		setting the back link correctly. This used to result in
		a dangling back link pointer and cause panics on the next
		call to get_tty_driver().

Tue Nov 29 10:21:09 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_io.c (tty_unregister_driver): Fix bug in
		tty_unregister_driver where the pointer to the refcount is
		tested, instead of the refcount itself.  This caused
		tty_unregister_driver to always return EBUSY.

Sat Nov 26 11:59:24 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_io.c (tty_ioctl): Add support for the new ioctl
		TIOCTTYGSTRUCT, which allow a kernel debugging program
		direct read access to the tty and tty_driver structures.

Fri Nov 25 17:26:22 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* serial.c (rs_set_termios): Don't wake up processes blocked in
		open when the CLOCAL flag changes, since a blocking
		open only samples the CLOCAL flag once when it blocks,
		and doesn't check it again.  (n.b.  FreeBSD has a
		different behavior for blocking opens; it's not clear
		whether Linux or FreeBSD's interpretation is correct.
		POSIX doesn't give clear guidance on this issue, so
		this may change in the future....)

	* serial.c (block_til_ready): Use the correct termios structure to
		check the CLOCAL flag.  If the cuaXX device is active,
		then check the saved termios for the ttySXX device.
		Otherwise, use the currently active termios structure.

Sun Nov  6 21:05:44 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* serial.c (change_speed): Add support for direct access of
		57,600 and 115,200 bps.

Wed Nov  2 10:32:36 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* n_tty.c (n_tty_receive_room): Only allow excess characters
		through if we are in ICANON mode *and* there are other no
		pending lines in the buffer.  Otherwise cut and paste over
		4k breaks.

Sat Oct 29 18:17:34 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* serial.c (rs_ioctl, get_lsr_info): Added patch suggested by Arne
		Riiber so that user mode programs can tell when the
		transmitter shift register is empty.

Thu Oct 27 23:14:29 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_ioctl.c (wait_until_sent): Added debugging printk statements
		(under the #ifdef TTY_DEBUG_WAIT_UNTIL_SENT)  

	* serial.c (rs_interrupt, rs_interrupt_single, receive_chars,
		change_speed, rs_close): rs_close now disables receiver
		interrupts when closing the serial port.  This allows the
		serial port to close quickly when Linux and a modem (or a
		mouse) are engaged in an echo war; when closing the serial
		port, we now first stop listening to incoming characters,
		and *then* wait for the transmit buffer to drain.  

		In order to make this change, the info->read_status_mask
		is now used to control what bits of the line status
		register are looked at in the interrupt routine in all
		cases; previously it was only used in receive_chars to
		select a few of the status bits.

Mon Oct 24 23:36:21 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* serial.c (rs_close): Add a timeout to the transmitter flush
		loop; this is just a sanity check in case we have flaky
		(or non-existent-but-configured-by-the-user) hardware.

Fri Oct 21 09:37:23 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_io.c (tty_fasync): When asynchronous I/O is enabled, if the
		process or process group has not be specified yet, set it
		to be the tty's process group, or if that is not yet set,
		to the current process's pid.

Thu Oct 20 23:17:28 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* n_tty.c (n_tty_receive_room): If we are doing input
		canonicalization, let as many characters through as
		possible, so that the excess characters can be "beeped".

Tue Oct 18 10:02:43 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* serial.c (rs_start): Removed an incorrect '!' that was
		preventing transmit interrupts from being re-enabled in
		rs_start().  Fortunately in most cases it would be
		re-enabled elsewhere, but this still should be fixed
		correctly.

Sun Oct  9 23:46:03 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_io.c (do_tty_hangup): If the tty driver flags
		TTY_DRIVER_RESET_TERMIOS is set, then reset the termios
		settings back to the driver's initial configuration.  This
		allows the termios settings to be reset even if a process
		has hung up file descriptors keeping a pty's termios from
		being freed and reset.

	* tty_io.c (release_dev): Fix memory leak.  The pty's other
		termios structure should also be freed.

	* serial.c (rs_close, shutdown): Change how we wait for the
		transmitter to completely drain before shutting down the
		serial port.  We now do it by scheduling in another
		process instead of busy looping with the interrupts turned
		on.  This may eliminate some race condition problems that
		some people seem to be reporting.

Sun Sep 25 14:18:14 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_io.c (release_dev): When freeing a tty make sure that both
		the tty and the o_tty (if present) aren't a process's
		controlling tty.  (Previously, we only checked the tty.)

	* serial.c (change_speed): Only enable the Modem Status
		Interrupt for a port if CLOCAL is not set or CRTSCTS
		is set.  If we're not checking the carrier detect and
		CTS line, there's no point in enabling the modem
		status interrupt.  This will save spurious interrupts
		from slowing down systems who have terminals that
		don't support either line.  (Of course, if you want
		only one of CD and CTS support, you will need a
		properly wired serial cable.)

Thu Sep 22 08:32:48 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_io.c (do_SAK): Return if tty is null.

	* tty_io.c (_tty_name): Return "NULL tty" if the passed in tty is
		NULL.

Sat Sep 17 13:19:25 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_ioctl.c (n_tty_ioctl): Fix TIOCGLCKTRMIOS and
		TIOCSLCKTRMIOS, which were totally broken.  Remove
		extra indirection from argument; it should be a struct
		termios *, not a struct termios **.
		&real_tty->termios_locked should have been
		real_tty->termios_locked.  This caused us to be
		reading and writing the termios_locked structure to
		random places in kernel memory.  

	* tty_io.c (release_dev): Oops!  Forgot to delete a critical kfree
		of the locked_termios.  This leaves the locked_termios
		structure pointed at a freed object.  

Fri Sep 16 08:13:25 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* tty_io.c (tty_open): Don't check for an exclusive open until
		after the device specific open routine has been called.
		Otherwise, the serial device ref counting will be screwed
		up.

	* serial.c (rs_open, block_til_ready): Don't set termios structure
		until after block_til_ready has returned successfully.
		Modify block_til_ready to check the normal_termios
		structure directly, so it doesn't rely on termios being
		set before its called.

Thu Sep 15 23:34:01 1994  Theodore Y. Ts'o  (tytso@rt-11)

	* serial.c (rs_close): Turn off interrupts during rs_close() to
		prevent a race condition with the hangup code (which
		runs during a software interrupt).

	* tty_io.c (release_dev): Don't free the locked_termios structure;
		its state must be retained across device opens.


	* tty_io.c (tty_unregister_driver): Added function to unregister a
		tty driver.  (For loadable device drivers.)


