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