ftp.nice.ch/pub/next/system/driver/serial/MuxDriver.1.4.README

This is the README for MuxDriver.1.5.I.s.tar.gz [Download] [Browse] [Up]

How to install this driver:
	1) You need the Development system for NeXTSTEP for Intel. If you only
	   have a user version, I believe some of the archives *should*
	   contain a compiled version of the package as it would end up in
	   Mux.config. Contact me (mark@ve6mgs.ampr.ab.ca) to get the binaries
	   if you have limited access.
	2) Unpack into a working source subdirectory (You must have done this
	   to have extracted this README file.
	3) Wander through the Configurations Directory to get a feel for the
	   various configurations and what may need to be done. Read the
	   English.lproj/Info.rtf, and the remainder of the README file.
	   Copy the Configurations/<blah blah>/Default.table file to this
	   directory for the configuration you intend to set up.
	3a) if you do *not* have a SerialMouse (a Bus Mouse instead), then
	    you can replace the SerialPorts driver completely. The
	    Default.table file as shipped will work fine for adding single
	    ports with single interrupts and you need not read as dilegently.
	3b) if you *need* a SerialMouse, then you will need to set up an
	    instance to the SerialPorts driver to handle just the mouse. This
	    will require some careful editing of the Instance?.table files
	    for both the SerialPorts and Mux drivers. This is *not* for the
	    faint at heart, but you can build confidence by reading the
	    documentation in Configurations/SerialPort,COM2.
	3c) if you are setting this driver up to talk to a multiplexed serial
	    card, then you will also need to edit the Instance?.table files
	    because the default configuration inspector is not up to the task.
	3d) if you need to taylor the buffer sizes, edit the Instance?.table
	    files after configuration.
	4) Either through the Project builder, or from a terminal command
	   line in this directory, `make bundle' to ensure that the make
	   goes without problems (see below, not on kern/lock.h bug in the
	   development system). This step is optional, and is only to build
	   confidence.
	5) If the make went without a hitch, become root (either by re-invoking
	   Project Builder through the OpenSesame service, or by su in a
	   terminal window) and `make install'
	6) Install the Mux driver using the Configuration.app if it is possible
	   for your specific configuration. Even so, Configuration.app may
	   be used and then the brave can go on to editing the Instance?.tables
	7) Sound simple? I have a bridge I can sell you. If I spent less time
	   improving the performance and testing this driver, I would have
	   written an all seeing all dancing Configuration inspector for this
	   driver. As you see, you get what you pay for ...

	< Sales Job, Why would you want to do this to yourself? >

This serial driver is used to add additional ports starting at ttyc and
onwards. I have managed to get reliable 57600 Baud operation with this driver
under NeXTSTEP/FIP with the 16550s of either a single additional port, or
on the multiplexed 4 or 8 port DigiBoard cards. Beware, I believe the newer
DigiBoards are set up for the AST standard (then just ignore the Multiplex
register for now).

I have had reports of speeds into the 3600c/s region for this driver! I get
only 870ch/s from the SerialPorts driver, and my machine crashes if I try
using it at 19200 Baud ... I can calmly say: 500M of news flow over a three
day period, at 57600 Baud (to a 14400 Baud modem), has not crashed the machine!

You are free to use this source in any way you wish, but credit must be given
to California Regents Berkeley, Carnegie Mellon University, Olivetti (for their
original work) and Mark Salyzyn.

This driver is designed to work as a DigiBoard and AST Style multiple serial
I/O cards, single port *any* address *any* interrupt, or multiple port (no mux
register) shared interrupt (use a 470 ohm resistor in parallel with a diode to
provide the wired-or [active high] connections for the IRQ lines).

Refer to the README in the Configurations directory for more details on
setup hints for odd configurations. The Default.table that is shipped is
adequate for use with the standard two port serial system, and extensible to
a four port system simply using the configuration inspector.

Bugs:

The AST standard, a far more modern one, is not yet tested, and without
one of these cards, I am at a loss to provide testing for it. It *may* work if
you don't specify a multiplex register or specify a Mux register with a port
range of 1.

The Default Inspector does not work adequately on multiplexed boards except to
set the interrupt, it has no concept of multiple port addresses. If you use it
to set up the port, it will work adequately for a single port card added into
the system though. It is recommended to use an editor to manipulate the
/NextLibrary/Devices/Mux.config/Instance0.table (but keep in mind that you do
this at your own risk, drop me a note if you want some confidence pills ...)
yourself after the Config Application is finished and saved to add in the
additional ports on a Interrupt Multiplexed card, or to adjust other
characteristics of the driver. An address range of 1 or 2 bytes is assumed to
be the multiplex register, and must be stated last in the set of serial port
ranges (with a range of addresses of 1[AST] or 2[DigiBoard]).

The SerialMouse driver doesn't like this driver at all because of hard coded
checking done within the Configure and Loading of the driver application to
ensure that the SerialPorts driver is loaded. Since a 1200 Baud serial mouse
hardly is a problem for the original SerialPorts driver, a `cook book'
arrangement is documented to set the system up in the Configurations
subdirectories. When mixing the SerialPorts and Mux drivers, one must be very
careful about the NXString variables associated with device paths.

With the addition of the RTS side of the RTS/CTS handshaking, the driver
no longer overloads the Kernel beyond TTYHOG on streaming protocols. The RTS
handshaking is only enabled if one is using the DOUBLE_BUFFER manifest
constant. However, DOUBLE_BUFFER reduces the performance of the driver for
high speed low packet (and window) size protocols. You can control the
size of the Receive buffer by editing the Instance?.table files, but once
again, I remind you that you do this at your own risk (This driver in itself
may void any warantees and service contracts).

If anyone wishes to write an inspector that can handle multiple port cards, I
have just started on a *.nib for it in the V1.2 Mux.tproj directory (out of
date now that I have added buffering). Idealy, the Default Inspector should be
able to handle this ... Add Mux.tproj to the Makefile and the PB.project file
if you intend to work on this code.

Bugs:

Compile error:
} /NextDeveloper/Headers/bsd/sys/user.h:40: header file 'kern/lock.h' not found

This is a NeXT bug, since kern/lock.h is included in bsd/sys/callout.h,
bsd/sys/user.h and bsd/sys/ux_exception.h. The message is supposed to be
a warning since it should pull in NextDeveloper/2.0CompatibleHeaders/<blah>,
but some have complained that the warning steps up to an error message (?)

The fix, edit the above files changing kern to kernserv, or link kernserv
to kern in the /usr/include directory.

Please send ALL bug reports (and any code fragments you wish added) to
mark@ve6mgs.ampr.ab.ca (Mark Salyzyn). I am interested in any work you feel
will improve this project. As I am compelled to observe the Educational
License on my version of NeXTSTEP (at the moment), this software will probably
never be stepped up into commercial status (I prefer this status), but
third party developers are free to use it to solve their problems.

Ciao -- Mark

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.