From: gemini@geminix.in-berlin.de (Uwe Doering)
Subject: FAS 2.10 async driver, part 2/5
Organization: Private UNIX Site
Date: Mon, 17 Aug 1992 11:37:58 GMT

Submitted-by: gemini@geminix.in-berlin.de
Archive-name: fas210/part02

#!/bin/sh
# this is fas210.02 (part 2 of fas210)
# do not concatenate these parts, unpack them in order with /bin/sh
# file README continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 2; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping README'
else
echo 'x - continuing file README'
sed 's/^X//' << 'SHAR_EOF' >> 'README' &&
X     that. The real reason for this problem lies in the ancient port
X     devices used in most 286/386 systems: The 8250 (not supported by
X     FAS) and the NS16450.
X
X     They have only one receiver character buffer. This implies that
X     the operating system must read a character from this buffer before
X     the next one arrives from the port's shift register. For the old
X     IBM PC with DOS this was sufficient. But for UNIX and with baud
X     rates up to 38400 this is simply a joke.
X
X     UNIX is not a real-time operating system. That means that it's
X     kernel isn't optimized for fast interrupt responses. With the
X     proper hardware this is no problem. But because the vendors have
X     to adapt UNIX to the standard hardware found in 286/386 systems they
X     also have to cope with the NS16450 ports which are in there simply
X     to be compatible with IBM PCs, XTs and ATs.
X
X     It is impossible to make it work at high baud rates without a
X     major redesign of the AT&T supplied UNIX kernel. But then it
X     wouldn't be UNIX SYSV any more.
X
X     Luckily, there is a pin-to-pin replacement available from
X     National Semiconductors: The NS16550A.
X
X     This device has separate 16 character FIFOs for the receiver and
X     the transmitter. With these FIFOs the interrupt latency of the
X     kernel can be quite high without losing any characters.
X     Additionally, because with most interrupts many characters are
X     processed at once the system is loaded much less.
X
X     As you see, the necessary hardware is available. Therefore, if you
X     have to blame the UNIX vendor then blame him for not telling you
X     that you should buy some NS16550A and/or for not supplying you
X     with a serial driver that supports these port devices.
X
X     But as you have the FAS driver now and if you use the NS16550A
X     devices you shouldn't have this kind of trouble any more. This is
X     the philosophy behind the driver's name `Final Async Solution'.
X
X     Enjoy!
X
X     PS: If for some reason you can't get the NS16550A chips you
X         could use the i82510 chips from Intel. Although they are
X         much less efficient they are still better than the NS16450.
X
X     PPS: Some kernel functions may disable interrupts long enough
X          that even the input FIFO can't prevent character loss.
X          One culprit is the disk cache flush function. If you
X          configure your kernel with too many cache buffers (NBUF
X          parameter for AT&T derived UNIX) you may still lose
X          characters (at least at 38400 bps).
X
X          Another candidate is VP/ix, or rather the kernel functions
X          to support VP/ix. This may also lead to lost characters
X          at very high input speed.
X
X          And there are some bus mastering disk controllers (like the
X          Adaptec 1540/1542 SCSI controller) on the market that slow
X          down the CPU so much during data transfer that it isn't fast
X          enough to process characters coming in at high baud rates.
X          Therefore, if you can configure your disk controller, don't
X          use values that will bring the CPU down to its knees.
X          Otherwise, FAS will lose input characters during disk I/O.
X
X          If your operating system has a low interrupt latency you can
X          define `LOW_INT_LAT' in the makefile. This sets the receiver
X          FIFO trigger level from 4 (default) to 8 characters. This
X          cuts the receiver interrupt frequency in half and therefore
X          saves a lot CPU time. That pays off especially at very high
X          baud rates. If you set this flag you should do some rigid
X          tests (receiving characters at the highest baud rate while
X          the system is heavily loaded with disk and network i/o) to
X          make sure that there are really no lost characters due to
X          interrupt latency. ISC UNIX 3.0 is known to have a low tty
X          interrupt latency, therefore `LOW_INT_LAT' is defined in
X          `Makefile.ISC3'. However, ISC UNIX 2.x has a rather high
X          interrupt latency and shouldn't have this flag set. For
X          other UNIX flavours you have to find out yourself whether
X          this flag is applicable.
X
X
X     DEVICE LOCKUPS
X     --------------
X
X     There are certain conditions under which a device can lock up,
X     that is, at least one process that uses this device waits for
X     a tty I/O related event that obviously doesn't occure.
X
X     The most common case is that there are still characters in the
X     output buffer, but the output is disabled for some reason. Then
X     the last process that closes the tty device hangs in the close()
X     function until the output buffer has drained.
X
X     Tty output may be stopped by the software (XON/XOFF) or hardware
X     (RTS/CTS, by default) flow control. In this case something
X     seems to be wrong with the cabling or the connected device.
X     Please check this first out before you blame FAS. Sometimes
X     it helps to switch the device off and on a few times to unblock
X     the tty output.
X
X     Another reason could be a lost transmitter interrupt. If this isn't
X     caused by a configuration error this usually indicates a hardware
X     problem in your computer which should be fixed as soon as possible.
X     Otherwise, you can't run this system unattended because it is too
X     unreliable.
X
X     In the cases described above the last resort is killing the process,
X     and if it still hangs, opening the FAS device with the O_APPEND
X     flag. This flushes the output buffers and therefore releases the
X     hanging process. To do that, you simply type
X
X     echo '\c' >> /dev/ttyF00
X
X     if, for instance, the process is hanging on `/dev/ttyF00'. There
X     is, however, no guaranty that this works in all cases.
X
X     If interrupts are lost on IRQ2 this might have to do with an EGA or
X     VGA card using this IRQ line for the vertical retrace interrupt.
X     This interrupt isn't used at all these days, neither under DOS nor
X     UNIX. It's simply there for compatibility.
X
X     On some video cards (the more expensive ones) there is a jumper or
X     dip switch to disable the vertical retrace interrupt. On the rest
X     you have to cut the trace to the bus contact B4 with a sharp knife.
X     This contact is on the solder side of the video card, the fourth bus
X     contact counted from the side where the 9 or 15 pin D-SUB connector
X     to the monitor is located. Cutting this trace has the same effect as
X     pulling the IRQ2 jumper on other cards. Note that cutting the trace
X     will void your video card's warranty.
X
X     Now IRQ2 should be available for use with FAS. Look at the INSTALLATION
X     file for details on how to configure FAS for IRQ2. This is operating
X     system dependent.
X
X     And there is a rare case which has to do with the number of available
X     CLISTs in the UNIX kernel. The UNIX output and input buffers are
X     256 bytes each (by default). If for some reason the output of a
X     tty device is stopped but a process continues to send data one
X     character at a time this uses up one CLIST for every charcacter.
X     If the number of CLISTs in the kernel is less than 256 all CLISTs
X     will be busy eventually.
X
X     The dangerous part here is that the pool of CLISTs is used by all
X     tty devices. Therefore, if one single tty device manages to eat up
X     all available CLISTs all tty in- and output comes to a halt. If this
X     happens you can't access your machine any more, not even from the
X     operator console. Although, the system is still alive internally.
X
X     Unfortunately, many UNIX vendors have put a dangerously low number-of-
X     CLISTs parameter into their kernel tune files. You should increase
X     it to a value that makes it impossible that one device alone can
X     occupy all CLISTs (it's the NCLIST parameter under AT&T derived
X     UNIX SysVr[34].x). A value of 400 should be sufficient.
X
X
X     COPYRIGHT
X     ---------
X
X     Although FAS is frequently refered to as a public domain driver,
X     FAS was never released to the public domain (this is true for
X     all releases of FAS). FAS is freeware, and the author has the
X     full copyright.
X
X     Here are the conditions under which you may copy and distribute
X     FAS. The goal of these terms is to spread FAS as wide as possible
X     and, on the other hand, to prevent anyone from making money out
X     of it, and to prevent any restrictions of the availability of
X     FAS.
X
X     1. You can freely copy FAS, and you may give copies of FAS to
X        everyone.
X     2. FAS has to be distributed as the complete package posted
X        to Usenet by its author.
X     3. Vendors may bundle FAS with their products as long as they
X        a) tell their customers (somewhere in the written documentation)
X           that FAS is freeware, wasn't developed by the vendor, and the
X           vendor doesn't have the copyright for FAS. 
X        b) provide the complete original package in addition to their
X           customized version. Customization means modification of
X           the configuration files. No changes to the actual source
X           file (fas.c) are allowed.
X        c) tell their customers (somewhere in the written documentation)
X           where the original package is located on the distribution
X           media.
X     4. Changes to the sources are allowed
X        a) for private use.
X        b) to develop another freeware package with similar restrictions.
X           This new package has to have a different name.
X     5. The author isn't liable for any damage or loss of data caused
X        by FAS.
X
X------------------------------------------------------------------------
X
XWhat's in this package:
X
X     README         This file.
X
X     INSTALLATION   A description about how to install the driver
X                    on your system.
X
X     PATCHLEVEL     Just a reference file for future updates.
X
X     RELEASENOTES   Notes about the various FAS releases.
X                    
X     fas.h          The header file for the driver.
X
X     fas.c          The driver itself.
X
X     space-xxxxx    These are samples of what `space.c' must look
X                    like.  You can either copy one of these to
X                    `space.c' or use it as a template to create your
X                    own `space.c'.
X
X          space-c12      For com1 and com2.
X
X          space-c123     For com1, com2 and com3.
X
X          space-ast4     For the AST 4-port card.
X
X          space-ast4c12  For the AST 4-port card plus com1 and com2.
X
X          space-hub6     For the Bell Tech HUB-6 card.
X
X          space-digi8c1  For the DigiChannel PC/8 card plus com1.
X
X     config-xxxxx   This is for uPort SYS V/386 only.
X                    Kernel configuaration file.  You should pick the one
X                    that matches your configuration and copy it to `config'.
X
X          config-c12     For com1 and com2.
X
X          config-c123    For com1, com2 and com3.
X
X          config-ast4    For the AST 4-port card.
X
X          config-ast4c12 For the AST 4-port card plus com1 and com2.
X
X          config-hub6    For the Bell Tech HUB-6 card.
X
X          config-digi8c1 For the DigiChannel PC/8 card plus com1.
X
X     s_fas-xxxxx    This is for ISC UNIX, ESIX, Bell Tech/Intel UNIX 3.2,
X                    SCO UNIX, AT&T UNIX 386 and SysVr4 UNIX 386.
X                    Kernel configuration file.  You should pick the one
X                    that matches your configuration and copy it to `s_fas'.
X
X          s_fas-c12      For com1 and com2.
X
X          s_fas-c123     For com1, com2 and com3.
X
X          s_fas-ast4     For the AST 4-port card.
X
X          s_fas-ast4c12  For the AST 4-port card plus com1 and com2.
X
X          s_fas-hub6     For the Bell Tech HUB-6 card.
X
X          s_fas-digi8c1  For the DigiChannel PC/8 card plus com1.
X
X     n_fas-xxxxx    This is for ISC UNIX, ESIX, Bell Tech/Intel UNIX 3.2,
X                    SCO UNIX, AT&T UNIX 386 and SysVr4 UNIX 386.
X                    Tty device nodes file.  You should pick the one
X                    that matches your configuration and copy it to `n_fas'.
X
X          n_fas-c12      For com1 and com2.
X
X          n_fas-c123     For com1, com2 and com3.
X
X          n_fas-ast4     For the AST 4-port card.
X
X          n_fas-ast4c12  For the AST 4-port card plus com1 and com2.
X
X          n_fas-hub6     For the Bell Tech HUB-6 card.
X
X          n_fas-digi8c1  For the DigiChannel PC/8 card plus com1.
X
X     i_fas-xxxxx    This is for ISC UNIX, ESIX, Bell Tech/Intel UNIX 3.2,
X                    SCO UNIX, AT&T UNIX 386 and SysVr4 UNIX 386.
X                    Inittab getty lines file.  You should pick the one
X                    that matches your configuration and copy it to `i_fas'.
X
X          i_fas-c12      For com1 and com2.
X
X          i_fas-c123     For com1, com2 and com3.
X
X          i_fas-ast4     For the AST 4-port card.
X
X          i_fas-ast4c12  For the AST 4-port card plus com1 and com2.
X
X          i_fas-hub6     For the Bell Tech HUB-6 card.
X
X          i_fas-digi8c1  For the DigiChannel PC/8 card plus com1.
X
X     Makefile.uPort A makefile for uPort SYS V/386 systems. This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X     Makefile.ISC2  A makefile for ISC UNIX 2.x systems.  This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X     Makefile.ISC3  A makefile for ISC UNIX 3.x systems.  This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X     Makefile.ESIX  A makefile for ESIX systems.  This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X     Makefile.BELL  A makefile for Bell Tech/Intel UNIX 3.2 systems.  This
X                    is generic and should work for all configurations of
X                    lines and interrupts.
X
X     Makefile.SCO   A makefile for SCO UNIX systems.  This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X     Makefile.X386  A makefile for SCO Xenix 386 systems.  This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X     Makefile.X286  A makefile for SCO Xenix 286 systems.  This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X     Makefile.ATT   A makefile for AT&T UNIX 386 systems.  This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X     Makefile.SVR4  A makefile for SysVr4 UNIX 386 systems.  This is generic
X                    and should work for all configurations of lines
X                    and interrupts.
X
X------------------------------------------------------------------------
X
XWhat you will need to use this package:
X
X     You will need one of the above mentioned UNIX systems with the
X     kernel link kit and the software development package.
X
X     Of course, you will also need one or more dumb port serial cards.
X
X     Note that FAS can be adapted to almost any kind of dumb port serial
X     card by just putting the right informations into the config
X     files. Changes to the actual source file shouldn't be necessary.
X
X     This means that the sample config files that are part of the FAS
X     distribution are there for convenience in case you have one of the
X     more common serial cards. If there are no sample files for your
X     card you can make your own config files. In this case the sample
X     files at still useful for you as you can look at them to learn
X     how things are done for other cards.
X
X     If you know how your serial card works and the manual for it is
X     detailed enough it won't be that difficult to make your own config
X     files. Just try it!
X
X------------------------------------------------------------------------
X
XThe original asy replacement driver for Microport UNIX/386 (FAS' predecessor)
Xwas developed by
X
XJim Murray              INET            jjm%jjmhome@m2c.m2c.org
X2 Mohawk Circle         UUCP            harvard!m2c!jjmhome!jjm
XWestboro Mass 01581     
XUSA                                     voice (508) 366-2813
X
XCredits to him for releasing this great driver to the Usenet community.
XBut if you have problems with FAS please don't contact him because he
Xwasn't involved in the developement of FAS.
X
XFAS was developed by
X
XUwe Doering             INET : gemini@geminix.in-berlin.de
XBillstedter Pfad 17 b   UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
X1000 Berlin 20
XGermany
X
X    ^    ^    ^    ^    ^    ^    ^    ^    ^    ^
XSend your questions and bug reports to this address.
SHAR_EOF
echo 'File README is complete' &&
true || echo 'restore of README failed'
rm -f _shar_wnt_.tmp
fi
# ============= RELEASENOTES ==============
if test -f 'RELEASENOTES' -a X"$1" != X"-c"; then
	echo 'x - skipping RELEASENOTES (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting RELEASENOTES (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'RELEASENOTES' &&
X     release 1.1a Sat Nov 11, 1989
X
X     This is an unofficial release as I'm not the original author
X     of this async driver.
X
X     Uwe Doering             INET : gemini@geminix.in-berlin.de
X     Billstedter Pfad 17 b   UUCP : ...!unido!fub!geminix.in-berlin.de!gemini
X     1000 Berlin 20
X     Germany
X
X     New Features:
X
X          Added a third minor tty device number for every physical
X          port. See description preceding the asyopen function in
X          asy.c. Changed the behavior of ttyxx, too.
X
X          Added output hardware handshake support for DSR. Now you
X          can do handshake with CTS, DSR or both. Input hardware
X          handshake is on if you use at least one of the output
X          handshake signals.
X
X          More flexible support of additional interrupt registers
X          on mux boards. This is fully configurable now.
X
X          Added support for the CREAD flag. If not set, receiver
X          interrupts are still serviced, but the received characters
X          are simply thrown away. This is not as elegant as disabeling
X          the interrupts themselves, but with the already existing
X          driver it was the easiest way, and the most new-bugs-preventing,
X          too.
X
X          Added a lot of comments to the source so that the curious
X          user can understand why and how things are done.
X
X
X     Bug Fixes:
X
X          The hang-up-on-last-close flag (HUPCL) was ignored. DTR
X          was asserted regardless of this flag.
X
X          Made the detection of CTS and DCD more bullet-proof.
X          Especially because between a close and the next open of
X          a line, where interrupts are ignored, the software copys of
X          CTS and DCD must be set up propperly in the asyopen function
X          or the tty line would be blocked under certain circum-
X          stances. For similar reasons, there is also a setup in the
X          asyparam function.
X
X          Rewrote the input character processing function to work
X          according to the TERMIO(7) man page.
X
X          Changed the behavior of BREAK generation to let the
X          transmitter drain before TX is set to low.
X
X          Changed line hangup procedure so that the closing
X          process returns immediately and doesn't sleep during
X          the hangup delay/time. Instead, if an other process tries
X          to open the line while hangup is still in progress, this
X          process will sleep until hangup is competed.
X
X          With DOS Merge, on MicroPort V/386 3.0e the linker was
X          missing the function `init8250'. Reengineered this from
X          a disassembler listing of MicroPort's original driver and
X          modified it to work with the NS16550A 16-byte FIFO. This
X          funktion was added simply to be able to link the kernel.
X          DOS Merge's virtual COM ports are still unusable with this
X          release, though. To include this function, add a `-DMERGE'
X          to the CFLAGS line in your makefile.
X
X          Made a lot of other corrections and enhancements in both
X          speed and functionallity. As a result of all my effords
X          I think this driver is slightly faster, more versatile
X          and much more stable than the original release.
X
X     ------------------------------------------------------------
X          
X     release 1.1b Sat Nov 25, 1989
X
X     New Features:
X
X          Changed the minor device number scheme again.
X          There are now two main groups: The unblocked open
X          and the blocked open. Every group has four sub-modes
X          and an additional hardware handshake flag. All this
X          is coded in the higher four bits of the minor device
X          number. Because of this, the maximum of 32 ports was
X          reduced to 16 ports so that the port number fits into
X          the remaining lower four bits of the minor device number.
X          32 dumb ports in a single machine would have been overkill
X          anyway. For more details refer to the description in the
X          README file.
X
X     ------------------------------------------------------------
X          
X     release 2.00 Mon Nov 27, 1989
X
X     As this release differs so much from the original version I got,
X     I now declare this as independant from the original author
X     Jim Murray. This allows me to introduce new release levels
X     without wondering whether they will collide with Jim's releases.
X     Of course many credits to Jim for writing this software in the
X     first place. Without his driver as a base I never would have
X     been able to do such kernel driver development.
X
X     Bug Fixes:
X
X          If there were glitches on the hardware handshake lines
X          and the DCD line a getty on this port would sometimes
X          hang and become an immortal process. I think this was
X          because the output buffer wasn't flushed properly
X          on carrier loss. I hope I fixed this now. We'll see.
X
X     ------------------------------------------------------------
X          
X     release 2.01 Tue Nov 28, 1989
X
X     Did some cleanup in the source code.
X
X     I splitted the driver into two parts: The driver itself and
X     the file `space.c'.
X     `space.c' contains all data structures necessary to configure
X     the driver and is compiled at kernel link time. Therefore, if you
X     change your serial card configuration you simply change `space.c'
X     directly in the link kit directory and relink the kernel. No
X     driver recompilation or installation is necessary for this.
X     But note that whenever you use `make install' your setup in
X     the link kit directory is overwritten by the original `space.c'
X     file. Therefore, you should copy your new `space.c' back to
X     the source directory when you are finished with the configuration.
X
X     Renamed the package to `FAS Final Async Solution'. The following
X     files have been renamed:
X          asy.c          -> fas.c
X          asy.h          -> fas.h
X          asy_conf-xxxxx -> space-xxxxx
X
X     ISC 386/ix is supported now. There are separate makefiles
X     for uPort and ISC to cope with the differences in link kit
X     installation.
X
X     Bug Fixes:
X
X          `getty' still hung sometimes on a line with hardware
X          handshake. Tried to fix it this time.
X
X     ------------------------------------------------------------
X          
X     release 2.02 Thu Nov 30, 1989
X
X     Abandoned the distinction between space-xxxxx files with
X     and without hardware flow control because this is selected
X     by the minor device number now.
X
X     Bug Fixes:
X
X          Set the high and low water marks for hardware input flow
X          control to higher values than software flow control. This
X          gives precedence to software flow control if both methods
X          are used. These marks are self-adjusting and don't need to
X          be changed if some flavor of UNIX has a different buffer
X          size than the standard 256 characters. Before this change
X          concurrent use of both flow controls could cause trouble
X          with some high-speed modems. This is fixed now.
X
X          A flush read or write buffer request now also clears the
X          receiver or transmitter FIFO, respectively. An ioctl
X          call with a TCSETA* command clears the FIFOs, too.
X
X     ------------------------------------------------------------
X          
X     release 2.03 Fri Dec 01, 1989
X
X     Wrote an installation guide. The driver should be quite
X     easy to install now.
X
X     Added tty node configuration files for ISC.
X
X     Hardware input flow control is bound now to the level of the
X     receiver ring buffer instead of the UNIX input buffer. This
X     has the advantage that buffer size and trigger levels are
X     defined in the driver and therefore can be varied as needed.
X
X     New Features:
X
X          Added a boot time status message that shows the init
X          state of each port. This tells you immediately what
X          ports are found and initted by the driver. Useful to
X          determine hardware configuration problems. Look at
X          the description in the README file. Thanks to
X          Kritt Gierlewsen (kritt@einoed.UUCP) for this proposal.
X
X     ------------------------------------------------------------
X          
X     release 2.04 Thu Dec 07, 1989
X
X     Did some cleanup in the source.
X
X     Removed the FIFO clear from the ioctl function. We don't want
X     to do things there that aren't in the book.
X
X     An ioctl call that switches off the CLOCAL flag will create
X     a SIGHUP signal if the carrier is actually missing at this
X     time.
X
X     Every device is tested now quite thoroughly during initialization.
X     If the test fails the corresponding device keeps unconfigured.
X
X     ------------------------------------------------------------
X          
X     release 2.05 Sat Jan 13, 1990
X
X     This is the first public release of the FAS driver.
X
X     Special thanks to the sysops of my test sites, Axel Fischer
X     (fischer@utower.UUCP) and Kritt Gierlewsen (kritt@einoed.UUCP).
X
X     FAS is now an independant driver with its own driver name (`fas'),
X     major device number, link kit directory and other things necessary
X     for a driver. The original asy driver may or may not be linked
X     with the kernel. You only need it if you want to access some
X     serial devices via the virtual COM ports of the DOS emulator
X     (DosMerge or VP/ix) because the FAS driver doesn't have this
X     (really vendor dependant) feature.
X
X     The default prefix for tty device node names is `ttyF' now.
X     This prevents mix-ups with the device names of the original
X     asy driver.
X
X     Dropped the SYSV/AT support. I couldn't test the driver
X     for several release generations on uPort SYSV/AT, and because
X     there are not very much systems left with that flavor of UNIX
X     it doesn't make sense to try to maintain compatibility with it.
X     If someone really wants to use this driver on a 286 he has
X     to port it himself.
X
X     Improved the transmitter FIFO fill procedure. Now it will try
X     harder to fill the FIFO as much as possible to cut down on
X     transmitter interrupts.
X
X     Software input flow control (XON/XOFF) is controlled by the driver now.
X     It is bound to the level of the receiver ring buffer (as is hardware
X     flow control). As usual, it can be switched on and off by the
X     IXOFF flag in the termio(7) structure.
X
X     Changed and speeded up the ring buffer -> unix buffer processing.
X
X     For ISC, the getty lines for the inittab file are installed
X     by the makefile now.
X
X     The conditional compilation of the function `init8250' (for
X     DosMerge) is now controlled by a define in `fas.h'. The compiler
X     switch `-DMERGE' is not used any more.
X
X     Improved the documentation.
X
X     The signals used for modem control and hardware flow control are
X     fully configurable in the `space.c' file now. Look at `fas.h' for
X     possible macros and combinations.
X
X     There are some new modes for hardware flow control, for instance
X     HO_CTS_ON_DSR. This means that CTS is only looked at if DSR is on.
X     If DSR is off output is possible regardless of CTS. The underlying
X     assumption here is that we can expect proper handshake handling
X     only from devices that are in the ready state (indicated by DSR).
X     As a spin-off the problem with the hanging getty on lines with
X     turned-off terminals (mentioned in earlier releases) should be
X     gone if you use this new mode.
X
X     If the XCLUDE-Flag is availabe (SYSV 3.2 because of Xenix
X     compatibility) exclusive open of a device is possible.
X
X     The default size of the input ring buffer is now 5000 bytes.
X     This makes streaming input more likely even on loaded systems.
X
X     Bug Fixes:
X
X          The task state busy flag wasn't reset in some rare cases.
X          This could cause processes to become immortal while waiting
X          for the busy flag.
X
X          Under some special conditions an ioctl call with a TCSETA?
X          command could corrupt the last character in the transmitter
X          shift register. This is fixed now.
X
X          More fixing of the busy flag handling was necessary.
X          Co-ordinating several delayed tasks controlling this flag
X          is kind of tricky.
X
X          After a TCSETA* ioctl command we disable the transmitter
X          for 2 sec (measured from the last transmitted character)
X          if the character format and/or speed has changed. This
X          gives the receiving side some time to do the same changes.
X          This is kind of experimental. There may be applications that
X          suffer from this delay. You may change the #define ADAPT_TIME
X          in `fas.h' to a smaller value.
X
X     ------------------------------------------------------------
X          
X     release 2.06 Fri Mar 16, 1990
X
X     This should have been patch #3 for release 2.05, but there are
X     so many changes now that I decided to make it a new release.
X     Therefore, some of the changes are described in the 2.05 release
X     notes above but were never released to the public.
X
X     New Features:
X
X          There is a transmitter ring buffer now to make the output
X          less system load dependent. This really speeds things up
X          because the transmitter FIFO gets filled with more characters
X          at once. The buffer size depends on the actual baud rate to
X          prevent long output buffer drains at low speeds.
X
X          There are also bigger input buffers to make FAS more competitive
X          against "intelligent" cards.
X
X          Lots of speed improvements and many small changes.
X
X     Bug Fixes:
X
X          Fixed input/output buffer flush on carrier loss while close
X          is waiting for the output to drain.
X
X     ------------------------------------------------------------
X          
X     release 2.07 Tue Sep 18, 1990
X
X     This is a major redesign of the previous release. I put most of the
X     time consuming tasks in one function that is invoked asynchronously
X     by timeout calls. Inside this function most of the code runs at
X     a lower system priority level (spl5) than the interrupts. That
X     means that during character processing tty interrupts are allowed.
X     This is the main key to operation at 38400 bps on multiple ports
X     at the same time which is possible now with this release.
X
X     New Features:
X
X          FAS supports the VP/ix DOS emulator!
X          Now you can throw out the vendor's original driver even
X          if you like to have a serial mouse or modem access in DOS.
X          Read the paragraph about VP/ix in the README file.
X
X          The Intel i82510 port chip is supported. It has separate
X          4-character FIFOs for input and output. Although the
X          NS16550A is much better this chip is your second choice
X          if you can't get your hands on the National chips.
X          Thanks to Christian Seyb (cs@gold.UUCP) for sending me
X          patches and the necessary documentation for the Intel
X          chips.
X
X          There is an init sequence in `space.c'. You can put any
X          number of address-data pairs in a null terminated array
X          to program your serial card or other hardware before
X          FAS makes the first access to the ports. AST 4-port cards,
X          for instance, have an additional port that needs to be
X          written to with a certain bit pattern to allow shared
X          interrupts. If you need to read a port to achieve the
X          setting or resetting of flags as a side effect, this
X          is possible, too.
X
X          ESIX is officially supported now.
X
X          SCO UNIX is officially supported, too. FAS needs to be
X          compiled with the command line flag `-DSCO'. The makefile
X          for SCO takes care of that. Thanks to Walter Mecky
X          (walter@mecky.systemware.de) and Frank Simon
X          (terra@sol.north.de) for helping me in making the necessary
X          changes for SCO UNIX.
X
X          SCO Xenix 386 is also officially supported. FAS needs to be
X          compiled with the command line flag `-DXENIX'. The makefile
X          for SCO Xenix takes care of that. Thanks to Andreas
X          Steinmetzler (andreas@oil.UUCP) for doing the port.
X
X          If you have the RTSFLOW and CTSFLOW termio(7) flags,
X          hardware handshake can be controlled by them.
X          Note that enabling handware flow control via the
X          minor device number overrides these flags. If you
X          like to use them you need to create tty device nodes
X          with minor device numbers in which the bit for hardware
X          handshake is set to 0. Look at the description in the
X          README file for more details.
X          Note also that if you choose to use RTSFLOW and CTSFLOW
X          all your programs that do initial access to tty devices
X          (getty, uucico, cu, SLIP dialup program etc.) need to know
X          about these flags or hardware handshake will not be used.
X
X          The `O_EXCL' flag for the open(2) call is honored now.
X          This allowes exclusive access to an FAS device without
X          suffering from race conditions which could occure with
X          the termio(7) XCLUDE flag method.
X
X          The `fas_test_device' function returns a digit now that
X          indicates at which phase the test exited due to an error.
X          This error digit is displayed in the boot message. Thanks
X          to Brian Beattie (beattie@visenix.UUCP) for sending me
X          the necessary patches.
X
X     Bug Fixes:
X
X          Automatic input FIFO flush after unblocking the getty
X          open by the carrier or the unblock signal. This makes sure
X          that there is no chance that there are characters in the
X          FIFO that were received before the open got unblocked.
X
X          The sdevice entry for the AST 4-port card had a wrong
X          I/O address range (`s_fas-mux4'). This didn't affect FAS
X          but is checked by the kernel config program.
X
X          The gcc (GNU cc) support was removed because gcc's object
X          file wants to link in some "helpful" functions that aren't
X          contained in the kernel. But anyway, FAS is tuned so carefully
X          and depends on the optimization behaviour of the AT&T
X          standard C compiler that gcc won't have any advantages.
X
X          I changed the method with which the `fas_test_device' function
X          waits for certain events. The `delay' function was used
X          for that purpose but it turned out that with some flavors
X          of UNIX it is prohibited to use this function during the
X          xxinit phase of the boot process. Now a simple timeout loop
X          is used instead.
X
X          Removed the ADAPT_TIME mechanismn introduced in release 2.05.
X
X          The open() call now returns an `EBUSY' error number if the
X          device is already open and can't be opened in the desired
X          mode at this time.
X
X          The handling of the RING signal needed fixing. Unlike the other
X          three modem status lines RING generates an interrupt only at
X          the trailing edge.
X
X          No SIGHUP signal is sent any more if an ioctl call clears
X          the CLOCAL termio(7) flag while there is no carrier present.
X          SIGHUP is only sent if the actual DCD modem line drops.
X
X          The files *-mux4 were renamed to *-ast4 because this type of
X          card was originally developed by AST (AST 4-port card).
X
X     ------------------------------------------------------------
X          
X     release 2.08 Sun Feb 03, 1991
X
X     New Features:
X
X          Bell Tech/Intel UNIX 3.2 is supported.
X
X          SCO Xenix 286 is also supported now. Thanks to Nickolay Saukh
X          (nms@saukh.rd.jvd.su) for providing the patches.
X
X          The Bell Tech HUB-6 card can be used with FAS. Thanks to
X          Keith Walker (kew@cims2.UUCP) for the patches.
X
X          For AT&T derived flavors of UNIX there is a line automatically
X          added to the kernel description file that makes the adding
X          and removing of FAS possible via the `kconfig' program. Thanks
X          to John Adams (johna@grumpy.boston.ma.us) for this idea.
X
X          There is a mechanismn now that prevents excessive modem status
X          interrupts caused by crosstalking between wires or by a loose
X          cable.
X
X          You can disable the FIFOs in a UART by "oring" the macro
X          `NO_FIFO' to the base port address of this device. This is
X          useful for mouse devices where you need immediate response
X          to the mouse movement.
X
X          The meaning of the bit mapped part of the minor device
X          numbers has changed. Some rather useless functions were
X          removed in favor of more control over the hardware handshake
X          modes. Even systems where the SCO RTSFLOW/CTSFLOW termio(7)
X          flags are not available can now use half duplex hardware
X          flow control (selected via the minor device number).
X
X          The assignment of RS232C lines to certain FAS functions
X          is even more flexible now. This allows to connect two
X          UNIX systems (with FAS) via a null modem cable, running
X          a getty at both ends. For more details, read the paragraph
X          about CABLING in the README file.
X
X          A special handling of the NS16550A input FIFO was introduced.
X          This causes multiple receiver interrupts (on the same IRQ
X          line) to be synchronized so that only one interrupt is
X          necessary to process all receiving ports. This reduces the
X          interrupt handling overhead and therefore results in lower
X          CPU load for concurrent serial input at high speeds.
X
X          The `fas_event' function processes all scheduled events
X          for all units with one single call. Previously, every unit
X          launched its own timeout() call if there was work to
X          do. This could lead to up to 16 timeouts at the same time,
X          resulting in some timeout handling overhead. This overhead
X          is minimized now.
X
X     Bug Fixes:
X
X          There were two bugs that could cause a port to lock up,
X          resulting in an immortal process.
X
X          Almost any kernel sleep is killable now (at least with one or
X          two `kill -9'). Therefore, there should be no more immortal
X          processes. Even killing a process that is hanging in a
X          close-on-exit call is possible.
X
X          The meaning of the RTSFLOW/CTSFLOW termio(7) flags was converted
X          to what SCO had in mind (half duplex flow control). This is for
X          compatibility reasons. Full duplex RTS/CTS hardware flow control
X          is still possible via the minor device number method. Thanks to
X          Dmitry V. Volodin (dvv@hq.demos.su) for providing me with the
X          necessary knowledge.
X
X          If a process is already sleeping in a getty open it will only
X          unblock on DCD low->high. In particular, if in the meantime
X          the device was open for dialout and DCD is still present if
X          the getty open takes over again this won't unblock the getty
X          open any more.
X
X          And there were, as usual, a number of other small bug fixes.
X
X     ------------------------------------------------------------
X          
X     release 2.09 Sun Jun 23, 1991
X
X     New Features:
X
X          AT&T UNIX 3.2 Version 2.1 is supported.
X
X          Support was added for SysVr4 UNIX 386 (with the tty compatibility
X          drivers). This was mostly a problem of ANSI-fying certain parts
X          of the FAS sources. For this operating system, there is no VP/ix
X          support in FAS. This will change when FAS is converted into a
X          STREAMS driver.
X
X          Killing a process hanging on an FAS port that had output
X          flow stopped was usually done by issuing one or two `kill -9'
X          commands. However, this method could hang the whole UNIX kernel.
X          Therefore, another method to release hung processes is
X          introduced in this release.
X          If you open an FAS device with the O_TRUNC flag, the input
X          and output buffers of that device get flushed. As a side
X          effect, if you had previously tried to kill a hung process,
X          and it continued to hang on an FAS device, you simply have
X          to open that device with the O_TRUNC flag, and the hung
X          process is released. All you have to do is to type
X          echo '\c' > /dev/ttyname
X          and the device buffers are flushed.
X
X          There is a new array called fas_overrun[], which is of
X          type `uint', that contains three receiver overrun counters
X          for NS16450, i82510 and NS16550A UART chips, in that order.
X          If you have a tool that permits you to look at kernel
X          variables during runtime, you can determine yourself
X          whether the problems you may have might be caused by
X          lost input characters. With every receiver overrun, the
X          respective counter is incremented by one.
X
X     Bug Fixes:
X
X          The problem with the excessive modem status interrupts
X          is fixed. Well, kind of. It is suppressed, at least.
X          Crosstalk between the lines in a serial cable wastes
X          only a minor amount of CPU time now. Therefore, it isn't
X          necessary any more to shut down a port when this happens.
X          However, if you use an operating mode (selected by the
X          minor device number) that assigns certain functions to
X          the input pins at the RS232C connector (DCD, DSR, CTS and
X          RI), and these pins toggle because of crosstalk in the cable,
X          problems may still occure. But at least it won't panic the
X          kernel any more, nor will it consume lots of CPU time.
X
X          Additionally, in operating modes where FAS doesn't need to
X          know anything about modem status lines, the modem status
X          interrupt is actually disabled. For instance, when a minor
X          device number of 0 + port# is used. On the other hand,
X          switching the device to DOS mode always _enables_ the
X          modem status interrupts.
X
X          A problem was fixed when a port was in the canonical (cooked)
X          mode and FAS still tried to protect the CLIST input buffer
X          from overflowing. This blocked the connected terminal until
X          a break signal or a hangup. The input buffer protection
X          should, of course, only happen in raw mode.
X
X          The TIMEOUT tty state flag isn't used any more by FAS.
X          Because this flag is used by the line discipline as well,
X          its usage in FAS could cause problems.
X
X          There was a bug in the handling of one pointer in the
X          fas_test_device() function.
X
X          In fas_event(), looping for the same port several times until
X          all events are serviced could cause temporary deadlocks. We
X          now don't loop any more. If an event occures while in fas_event(),
X          but the branch responsible for processing was already passed,
X          this event has to wait until the next call of fas_event()
X          (usually one or two kernel ticks later).
X
X          The AIOCINFO ioctl() command returned the minor device number.
X          Now it returns the unit number.
X
X          SIGHUP will be sent only if the port is the controlling terminal
X          of a process group.
X
X          There was a problem with the initialization macros for the
X          fas_modem[] and fas_flow[] arrays. Under Xenix 286, some
X          of these macros expanded to a value of zero because the
X          size of type int is 16 bits, while it is 32 bits for all
X          the 386 UNIX flavors. This resulted in dropped bits with
X          some macros that use the `<<' operator.
X
X          An fasopen() call is checked immediately for permissions now,
X          even if another process is currently hanging in fasclose().
X          The fasopen() call, of course, can be completed only after
X          the other process has returned from fasclose().
X
X     ------------------------------------------------------------
X          
X     release 2.09 PL1 Sun Sep 22, 1991
X
X     New Features:
X
X          There is a new variable called fas_msi_noise. This
X          is a counter that is incremented each time the modem
X          status interrupt of a UART had to be disabled due to
X          excessive logic level transitions on one or more
X          modem status lines (DCD, DSR, CTS and RING).
X          This can be used to check whether there is any
X          crosstalking at high speeds in your serial cables
X          and should be taken as a hint that you should improve
X          your cables (shorter and/or shielded ones). Note
X          that there are also some modems or other devices
X          that cause this counter to be incremented (slowly,
X          though). In this case fixing the cabling won't
X          help.
X
X          FAS now supports a port speed of 57600 bps. By
X          default, in the array fas_port[] (`space.c') you can
X          set a flag (`HIGH_SPEED') independently for each port
X          to have 57600 bps instead of 38400 bps on the respective
X          port. Due to interrupt latency in the UNIX kernel you
X          will need a 486 mainboard even with NS16550A chips if
X          you don't want to risk losing incoming characters. For
X          terminals connected at this speed, a slower mainboard
X          will suffice, however. To make this speed work well,
X          the transmitter buffer size has been increased to 5000
X          bytes.
X
X          Another flag (`NO_TEST') can be set in fas_port[]
X          (`space.c') to disable the testing procedure for
X          the respective port. This can be used to allow
X          UART chips (i.e. internal modems) that don't pass
X          the test but seem to work anyway. Note that if you
X          do that you're completely on your own if you have
X          problems with FAS. I won't support you if you use
X          this flag because using UARTs that need this flag
X          means calling for trouble. I simply can't diagnose
X          this kind of hardware problem from the remote.
X
X          The SVR4 `CTSXON' and `RTSXOFF' hardware flow
X          control flags are supported, although I still
X          believe that FAS' minor device number based
X          method for controlling hardware handshake modes
X          is superiour to any method that is using ioctl()
X          calls for that purpose.
X
X          Made the UART testing in fas_test_device() even
X          harder. Now it should detect brain dead chips
X          more reliable.
X
X     Bug Fixes:
X
X          Modified fasopen() to handle mixed (with and w/o
X          O_NDELAY flag) invocations while there is no
X          carrier.
X
X          On dialout devices with modem control it was
X          intended that after carrier drop the first
X          TCSETA* ioctl() command would switch FAS to
X          ignore DCD for that port again (as is the
X          case after the initial fasopen() call). This
X          breaks certain shells that do a TCSETA*
X          command before they read from stdin, and therefore
X          never notice that DCD dropped. They don't get
X          the SIGHUP either because they are in another
X          process group at this time (job control !).
X          Now it is only possible to reset FAS in
X          the above manner if the CLOCAL flag is set
X          with the TCSETA* command. Once FAS is
X          switched to ignore DCD, CLOCAL can be cleared
X          again.
X
X          If the carrier drops and modem control is
X          enabled (CLOCAL is off), SIGCONT is sent
X          before SIGHUP (only where available) to
X          wake up stopped processes so that they will
X          notice the hangup signal.
X
X          Several other bug fixes, cleanups and improvements.
X
X     ------------------------------------------------------------
X          
X     release 2.10 PL0 Mon Aug 17, 1992
X
X     New Features:
X
X          There are no interrupt vectors to be entered in `space.c'.
X          The only place where int vectors are contained in this
X          release is the `s_fas' file. The reason for this is that
X          the interrupt function in FAS now scans all _active_ ports
X          no matter what int vector they are assigned to. This is
X          necessary in order to sort the ports by their speed. Scanning
X          the fastest port(s) first makes receiver character loss less
X          likely, especially at speeds > 19200 bps. Although this method
X          has a slight CPU time overhead for only one running port the
X          real advantage is that when more than one port is running,
X          and especially when these ports are receiving NS16550A UARTs
X          where the interrupt frequency optimization is used, the
X          CPU time requirements for each additional running port are
X          substantially lower than with previous FAS releases.
X
X          Where available, the Makefile puts the kernel defines from
X          `/etc/conf/cf.d/defines' into the compiler command line.
X
X          There are now different Makefiles for ISC UNIX 2.x and 3.x.
X          This has to do with a change in the ISC kernel config kit.
X
X          Under SVR4 the copy of `fas.h' that goes to `/usr/include/sys'
X          now gets the time stamp of the copy operation so that the
X          dependency in the Makefile works.
X
X          Either 57600 or 115200 bps can be used instead of 38400 bps.
X          For 115200 a very fast mother board and a UNIX with a low
X          interrupt latency is necessary to prevent input character loss.
X
X          There is a flag `LOW_INT_LAT' that can be defined in the
X          makefile if the UNIX kernel has a low tty interrupt latency.
X          This saves a lot of CPU time at high speeds because the
X          receiver FIFO trigger level is set to 8 instead of 4 (default),
X          and therefore the receiver interrupt frequency is cut in half.
X
X          The flags that can be "or"ed into the base port address of
X          a UART to change its default behaviour are now documented
X          in the README file.
X
X          Template files for the DigiChannel PC/8 card were added.
X
X          Support for gcc has been added. If NO_ASM is _not_ defined
X          inline code for the inb() and outb() functions is generated
X          with the help of the __asm__ feature. However, when __asm__
X          is used together with the `volatile' storage class gcc
X          produces rather poor code. I assume that in this case gcc
X          can't do some optimizations because they would break the
X          inline assembler code. And the code gets even worse if
X          -fstrength-reduce is used (with or without inline assembler
X          code). Apparently gcc is over-optimizing the code so that
X          it is in fact slower than without -fstrength-reduce. So
X          don't use this flag. All tests where done with gcc 1.40.
X
X          There is an interrupt acknowledge sequence in `space.c' now
X          that is similar to the init sequence but is executed by the
X          fasintr() function after all pending interrupts on all serial
X          cards have been processed. This is a replacement for the
X          fas_int_ack_port and fas_int_ack arrays that are gone because
X          we don't use interrupt vectors any more inside FAS.
X
X          The receiver and modem status interrupts are disabled now
X          whenever they aren't needed. If they are disabled this
X          saves some CPU time in the interrupt function.
X
X          A new termio(7) flag CRTSFL under SCO UNIX 3.2.4 enables full
X          duplex hardware flow control, but only if neither CTSFLOW nor
X          RTSFLOW are set. See the termio(7) man page. However, remember
X          that when you use a minor device number controlled hardware
X          handshake mode (the prefered method with FAS, even under SCO
X          UNIX and Xenix) the flags CTSFLOW, RTSFLOW and CRTSFL are
X          ignored!
X
X          For each port, it can be selected whether the SCO UNIX/Xenix
X          CTSFLOW/RTSFLOW termio(7) flags enable half duplex hardware
X          flow control (default, compatible with the sio driver), or if
X          they enable full duplex hardware flow control (compatible with
X          many "intelligent" serial cards from third party vendors).
X
X          The RTS_TOG ioctl() command is supported (if available).
X
X          The sources for this release, and also the object file, are
X          somewhat bigger than the previous release. Besides other
X          things this is caused by the inlining of some functions.
X          These functions were called rather frequently and were
X          small enough for inlining. This saves some function call
X          overhead.
X
X          There are lots of changes that yield a better use of
X          register variables, especially in loops.
X
X     Bug Fixes:
X
X          The method to flush the output buffers of a port while a
X          process is hanging in fasclose() has been changed. In
X          FAS 2.09 the buffers were flushed when the port was opened
X          with the O_TRUNC flag. This caused some problems with shell
X          scripts that wanted to write text with
X
X               echo 'foo bar' > /dev/tty
X
X          I changed FAS to use O_APPEND instead. So in order to flush
X          the output buffers in this release one has to use
X
X               echo '\c' >> /dev/ttyF00
X
X          if the port `ttyF00' is hanging.
X
X          The kernel `ttyhog' variable is used instead of the default
X          TTYHOG value from `tty.h'. So FAS notices if this variable is
X          tuned by the SysAdmin.
X
X          The array `fas_info' has been renamed to `fas_internals'
X          to prevent a name space collision under SVR4.
X
X          `fas_overrun' and `fas_msi_noise' where declared `static'.
X          Under some UNIX flavours a static kernel variable isn't
X          found by programs that are used to look at variables in
X          the running kernel. This is fixed now.
X
X          The method how to handle concurrent fasopen() calls with
X          and without O_NDELAY on a device that waits for a carrier
X          has been changed back to what FAS 2.09.0 did. If there
X          already is a process waiting for carrier and another process
X          opens the device with O_NDELAY the waiting process is waked
X          up and completes its fasopen() call regardless of the state
X          of the carrier. This is because due to the AT&T kernel design
X          we can't have both a sleeping and a working process on the
X          same device. Patch #1 for FAS 2.09 introduced a bug which
X          caused hung gettys. This error is fixed by going back to
X          the method used in FAS 2.09.0.
X
X          The problem that caused occasional crashes under SCO UNIX
X          appears to be fixed. I don't know for sure why this is so.
X          We'll see.
X
X          When a process is waiting inside fasclose() for the
X          output buffers to drain and the process receives a
X          signal that is not ignored the output buffer is
X          automatically flushed in order to allow fasclose()
X          to complete before the signal handler is entered.
X          This has to happen because the open file counter is
X          decremented _before_ fasclose() is called. So after
X          the signal handler has done its work fasclose() wouldn't
X          be entered again because the open file counter is already
X          zero at this time. That means that whatever happens fasclose()
X          must have done its cleanup for the port before it returns.
X
X          Under SVR4 longjmp() wants a pointer as its parameter.
X
X          The half and full duplex hardware handshake has been
X          redesigned to be more bullet proof when it comes to
X          switching from one mode to the other.
X
X          The Logitech mouse problem has been solved. There is
X          a bug in the generic ttiocom() support function that
X          FAS needs to circumvent with some additional code.
X
X          The incrementation of the counters in the sysinfo
X          structure is fixed in that it happens only once for
X          each interrupt and not once for every port that has
X          work to do. This better reflects the actual interrupt
X          load.
X
X          Because a carrier drop is processed asynchronously in
X          fas_event() it is necessary to at least stop the
X          character output as soon as the modem status interrupt
X          is detected. Now only up to 16 characters (one FIFO
X          load with NS16550A) will be transmitted after carrier
X          drop. This is in line with the latency of the hardware
X          output handshake.
X
X          And of course lots of other optimizations and small
X          fixes.
SHAR_EOF
true || echo 'restore of RELEASENOTES failed'
rm -f _shar_wnt_.tmp
fi
# ============= config-ast4 ==============
if test -f 'config-ast4' -a X"$1" != X"-c"; then
	echo 'x - skipping config-ast4 (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting config-ast4 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'config-ast4' &&
X* its character device number 4
Xcharacter(4)
X
X* its name
Xprefix = fas
X
X* The interrupt vectors handled by this controller
Xintvec = 4
X
X* its mask level
Xintpri = SPLTTY
X
X* the functions it supports
Xfunctions = init, open, close, read, write, ioctl, tty
SHAR_EOF
true || echo 'restore of config-ast4 failed'
rm -f _shar_wnt_.tmp
fi
# ============= config-ast4c12 ==============
if test -f 'config-ast4c12' -a X"$1" != X"-c"; then
	echo 'x - skipping config-ast4c12 (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting config-ast4c12 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'config-ast4c12' &&
X* its character device number 4
SHAR_EOF
true || echo 'restore of config-ast4c12 failed'
fi
echo 'End of fas210 part 2'
echo 'File config-ast4c12 is continued in part 3'
echo 3 > _shar_seq_.tmp
exit 0
-- 
Uwe Doering  |  INET : gemini@geminix.in-berlin.de
Berlin       |----------------------------------------------------------------
Germany      |  UUCP : ...!unido!fub!geminix.in-berlin.de!gemini