NOTE: This is an unmaintained driver.  It is not guaranteed to work due to
changes made in the tty layer in 2.6.  If you wish to take over maintenance of
this driver, contact Michael Warfield <mhw@wittsend.com>.

Changelog:
----------
11-01-2001:	Original Document

10-29-2004:	Minor misspelling & format fix, update status of driver.
		James Nelson <james4765@gmail.com>

Computone Intelliport II/Plus Multiport Serial Driver
-----------------------------------------------------

Release Notes For Linux Kernel 2.2 and higher.
These notes are for the drivers which have already been integrated into the
kernel and have been tested on Linux kernels 2.0, 2.2, 2.3, and 2.4.

Version: 1.2.14
Date: 11/01/2001
Historical Author: Andrew Manison <amanison@america.net>
Primary Author: Doug McNash

This file assumes that you are using the Computone drivers which are
integrated into the kernel sources.  For updating the drivers or installing
drivers into kernels which do not already have Computone drivers, please
refer to the instructions in the README.computone file in the driver patch.


1. INTRODUCTION

This driver supports the entire family of Intelliport II/Plus controllers
with the exception of the MicroChannel controllers.  It does not support
products previous to the Intelliport II.

This driver was developed on the v2.0.x Linux tree and has been tested up
to v2.4.14; it will probably not work with earlier v1.X kernels,.


2. QUICK INSTALLATION

Hardware - If you have an ISA card, find a free interrupt and io port. 
		   List those in use with `cat /proc/interrupts` and 
		   `cat /proc/ioports`.  Set the card dip switches to a free 
		   address.  You may need to configure your BIOS to reserve an
		   irq for an ISA card.  PCI and EISA parameters are set
		   automagically.  Insert card into computer with the power off 
		   before or after drivers installation.

	Note the hardware address from the Computone ISA cards installed into
		the system.  These are required for editing ip2.c or editing
		/etc/modprobe.d/*.conf, or for specification on the modprobe
		command line.

	Note that the /etc/modules.conf should be used for older (pre-2.6)
		kernels.

Software -

Module installation:

a) Determine free irq/address to use if any (configure BIOS if need be)
b) Run "make config" or "make menuconfig" or "make xconfig"
   Select (m) module for CONFIG_COMPUTONE under character
   devices.  CONFIG_PCI and CONFIG_MODULES also may need to be set.
c) Set address on ISA cards then:
   edit /usr/src/linux/drivers/char/ip2.c if needed 
	or
   edit config file in  /etc/modprobe.d/ if needed (module).
	or both to match this setting.
d) Run "make modules"
e) Run "make modules_install"
f) Run "/sbin/depmod -a"
g) install driver using `modprobe ip2 <options>` (options listed below)
h) run ip2mkdev (either the script below or the binary version)


Kernel installation:

a) Determine free irq/address to use if any (configure BIOS if need be)
b) Run "make config" or "make menuconfig" or "make xconfig"
   Select (y) kernel for CONFIG_COMPUTONE under character
   devices.  CONFIG_PCI may need to be set if you have PCI bus.
c) Set address on ISA cards then:
	   edit /usr/src/linux/drivers/char/ip2.c  
           (Optional - may be specified on kernel command line now)
d) Run "make zImage" or whatever target you prefer.
e) mv /usr/src/linux/arch/x86/boot/zImage to /boot.
f) Add new config for this kernel into /etc/lilo.conf, run "lilo"
	or copy to a floppy disk and boot from that floppy disk.
g) Reboot using this kernel
h) run ip2mkdev (either the script below or the binary version)

Kernel command line options:

When compiling the driver into the kernel, io and irq may be
compiled into the driver by editing ip2.c and setting the values for
io and irq in the appropriate array.  An alternative is to specify
a command line parameter to the kernel at boot up.

        ip2=io0,irq0,io1,irq1,io2,irq2,io3,irq3

Note that this order is very different from the specifications for the
modload parameters which have separate IRQ and IO specifiers.

The io port also selects PCI (1) and EISA (2) boards.

        io=0    No board
        io=1    PCI board
        io=2    EISA board
        else    ISA board io address

You only need to specify the boards which are present.

        Examples:

                2 PCI boards:

                        ip2=1,0,1,0

                1 ISA board at 0x310 irq 5:

                        ip2=0x310,5

This can be added to and "append" option in lilo.conf similar to this:

        append="ip2=1,0,1,0"


3. INSTALLATION

Previously, the driver sources were packaged with a set of patch files
to update the character drivers' makefile and configuration file, and other 
kernel source files. A build script (ip2build) was included which applies 
the patches if needed, and build any utilities needed.
What you receive may be a single patch file in conventional kernel
patch format build script. That form can also be applied by
running patch -p1 < ThePatchFile.  Otherwise run ip2build.
 
The driver can be installed as a module (recommended) or built into the 
kernel. This is selected as for other drivers through the `make config`
command from the root of the Linux source tree. If the driver is built 
into the kernel you will need to edit the file ip2.c to match the boards 
you are installing. See that file for instructions. If the driver is 
installed as a module the configuration can also be specified on the
modprobe command line as follows:

	modprobe ip2 irq=irq1,irq2,irq3,irq4 io=addr1,addr2,addr3,addr4

where irqnum is one of the valid Intelliport II interrupts (3,4,5,7,10,11,
12,15) and addr1-4 are the base addresses for up to four controllers. If 
the irqs are not specified the driver uses the default in ip2.c (which 
selects polled mode). If no base addresses are specified the defaults in 
ip2.c are used. If you are autoloading the driver module with kerneld or
kmod the base addresses and interrupt number must also be set in ip2.c
and recompile or just insert and options line in /etc/modprobe.d/*.conf or both.
The options line is equivalent to the command line and takes precedence over
what is in ip2.c. 

config sample to put /etc/modprobe.d/*.conf:
	options ip2 io=1,0x328 irq=1,10
	alias char-major-71 ip2
	alias char-major-72 ip2
	alias char-major-73 ip2

The equivalent in ip2.c:

static int io[IP2_MAX_BOARDS]= { 1, 0x328, 0, 0 };
static int irq[IP2_MAX_BOARDS] = { 1, 10, -1, -1 }; 

The equivalent for the kernel command line (in lilo.conf):

        append="ip2=1,1,0x328,10"


Note:	Both io and irq should be updated to reflect YOUR system.  An "io"
	address of 1 or 2 indicates a PCI or EISA card in the board table.
	The PCI or EISA irq will be assigned automatically.

Specifying an invalid or in-use irq will default the driver into
running in polled mode for that card.  If all irq entries are 0 then
all cards will operate in polled mode.

If you select the driver as part of the kernel run :

	make zlilo (or whatever you do to create a bootable kernel)

If you selected a module run :

	make modules && make modules_install

The utility ip2mkdev (see 5 and 7 below) creates all the device nodes
required by the driver.  For a device to be created it must be configured
in the driver and the board must be installed. Only devices corresponding
to real IntelliPort II ports are created. With multiple boards and expansion
boxes this will leave gaps in the sequence of device names. ip2mkdev uses
Linux tty naming conventions: ttyF0 - ttyF255 for normal devices, and
cuf0 - cuf255 for callout devices.


4. USING THE DRIVERS

As noted above, the driver implements the ports in accordance with Linux
conventions, and the devices should be interchangeable with the standard
serial devices. (This is a key point for problem reporting: please make
sure that what you are trying do works on the ttySx/cuax ports first; then 
tell us what went wrong with the ip2 ports!)

Higher speeds can be obtained using the setserial utility which remaps 
38,400 bps (extb) to 57,600 bps, 115,200 bps, or a custom speed. 
Intelliport II installations using the PowerPort expansion module can
use the custom speed setting to select the highest speeds: 153,600 bps,
230,400 bps, 307,200 bps, 460,800bps and 921,600 bps. The base for
custom baud rate configuration is fixed at 921,600 for cards/expansion
modules with ST654's and 115200 for those with Cirrus CD1400's.  This
corresponds to the maximum bit rates those chips are capable.  
For example if the baud base is 921600 and the baud divisor is 18 then
the custom rate is 921600/18 = 51200 bps.  See the setserial man page for
complete details. Of course if stty accepts the higher rates now you can
use that as well as the standard ioctls().


5. ip2mkdev and assorted utilities...

Several utilities, including the source for a binary ip2mkdev utility are
available under .../drivers/char/ip2.  These can be build by changing to
that directory and typing "make" after the kernel has be built.  If you do
not wish to compile the binary utilities, the shell script below can be
cut out and run as "ip2mkdev" to create the necessary device files.  To
use the ip2mkdev script, you must have procfs enabled and the proc file
system mounted on /proc.


6. NOTES

This is a release version of the driver, but it is impossible to test it
in all configurations of Linux. If there is any anomalous behaviour that 
does not match the standard serial port's behaviour please let us know.


7. ip2mkdev shell script

Previously, this script was simply attached here.  It is now attached as a
shar archive to make it easier to extract the script from the documentation.
To create the ip2mkdev shell script change to a convenient directory (/tmp
works just fine) and run the following command:

	unshar Documentation/serial/computone.txt
		(This file)

You should now have a file ip2mkdev in your current working directory with
permissions set to execute.  Running that script with then create the
necessary devices for the Computone boards, interfaces, and ports which
are present on you system at the time it is run.


#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.2.1).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `!/bin/sh' line above, then type `sh FILE'.
#
# Made on 2001-10-29 10:32 EST by <mhw@alcove.wittsend.com>.
# Source directory was `/home2/src/tmp'.
#
# Existing files will *not* be overwritten unless `-c' is specified.
#
# This shar contains:
# length mode       name
# ------ ---------- ------------------------------------------
#   4251 -rwxr-xr-x ip2mkdev
#
save_IFS="${IFS}"
IFS="${IFS}:"
gettext_dir=FAILED
locale_dir=FAILED
first_param="$1"
for dir in $PATH
do
  if test "$gettext_dir" = FAILED && test -f $dir/gettext \
     && ($dir/gettext --version >/dev/null 2>&1)
  then
    set `$dir/gettext --version 2>&1`
    if test "$3" = GNU
    then
      gettext_dir=$dir
    fi
  fi
  if test "$locale_dir" = FAILED && test -f $dir/shar \
     && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
  then
    locale_dir=`$dir/shar --print-text-domain-dir`
  fi
done
IFS="$save_IFS"
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
then
  echo=echo
else
  TEXTDOMAINDIR=$locale_dir
  export TEXTDOMAINDIR
  TEXTDOMAIN=sharutils
  export TEXTDOMAIN
  echo="$gettext_dir/gettext -s"
fi
if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
  shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
  shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
  shar_touch='touch -am $3$4$5$6$2 "$8"'
else
  shar_touch=:
  echo
  $echo 'WARNING: not restoring timestamps.  Consider getting and'
  $echo "installing GNU \`touch', distributed in GNU File Utilities..."
  echo
fi
rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
#
if mkdir _sh17581; then
  $echo 'x -' 'creating lock directory'
else
  $echo 'failed to create lock directory'
  exit 1
fi
# ============= ip2mkdev ==============
if test -f 'ip2mkdev' && test "$first_param" != -c; then
  $echo 'x -' SKIPPING 'ip2mkdev' '(file already exists)'
else
  $echo 'x -' extracting 'ip2mkdev' '(text)'
  sed 's/^X//' << 'SHAR_EOF' > 'ip2mkdev' &&
#!/bin/sh -
#
#	ip2mkdev
#
#	Make or remove devices as needed for Computone Intelliport drivers
#
#	First rule!  If the dev file exists and you need it, don't mess
#	with it.  That prevents us from screwing up open ttys, ownership
#	and permissions on a running system!
#
#	This script will NOT remove devices that no longer exist if their
#	board or interface box has been removed.  If you want to get rid
#	of them, you can manually do an "rm -f /dev/ttyF* /dev/cuaf*"
#	before running this script.  Running this script will then recreate
#	all the valid devices.
#
#	Michael H. Warfield
#	/\/\|=mhw=|\/\/
#	mhw@wittsend.com
#
#	Updated 10/29/2000 for version 1.2.13 naming convention
#		under devfs.	/\/\|=mhw=|\/\/
#
#	Updated 03/09/2000 for devfs support in ip2 drivers. /\/\|=mhw=|\/\/
#
X
if test -d /dev/ip2 ; then
#	This is devfs mode...  We don't do anything except create symlinks
#	from the real devices to the old names!
X	cd /dev
X	echo "Creating symbolic links to devfs devices"
X	for i in `ls ip2` ; do
X		if test ! -L ip2$i ; then
X			# Remove it incase it wasn't a symlink (old device)
X			rm -f ip2$i
X			ln -s ip2/$i ip2$i
X		fi
X	done
X	for i in `( cd tts ; ls F* )` ; do
X		if test ! -L tty$i ; then
X			# Remove it incase it wasn't a symlink (old device)
X			rm -f tty$i
X			ln -s tts/$i tty$i
X		fi
X	done
X	for i in `( cd cua ; ls F* )` ; do
X		DEVNUMBER=`expr $i : 'F\(.*\)'`
X		if test ! -L cuf$DEVNUMBER ; then
X			# Remove it incase it wasn't a symlink (old device)
X			rm -f cuf$DEVNUMBER
X			ln -s cua/$i cuf$DEVNUMBER
X		fi
X	done
X	exit 0
fi
X
if test ! -f /proc/tty/drivers
then
X	echo "\
Unable to check driver status.
Make sure proc file system is mounted."
X
X	exit 255
fi
X
if test ! -f /proc/tty/driver/ip2
then
X	echo "\
Unable to locate ip2 proc file.
Attempting to load driver"
X
X	if /sbin/insmod ip2
X	then
X		if test ! -f /proc/tty/driver/ip2
X		then
X			echo "\
Unable to locate ip2 proc file after loading driver.
Driver initialization failure or driver version error.
"
X		exit 255
X		fi
X	else
X		echo "Unable to load ip2 driver."
X		exit 255
X	fi
fi
X
# Ok...  So we got the driver loaded and we can locate the procfs files.
# Next we need our major numbers.
X
TTYMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/tt/!d' -e 's/.*tt[^ 	]*[ 	]*\([0-9]*\)[ 	]*.*/\1/' < /proc/tty/drivers`
CUAMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/cu/!d' -e 's/.*cu[^ 	]*[ 	]*\([0-9]*\)[ 	]*.*/\1/' < /proc/tty/drivers`
BRDMAJOR=`sed -e '/^Driver: /!d' -e 's/.*IMajor=\([0-9]*\)[ 	]*.*/\1/' < /proc/tty/driver/ip2`
X
echo "\
TTYMAJOR = $TTYMAJOR
CUAMAJOR = $CUAMAJOR
BRDMAJOR = $BRDMAJOR
"
X
# Ok...  Now we should know our major numbers, if appropriate...
# Now we need our boards and start the device loops.
X
grep '^Board [0-9]:' /proc/tty/driver/ip2 | while read token number type alltherest
do
X	# The test for blank "type" will catch the stats lead-in lines
X	# if they exist in the file
X	if test "$type" = "vacant" -o "$type" = "Vacant" -o "$type" = ""
X	then
X		continue
X	fi
X
X	BOARDNO=`expr "$number" : '\([0-9]\):'`
X	PORTS=`expr "$alltherest" : '.*ports=\([0-9]*\)' | tr ',' ' '`
X	MINORS=`expr "$alltherest" : '.*minors=\([0-9,]*\)' | tr ',' ' '`
X
X	if test "$BOARDNO" = "" -o "$PORTS" = ""
X	then
#	This may be a bug.  We should at least get this much information
X		echo "Unable to process board line"
X		continue
X	fi
X
X	if test "$MINORS" = ""
X	then
#	Silently skip this one.  This board seems to have no boxes
X		continue
X	fi
X
X	echo "board $BOARDNO: $type ports = $PORTS; port numbers = $MINORS"
X
X	if test "$BRDMAJOR" != ""
X	then
X		BRDMINOR=`expr $BOARDNO \* 4`
X		STSMINOR=`expr $BRDMINOR + 1`
X		if test ! -c /dev/ip2ipl$BOARDNO ; then
X			mknod /dev/ip2ipl$BOARDNO c $BRDMAJOR $BRDMINOR
X		fi
X		if test ! -c /dev/ip2stat$BOARDNO ; then
X			mknod /dev/ip2stat$BOARDNO c $BRDMAJOR $STSMINOR
X		fi
X	fi
X
X	if test "$TTYMAJOR" != ""
X	then
X		PORTNO=$BOARDBASE
X
X		for PORTNO in $MINORS
X		do
X			if test ! -c /dev/ttyF$PORTNO ; then
X				# We got the hardware but no device - make it
X				mknod /dev/ttyF$PORTNO c $TTYMAJOR $PORTNO
X			fi	
X		done
X	fi
X
X	if test "$CUAMAJOR" != ""
X	then
X		PORTNO=$BOARDBASE
X
X		for PORTNO in $MINORS
X		do
X			if test ! -c /dev/cuf$PORTNO ; then
X				# We got the hardware but no device - make it
X				mknod /dev/cuf$PORTNO c $CUAMAJOR $PORTNO
X			fi	
X		done
X	fi
done
X
Xexit 0
SHAR_EOF
  (set 20 01 10 29 10 32 01 'ip2mkdev'; eval "$shar_touch") &&
  chmod 0755 'ip2mkdev' ||
  $echo 'restore of' 'ip2mkdev' 'failed'
  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
    || $echo 'ip2mkdev:' 'MD5 check failed'
cb5717134509f38bad9fde6b1f79b4a4  ip2mkdev
SHAR_EOF
  else
    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'ip2mkdev'`"
    test 4251 -eq "$shar_count" ||
    $echo 'ip2mkdev:' 'original size' '4251,' 'current size' "$shar_count!"
  fi
fi
rm -fr _sh17581
exit 0
