| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 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 | 
					
						
							|  |  |  | Support: support@computone.com | 
					
						
							|  |  |  | Fixes and Updates: Mike Warfield <mhw@wittsend.com> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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.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 /etc/modprobe.conf 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/i386/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.conf or both. | 
					
						
							|  |  |  | The options line is equivalent to the command line and takes precedence over | 
					
						
							|  |  |  | what is in ip2.c.  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /etc/modprobe.conf sample: | 
					
						
							|  |  |  | 	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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-03 22:17:48 +02:00
										 |  |  | 6. NOTES | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-03 22:17:48 +02:00
										 |  |  | 7. ip2mkdev shell script | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-13 21:33:24 +00:00
										 |  |  | 	unshar Documentation/serial/computone.txt | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		(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 |