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.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 /etc/modprobe.conf 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.conf or both. 157The options line is equivalent to the command line and takes precedence over 158what is in ip2.c. 159 160/etc/modprobe.conf sample: 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