Comtrol(tm) RocketPort(R)/RocketModem(TM) Series 
Device Driver for the Linux Operating System

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

PRODUCT OVERVIEW
----------------

This driver provides a loadable kernel driver for the Comtrol RocketPort
and RocketModem PCI boards. These boards provide, 2, 4, 8, 16, or 32 
high-speed serial ports or modems.  This driver supports up to a combination
of four RocketPort or RocketModems boards in one machine simultaneously.
This file assumes that you are using the RocketPort driver which is
integrated into the kernel sources.  

The driver can also be installed as an external module using the usual 
"make;make install" routine.  This external module driver, obtainable 
from the Comtrol website listed below, is useful for updating the driver
or installing it into kernels which do not have the driver configured
into them.  Installations instructions for the external module
are in the included README and HW_INSTALL files.

RocketPort ISA and RocketModem II PCI boards currently are only supported by
this driver in module form.

The RocketPort ISA board requires I/O ports to be configured by the DIP
switches on the board.  See the section "ISA Rocketport Boards" below for
information on how to set the DIP switches.

You pass the I/O port to the driver using the following module parameters:

board1 :	I/O port for the first ISA board
board2 :	I/O port for the second ISA board
board3 :	I/O port for the third ISA board
board4 :	I/O port for the fourth ISA board

There is a set of utilities and scripts provided with the external driver
( downloadable from http://www.comtrol.com ) that ease the configuration and
setup of the ISA cards.

The RocketModem II PCI boards require firmware to be loaded into the card
before it will function.  The driver has only been tested as a module for this
board.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

INSTALLATION PROCEDURES
-----------------------

RocketPort/RocketModem PCI cards require no driver configuration, they are 
automatically detected and configured.

The RocketPort 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 during the kernel build process. 

The RocketPort/RocketModem serial ports installed by this driver are assigned
device major number 46, and will be named /dev/ttyRx, where x is the port number 
starting at zero (ex. /dev/ttyR0, /devttyR1, ...).  If you have multiple cards
installed in the system, the mapping of port names to serial ports is displayed
in the system log at /var/log/messages.

If installed as a module, the module must be loaded.  This can be done
manually by entering "modprobe rocket".  To have the module loaded automatically
upon system boot, edit the /etc/modprobe.conf file and add the line
"alias char-major-46 rocket".

In order to use the ports, their device names (nodes) must be created with mknod.
This is only required once, the system will retain the names once created.  To 
create the RocketPort/RocketModem device names, use the command 
"mknod /dev/ttyRx c 46 x" where x is the port number starting at zero.  For example:

>mknod /dev/ttyR0 c 46 0
>mknod /dev/ttyR1 c 46 1
>mknod /dev/ttyR2 c 46 2  

The Linux script MAKEDEV will create the first 16 ttyRx device names (nodes)
for you:

>/dev/MAKEDEV ttyR

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

ISA Rocketport Boards
---------------------

You must assign and configure the I/O addresses used by the ISA Rocketport
card before installing and using it.  This is done by setting a set of DIP
switches on the Rocketport board.


SETTING THE I/O ADDRESS
-----------------------

Before installing RocketPort(R) or RocketPort RA boards, you must find
a range of I/O addresses for it to use. The first RocketPort card
requires a 68-byte contiguous block of I/O addresses, starting at one
of the following: 0x100h, 0x140h, 0x180h, 0x200h, 0x240h, 0x280h,
0x300h, 0x340h, 0x380h.  This I/O address must be reflected in the DIP
switiches of *all* of the Rocketport cards.

The second, third, and fourth RocketPort cards require a 64-byte
contiguous block of I/O addresses, starting at one of the following
I/O addresses: 0x100h, 0x140h, 0x180h, 0x1C0h, 0x200h, 0x240h, 0x280h,
0x2C0h, 0x300h, 0x340h, 0x380h, 0x3C0h.  The I/O address used by the
second, third, and fourth Rocketport cards (if present) are set via
software control.  The DIP switch settings for the I/O address must be
set to the value of the first Rocketport cards.

In order to distinguish each of the card from the others, each card
must have a unique board ID set on the dip switches.  The first
Rocketport board must be set with the DIP switches corresponding to
the first board, the second board must be set with the DIP switches
corresponding to the second board, etc.  IMPORTANT: The board ID is
the only place where the DIP switch settings should differ between the
various Rocketport boards in a system.

The I/O address range used by any of the RocketPort cards must not
conflict with any other cards in the system, including other
RocketPort cards.  Below, you will find a list of commonly used I/O
address ranges which may be in use by other devices in your system.
On a Linux system, "cat /proc/ioports" will also be helpful in
identifying what I/O addresses are being used by devices on your
system.

Remember, the FIRST RocketPort uses 68 I/O addresses.  So, if you set it
for 0x100, it will occupy 0x100 to 0x143.  This would mean that you
CAN NOT set the second, third or fourth board for address 0x140 since
the first 4 bytes of that range are used by the first board.  You would
need to set the second, third, or fourth board to one of the next available
blocks such as 0x180.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

RocketPort and RocketPort RA SW1 Settings:

          +-------------------------------+
          | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
          +-------+-------+---------------+
          | Unused| Card  | I/O Port Block|
          +-------------------------------+

DIP Switches                             DIP Switches
7    8                                   6    5
===================                      ===================
On   On   UNUSED, MUST BE ON.            On   On   First Card    <==== Default
                                         On   Off  Second Card
                                         Off  On   Third Card
                                         Off  Off  Fourth Card

DIP Switches         I/O Address Range
4    3    2    1     Used by the First Card
=====================================
On   Off  On   Off   100-143
On   Off  Off  On    140-183
On   Off  Off  Off   180-1C3       <==== Default
Off  On   On   Off   200-243
Off  On   Off  On    240-283
Off  On   Off  Off   280-2C3
Off  Off  On   Off   300-343
Off  Off  Off  On    340-383
Off  Off  Off  Off   380-3C3

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

REPORTING BUGS
--------------

For technical support, please provide the following
information: Driver version, kernel release, distribution of
kernel, and type of board you are using. Error messages and log
printouts port configuration details are especially helpful.

USA
    Phone: (612) 494-4100
      FAX: (612) 494-4199
    email: support@comtrol.com

Comtrol Europe
    Phone: +44 (0) 1 869 323-220
      FAX: +44 (0) 1 869 323-211
    email: support@comtrol.co.uk

Web:	http://www.comtrol.com
FTP:	ftp.comtrol.com

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


