linux/Documentation/serial/computone.txt
<<
>>
Prefs
   1NOTE: This is an unmaintained driver.  It is not guaranteed to work due to
   2changes made in the tty layer in 2.6.  If you wish to take over maintenance of
   3this driver, contact Michael Warfield <mhw@wittsend.com>.
   4
   5Changelog:
   6----------
   711-01-2001:     Original Document
   8
   910-29-2004:     Minor misspelling & format fix, update status of driver.
  10                James Nelson <james4765@gmail.com>
  11
  12Computone Intelliport II/Plus Multiport Serial Driver
  13-----------------------------------------------------
  14
  15Release Notes For Linux Kernel 2.2 and higher.
  16These notes are for the drivers which have already been integrated into the
  17kernel and have been tested on Linux kernels 2.0, 2.2, 2.3, and 2.4.
  18
  19Version: 1.2.14
  20Date: 11/01/2001
  21Historical Author: Andrew Manison <amanison@america.net>
  22Primary Author: Doug McNash
  23
  24This file assumes that you are using the Computone drivers which are
  25integrated into the kernel sources.  For updating the drivers or installing
  26drivers into kernels which do not already have Computone drivers, please
  27refer to the instructions in the README.computone file in the driver patch.
  28
  29
  301. INTRODUCTION
  31
  32This driver supports the entire family of Intelliport II/Plus controllers
  33with the exception of the MicroChannel controllers.  It does not support
  34products previous to the Intelliport II.
  35
  36This driver was developed on the v2.0.x Linux tree and has been tested up
  37to v2.4.14; it will probably not work with earlier v1.X kernels,.
  38
  39
  402. QUICK INSTALLATION
  41
  42Hardware - If you have an ISA card, find a free interrupt and io port. 
  43                   List those in use with `cat /proc/interrupts` and 
  44                   `cat /proc/ioports`.  Set the card dip switches to a free 
  45                   address.  You may need to configure your BIOS to reserve an
  46                   irq for an ISA card.  PCI and EISA parameters are set
  47                   automagically.  Insert card into computer with the power off 
  48                   before or after drivers installation.
  49
  50        Note the hardware address from the Computone ISA cards installed into
  51                the system.  These are required for editing ip2.c or editing
  52                /etc/modprobe.d/*.conf, or for specification on the modprobe
  53                command line.
  54
  55        Note that the /etc/modules.conf should be used for older (pre-2.6)
  56                kernels.
  57
  58Software -
  59
  60Module installation:
  61
  62a) Determine free irq/address to use if any (configure BIOS if need be)
  63b) Run "make config" or "make menuconfig" or "make xconfig"
  64   Select (m) module for CONFIG_COMPUTONE under character
  65   devices.  CONFIG_PCI and CONFIG_MODULES also may need to be set.
  66c) Set address on ISA cards then:
  67   edit /usr/src/linux/drivers/char/ip2.c if needed 
  68        or
  69   edit config file in  /etc/modprobe.d/ if needed (module).
  70        or both to match this setting.
  71d) Run "make modules"
  72e) Run "make modules_install"
  73f) Run "/sbin/depmod -a"
  74g) install driver using `modprobe ip2 <options>` (options listed below)
  75h) run ip2mkdev (either the script below or the binary version)
  76
  77
  78Kernel installation:
  79
  80a) Determine free irq/address to use if any (configure BIOS if need be)
  81b) Run "make config" or "make menuconfig" or "make xconfig"
  82   Select (y) kernel for CONFIG_COMPUTONE under character
  83   devices.  CONFIG_PCI may need to be set if you have PCI bus.
  84c) Set address on ISA cards then:
  85           edit /usr/src/linux/drivers/char/ip2.c  
  86           (Optional - may be specified on kernel command line now)
  87d) Run "make zImage" or whatever target you prefer.
  88e) mv /usr/src/linux/arch/x86/boot/zImage to /boot.
  89f) Add new config for this kernel into /etc/lilo.conf, run "lilo"
  90        or copy to a floppy disk and boot from that floppy disk.
  91g) Reboot using this kernel
  92h) run ip2mkdev (either the script below or the binary version)
  93
  94Kernel command line options:
  95
  96When compiling the driver into the kernel, io and irq may be
  97compiled into the driver by editing ip2.c and setting the values for
  98io and irq in the appropriate array.  An alternative is to specify
  99a command line parameter to the kernel at boot up.
 100
 101        ip2=io0,irq0,io1,irq1,io2,irq2,io3,irq3
 102
 103Note that this order is very different from the specifications for the
 104modload parameters which have separate IRQ and IO specifiers.
 105
 106The io port also selects PCI (1) and EISA (2) boards.
 107
 108        io=0    No board
 109        io=1    PCI board
 110        io=2    EISA board
 111        else    ISA board io address
 112
 113You only need to specify the boards which are present.
 114
 115        Examples:
 116
 117                2 PCI boards:
 118
 119                        ip2=1,0,1,0
 120
 121                1 ISA board at 0x310 irq 5:
 122
 123                        ip2=0x310,5
 124
 125This can be added to and "append" option in lilo.conf similar to this:
 126
 127        append="ip2=1,0,1,0"
 128
 129
 1303. INSTALLATION
 131
 132Previously, the driver sources were packaged with a set of patch files
 133to update the character drivers' makefile and configuration file, and other 
 134kernel source files. A build script (ip2build) was included which applies 
 135the patches if needed, and build any utilities needed.
 136What you receive may be a single patch file in conventional kernel
 137patch format build script. That form can also be applied by
 138running patch -p1 < ThePatchFile.  Otherwise run ip2build.
 139 
 140The driver can be installed as a module (recommended) or built into the 
 141kernel. This is selected as for other drivers through the `make config`
 142command from the root of the Linux source tree. If the driver is built 
 143into the kernel you will need to edit the file ip2.c to match the boards 
 144you are installing. See that file for instructions. If the driver is 
 145installed as a module the configuration can also be specified on the
 146modprobe command line as follows:
 147
 148        modprobe ip2 irq=irq1,irq2,irq3,irq4 io=addr1,addr2,addr3,addr4
 149
 150where irqnum is one of the valid Intelliport II interrupts (3,4,5,7,10,11,
 15112,15) and addr1-4 are the base addresses for up to four controllers. If 
 152the irqs are not specified the driver uses the default in ip2.c (which 
 153selects polled mode). If no base addresses are specified the defaults in 
 154ip2.c are used. If you are autoloading the driver module with kerneld or
 155kmod the base addresses and interrupt number must also be set in ip2.c
 156and recompile or just insert and options line in /etc/modprobe.d/*.conf or both.
 157The options line is equivalent to the command line and takes precedence over
 158what is in ip2.c. 
 159
 160config sample to put /etc/modprobe.d/*.conf:
 161        options ip2 io=1,0x328 irq=1,10
 162        alias char-major-71 ip2
 163        alias char-major-72 ip2
 164        alias char-major-73 ip2
 165
 166The equivalent in ip2.c:
 167
 168static int io[IP2_MAX_BOARDS]= { 1, 0x328, 0, 0 };
 169static int irq[IP2_MAX_BOARDS] = { 1, 10, -1, -1 }; 
 170
 171The equivalent for the kernel command line (in lilo.conf):
 172
 173        append="ip2=1,1,0x328,10"
 174
 175
 176Note:   Both io and irq should be updated to reflect YOUR system.  An "io"
 177        address of 1 or 2 indicates a PCI or EISA card in the board table.
 178        The PCI or EISA irq will be assigned automatically.
 179
 180Specifying an invalid or in-use irq will default the driver into
 181running in polled mode for that card.  If all irq entries are 0 then
 182all cards will operate in polled mode.
 183
 184If you select the driver as part of the kernel run :
 185
 186        make zlilo (or whatever you do to create a bootable kernel)
 187
 188If you selected a module run :
 189
 190        make modules && make modules_install
 191
 192The utility ip2mkdev (see 5 and 7 below) creates all the device nodes
 193required by the driver.  For a device to be created it must be configured
 194in the driver and the board must be installed. Only devices corresponding
 195to real IntelliPort II ports are created. With multiple boards and expansion
 196boxes this will leave gaps in the sequence of device names. ip2mkdev uses
 197Linux tty naming conventions: ttyF0 - ttyF255 for normal devices, and
 198cuf0 - cuf255 for callout devices.
 199
 200
 2014. USING THE DRIVERS
 202
 203As noted above, the driver implements the ports in accordance with Linux
 204conventions, and the devices should be interchangeable with the standard
 205serial devices. (This is a key point for problem reporting: please make
 206sure that what you are trying do works on the ttySx/cuax ports first; then 
 207tell us what went wrong with the ip2 ports!)
 208
 209Higher speeds can be obtained using the setserial utility which remaps 
 21038,400 bps (extb) to 57,600 bps, 115,200 bps, or a custom speed. 
 211Intelliport II installations using the PowerPort expansion module can
 212use the custom speed setting to select the highest speeds: 153,600 bps,
 213230,400 bps, 307,200 bps, 460,800bps and 921,600 bps. The base for
 214custom baud rate configuration is fixed at 921,600 for cards/expansion
 215modules with ST654's and 115200 for those with Cirrus CD1400's.  This
 216corresponds to the maximum bit rates those chips are capable.  
 217For example if the baud base is 921600 and the baud divisor is 18 then
 218the custom rate is 921600/18 = 51200 bps.  See the setserial man page for
 219complete details. Of course if stty accepts the higher rates now you can
 220use that as well as the standard ioctls().
 221
 222
 2235. ip2mkdev and assorted utilities...
 224
 225Several utilities, including the source for a binary ip2mkdev utility are
 226available under .../drivers/char/ip2.  These can be build by changing to
 227that directory and typing "make" after the kernel has be built.  If you do
 228not wish to compile the binary utilities, the shell script below can be
 229cut out and run as "ip2mkdev" to create the necessary device files.  To
 230use the ip2mkdev script, you must have procfs enabled and the proc file
 231system mounted on /proc.
 232
 233
 2346. NOTES
 235
 236This is a release version of the driver, but it is impossible to test it
 237in all configurations of Linux. If there is any anomalous behaviour that 
 238does not match the standard serial port's behaviour please let us know.
 239
 240
 2417. ip2mkdev shell script
 242
 243Previously, this script was simply attached here.  It is now attached as a
 244shar archive to make it easier to extract the script from the documentation.
 245To create the ip2mkdev shell script change to a convenient directory (/tmp
 246works just fine) and run the following command:
 247
 248        unshar Documentation/serial/computone.txt
 249                (This file)
 250
 251You should now have a file ip2mkdev in your current working directory with
 252permissions set to execute.  Running that script with then create the
 253necessary devices for the Computone boards, interfaces, and ports which
 254are present on you system at the time it is run.
 255
 256
 257#!/bin/sh
 258# This is a shell archive (produced by GNU sharutils 4.2.1).
 259# To extract the files from this archive, save it to some FILE, remove
 260# everything before the `!/bin/sh' line above, then type `sh FILE'.
 261#
 262# Made on 2001-10-29 10:32 EST by <mhw@alcove.wittsend.com>.
 263# Source directory was `/home2/src/tmp'.
 264#
 265# Existing files will *not* be overwritten unless `-c' is specified.
 266#
 267# This shar contains:
 268# length mode       name
 269# ------ ---------- ------------------------------------------
 270#   4251 -rwxr-xr-x ip2mkdev
 271#
 272save_IFS="${IFS}"
 273IFS="${IFS}:"
 274gettext_dir=FAILED
 275locale_dir=FAILED
 276first_param="$1"
 277for dir in $PATH
 278do
 279  if test "$gettext_dir" = FAILED && test -f $dir/gettext \
 280     && ($dir/gettext --version >/dev/null 2>&1)
 281  then
 282    set `$dir/gettext --version 2>&1`
 283    if test "$3" = GNU
 284    then
 285      gettext_dir=$dir
 286    fi
 287  fi
 288  if test "$locale_dir" = FAILED && test -f $dir/shar \
 289     && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
 290  then
 291    locale_dir=`$dir/shar --print-text-domain-dir`
 292  fi
 293done
 294IFS="$save_IFS"
 295if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
 296then
 297  echo=echo
 298else
 299  TEXTDOMAINDIR=$locale_dir
 300  export TEXTDOMAINDIR
 301  TEXTDOMAIN=sharutils
 302  export TEXTDOMAIN
 303  echo="$gettext_dir/gettext -s"
 304fi
 305if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
 306  shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
 307elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
 308  shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
 309elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
 310  shar_touch='touch -am $3$4$5$6$2 "$8"'
 311else
 312  shar_touch=:
 313  echo
 314  $echo 'WARNING: not restoring timestamps.  Consider getting and'
 315  $echo "installing GNU \`touch', distributed in GNU File Utilities..."
 316  echo
 317fi
 318rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
 319#
 320if mkdir _sh17581; then
 321  $echo 'x -' 'creating lock directory'
 322else
 323  $echo 'failed to create lock directory'
 324  exit 1
 325fi
 326# ============= ip2mkdev ==============
 327if test -f 'ip2mkdev' && test "$first_param" != -c; then
 328  $echo 'x -' SKIPPING 'ip2mkdev' '(file already exists)'
 329else
 330  $echo 'x -' extracting 'ip2mkdev' '(text)'
 331  sed 's/^X//' << 'SHAR_EOF' > 'ip2mkdev' &&
 332#!/bin/sh -
 333#
 334#       ip2mkdev
 335#
 336#       Make or remove devices as needed for Computone Intelliport drivers
 337#
 338#       First rule!  If the dev file exists and you need it, don't mess
 339#       with it.  That prevents us from screwing up open ttys, ownership
 340#       and permissions on a running system!
 341#
 342#       This script will NOT remove devices that no longer exist if their
 343#       board or interface box has been removed.  If you want to get rid
 344#       of them, you can manually do an "rm -f /dev/ttyF* /dev/cuaf*"
 345#       before running this script.  Running this script will then recreate
 346#       all the valid devices.
 347#
 348#       Michael H. Warfield
 349#       /\/\|=mhw=|\/\/
 350#       mhw@wittsend.com
 351#
 352#       Updated 10/29/2000 for version 1.2.13 naming convention
 353#               under devfs.    /\/\|=mhw=|\/\/
 354#
 355#       Updated 03/09/2000 for devfs support in ip2 drivers. /\/\|=mhw=|\/\/
 356#
 357X
 358if test -d /dev/ip2 ; then
 359#       This is devfs mode...  We don't do anything except create symlinks
 360#       from the real devices to the old names!
 361X       cd /dev
 362X       echo "Creating symbolic links to devfs devices"
 363X       for i in `ls ip2` ; do
 364X               if test ! -L ip2$i ; then
 365X                       # Remove it incase it wasn't a symlink (old device)
 366X                       rm -f ip2$i
 367X                       ln -s ip2/$i ip2$i
 368X               fi
 369X       done
 370X       for i in `( cd tts ; ls F* )` ; do
 371X               if test ! -L tty$i ; then
 372X                       # Remove it incase it wasn't a symlink (old device)
 373X                       rm -f tty$i
 374X                       ln -s tts/$i tty$i
 375X               fi
 376X       done
 377X       for i in `( cd cua ; ls F* )` ; do
 378X               DEVNUMBER=`expr $i : 'F\(.*\)'`
 379X               if test ! -L cuf$DEVNUMBER ; then
 380X                       # Remove it incase it wasn't a symlink (old device)
 381X                       rm -f cuf$DEVNUMBER
 382X                       ln -s cua/$i cuf$DEVNUMBER
 383X               fi
 384X       done
 385X       exit 0
 386fi
 387X
 388if test ! -f /proc/tty/drivers
 389then
 390X       echo "\
 391Unable to check driver status.
 392Make sure proc file system is mounted."
 393X
 394X       exit 255
 395fi
 396X
 397if test ! -f /proc/tty/driver/ip2
 398then
 399X       echo "\
 400Unable to locate ip2 proc file.
 401Attempting to load driver"
 402X
 403X       if /sbin/insmod ip2
 404X       then
 405X               if test ! -f /proc/tty/driver/ip2
 406X               then
 407X                       echo "\
 408Unable to locate ip2 proc file after loading driver.
 409Driver initialization failure or driver version error.
 410"
 411X               exit 255
 412X               fi
 413X       else
 414X               echo "Unable to load ip2 driver."
 415X               exit 255
 416X       fi
 417fi
 418X
 419# Ok...  So we got the driver loaded and we can locate the procfs files.
 420# Next we need our major numbers.
 421X
 422TTYMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/tt/!d' -e 's/.*tt[^     ]*[     ]*\([0-9]*\)[   ]*.*/\1/' < /proc/tty/drivers`
 423CUAMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/cu/!d' -e 's/.*cu[^     ]*[     ]*\([0-9]*\)[   ]*.*/\1/' < /proc/tty/drivers`
 424BRDMAJOR=`sed -e '/^Driver: /!d' -e 's/.*IMajor=\([0-9]*\)[     ]*.*/\1/' < /proc/tty/driver/ip2`
 425X
 426echo "\
 427TTYMAJOR = $TTYMAJOR
 428CUAMAJOR = $CUAMAJOR
 429BRDMAJOR = $BRDMAJOR
 430"
 431X
 432# Ok...  Now we should know our major numbers, if appropriate...
 433# Now we need our boards and start the device loops.
 434X
 435grep '^Board [0-9]:' /proc/tty/driver/ip2 | while read token number type alltherest
 436do
 437X       # The test for blank "type" will catch the stats lead-in lines
 438X       # if they exist in the file
 439X       if test "$type" = "vacant" -o "$type" = "Vacant" -o "$type" = ""
 440X       then
 441X               continue
 442X       fi
 443X
 444X       BOARDNO=`expr "$number" : '\([0-9]\):'`
 445X       PORTS=`expr "$alltherest" : '.*ports=\([0-9]*\)' | tr ',' ' '`
 446X       MINORS=`expr "$alltherest" : '.*minors=\([0-9,]*\)' | tr ',' ' '`
 447X
 448X       if test "$BOARDNO" = "" -o "$PORTS" = ""
 449X       then
 450#       This may be a bug.  We should at least get this much information
 451X               echo "Unable to process board line"
 452X               continue
 453X       fi
 454X
 455X       if test "$MINORS" = ""
 456X       then
 457#       Silently skip this one.  This board seems to have no boxes
 458X               continue
 459X       fi
 460X
 461X       echo "board $BOARDNO: $type ports = $PORTS; port numbers = $MINORS"
 462X
 463X       if test "$BRDMAJOR" != ""
 464X       then
 465X               BRDMINOR=`expr $BOARDNO \* 4`
 466X               STSMINOR=`expr $BRDMINOR + 1`
 467X               if test ! -c /dev/ip2ipl$BOARDNO ; then
 468X                       mknod /dev/ip2ipl$BOARDNO c $BRDMAJOR $BRDMINOR
 469X               fi
 470X               if test ! -c /dev/ip2stat$BOARDNO ; then
 471X                       mknod /dev/ip2stat$BOARDNO c $BRDMAJOR $STSMINOR
 472X               fi
 473X       fi
 474X
 475X       if test "$TTYMAJOR" != ""
 476X       then
 477X               PORTNO=$BOARDBASE
 478X
 479X               for PORTNO in $MINORS
 480X               do
 481X                       if test ! -c /dev/ttyF$PORTNO ; then
 482X                               # We got the hardware but no device - make it
 483X                               mknod /dev/ttyF$PORTNO c $TTYMAJOR $PORTNO
 484X                       fi      
 485X               done
 486X       fi
 487X
 488X       if test "$CUAMAJOR" != ""
 489X       then
 490X               PORTNO=$BOARDBASE
 491X
 492X               for PORTNO in $MINORS
 493X               do
 494X                       if test ! -c /dev/cuf$PORTNO ; then
 495X                               # We got the hardware but no device - make it
 496X                               mknod /dev/cuf$PORTNO c $CUAMAJOR $PORTNO
 497X                       fi      
 498X               done
 499X       fi
 500done
 501X
 502Xexit 0
 503SHAR_EOF
 504  (set 20 01 10 29 10 32 01 'ip2mkdev'; eval "$shar_touch") &&
 505  chmod 0755 'ip2mkdev' ||
 506  $echo 'restore of' 'ip2mkdev' 'failed'
 507  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
 508  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
 509    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
 510    || $echo 'ip2mkdev:' 'MD5 check failed'
 511cb5717134509f38bad9fde6b1f79b4a4  ip2mkdev
 512SHAR_EOF
 513  else
 514    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'ip2mkdev'`"
 515    test 4251 -eq "$shar_count" ||
 516    $echo 'ip2mkdev:' 'original size' '4251,' 'current size' "$shar_count!"
 517  fi
 518fi
 519rm -fr _sh17581
 520exit 0
 521
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.