123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521 |
- 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
|