=============================================================================
	ADVANTECH Intellio Industrial Communication Device Driver
				 Installation Guide
		    for Linux Kernel 2.2.x and 2.0.3x
	          Copyright (C) 2000, ADVANTECH Co, Ltd.
=============================================================================
Content

1. Introduction
2. System Requirement
3. Installation
4. Utilities
5. Setserial
6. Troubleshooting

-----------------------------------------------------------------------------


1. Introduction

   The Intellio Industrial Communication Linux driver, Ver. 1.0, supports 
   following multiport cardds.

    - PCL-747+/747R, 8 port multiport RS-232 Controller Card.
    - PCL-844+ , 8-32 port intelligent RS-232 Card.
   

   This driver and installation procedure is developed upon Linux Kernel
   2.2.5 and backward compatible to 2.0.3x. This driver supports Intel x86 and
   Alpha hardware platform. In order to ensure compatibility between different
   Linux distributions, the driver has been tested under RedHat, OpenLinux,
   TurboLinux and S.u.S.E Linux as detail as possible. However, if you
   encounter any driver problem, please contact Moxa at support@moxa.com.tw.

   In addition to device driver, useful utilities are also provided in this
   version. They are
    - pclterm  A simple terminal program which is useful in testing serial
	      ports.

   All the drivers and utilities are published in form of source code under
   GNU General Public License in this version. Please refer to GNU General
   Public License announcement in each source code file for more detail.

   In ADVANTECH's ftp sites, you may always find latest driver at
   ftp://ftp.ADVANTECH.com  or ftp://ftp.ADVANTECH.com.tw.

   This version of driver can be installed as Loadable Module (Module driver)
   or built-in into kernel (Static driver). You may refer to following
   installation procedure for suitable one. Before you install the driver,
   please refer to hardware installation procedure in the User's Manual.

   We assume the user should be familiar with following documents.
   - Serial-HOWTO
   - Kernel-HOWTO
-----------------------------------------------------------------------------
2. System Requirement
   - Hardware platform: Intel x86 or Alpha machine
   - Kernel version: 2.0.3x or 2.2.x
   - gcc version 2.72 or later
   - glib version
   - Maximum 4 boards can be installed in combination

-----------------------------------------------------------------------------

3. Installation

   3.1 Hardware installation

       
       You'll have to manually assign the hardware configuration for base
       memory address via a jumper and a switch. Please refer to hardware
       installation procedure in User's Manual before proceed any further.

       
   3.2 Driver files and device naming convention

       The driver file may be obtained from ftp, CD-ROM or floppy disk. The
       first step, anyway, is to copy driver file "mxdrv.tgz" into specified
       directory. e.g. /pcl. The execute commands as below.
	
       # cd /pcl
       # tar xvf /dev/fd0
       or
       # cd /pcl
       # cp /mnt/cdrom/<driver directory>/pcldrv.tgz .
       # tar xvf pcldrv.tar

       You may find all the driver and utilities files in /pcl/pcldrv.
       Following installation procedure depends on the model you'd like to
       run the driver. If you prefer module driver, please refer to 3.3.
       If static driver is required, please refer to 3.4.

       Dialin and callout port
       -----------------------
       This driver remains traditional serial device properties. There're
       two special file name for each serial port. One is dial-in port
       which is named "tty[A-D][1-4][1-8]". For callout port, the naming
       convention is "tty[a-d][1-4][1-8]".

       Device naming when more than 2 boards installed
       -----------------------------------------------
       Naming convention for each Intellio multiport board is pre-defined
       as below.

       Board Num.	 Dial-in Port		 Callout port
       1st board	ttyA11	- ttyA48       ttya11  - ttya48
       2nd board	ttyB11	- ttyB48       ttyb11  - ttyb48
       3rd board	ttyC11	- ttyC48       ttyc11  - ttyc48
       4th board	ttyD11	- ttyD48       ttyd11  - ttyd48


   3.3 Module driver configuration

       Module driver is easiest way to install. If you prefer static driver
       installation, please skip this paragraph.
       In following procedure, we'll modify some files in /etc/rc.d. As
       S.u.S.E Linux has special rc file naming convention, please take
       /etc/boot.local as /etc/rc.local, /etc/serial as /etc/rc.serial
       if you're in S.u.S.E Linux system.

       1. Find "Makefile" in /pcl/pcldrv, then run

	  # make install

	  The driver files "pclint.o" and utilities will be properly compiled
	  and copied to system directories respectively.Then run

	  # insmod pclint

	  to activate the moduler driver. You may run "lsmod" to check
	  if "pclint.o" is activated.

       2. Create special files by executing "pclmknod".
	  # cd /pcl/pcldrv/driver
	  # ./pclmknod

	  Default major numbers for dial-in device and callout device are
	  31, 36. pclmknod will delete any special files occuping the same
	  device naming.

       3. Download firmware. Find "pclload" in /pcl/pcldrv/driver, then run

	  # ./pclload -y

       4. Up to now, you may manually execute "insmod pclint" to activate
	  this driver and run "rmmod pclint" to remove it. However, it's
	  better to have a boot time configuration to eliminate manual
	  operation.
	  Boot time configuration can be achieved by rc file. Run following
	  command for setting rc files.

	  # cd /pcl/pcldrv/driver
	  # cp ./rc.pcl /etc/rc.d
	  # cd /etc/rc.d

	  Find "rc.serial". If "rc.serial" doesn't exist, create it by vi.
	  Add "rc.pcl" in last line. Next, open rc.local by vi and append
	  following content.

	  if [ -f /etc/rc.d/rc.serial ]; then
	     sh /etc/rc.d/rc.serial
	  fi

       5. Reboot and check if pclint.o activated by "lsmod" command.
       6. If you'd like to drive Intellio ISA boards in the system, you'll
	  have to provide parameter when loading module driver. The format
	  of parameter is as follows.

	  insmod pclint type=x,x,x,x baseaddr=0x?????,0x?????,0x?????,0x????? numports=y,y,y,y
			   | | | |
			   | | | +- 4th ISA board
			   | | +------ 3rd ISA board
			   | +------------ 2nd ISA board
			   +------------------- 1st ISA board

	  Where x=0   None		y=0,8,16,24,32 ports
		x=2   PCL-844+
		x=4   PCL-747+/747R
  

   3.5 Custom configuration

       Although this driver already provides you default configuration, you
       still can change the device name and major number.The instruction to
       change these parameters are shown as below.

       Change Device name
       ------------------
       If you'd like to use other device names instead of default naming
       convention, all you have to do is to modify the internal code
       within the shell script "pclmknod". First, you have to open "pclmknod"
       by vi. Locate each line contains "tty[A-D]" and "tty[a-d]" and change
       them to the device name you desired. "pclmknod" creates the device names
       you need next time executed.

       Change Major number
       -------------------
       If major number 31 and 36 had been occupied, you may have to select
       2 free major numbers for this driver. There are 3 steps to change
       major numbers.

       1. Find free major numbers
	  In /proc/devices, you may find all the major numbers occupied
	  in the system. Please select 2 major numbers that are available.
	  e.g. 40, 45.
       2. Create special files
	  Run /pcl/pcldrv/driver/pclmknod to create special files with
	  specified major numbers.
       3. Modify driver with new major number
	  Run vi to open /pcl/pcldrv/driver/pclint.c. Locate the line
	  contains "PCLHMAJOR". Change the content as below.
	  #define	  PCLMAJOR		 40
	  #define	  PCLCUMAJOR		 45
       4. Run # make install in /pcl/pcl/drv/driver.

   3.6 Verify driver installation

       You may refer to /var/log/messages to check the latest status log
       reported by this driver whenever it's activated.


-----------------------------------------------------------------------------
4. Utilities
   There is one utilitie contained in this driver. They are 
   pclterm. These  utilitie is released in form of source code. They should
   be compiled into executable file and copied into /usr/bin.

   pclterm - Terminal Emulation
   ---------------------------
   This utility provides data sending and receiving ability of all tty ports,
   especially for PCL ports. It is quite useful for testing simple
   application, for example, sending AT command to a modem connected to the
   port or used as a terminal for login purpose. Note that this is only a
   dumb terminal emulation without handling full screen operation.
-----------------------------------------------------------------------------
5. Setserial
-----------------------------------------------------------------------------

   Supported Setserial parameters are listed as below.

   uart 	  set UART type(16450-->disable FIFO, 16550A-->enable FIFO)
   close_delay	  set the amount of time(in 1/100 of a second) that DTR
		  should be kept low while being closed.
   closing_wait   set the amount of time(in 1/100 of a second) that the
		  serial port should wait for data to be drained while
		  being closed, before the receiver is disable.
   spd_hi	  Use  57.6kb  when  the application requests 38.4kb.
   spd_vhi	  Use  115.2kb	when  the application requests 38.4kb.
   spd_normal	  Use  38.4kb  when  the application requests 38.4kb.

-----------------------------------------------------------------------------
6. Troubleshooting

   The boot time error mesages and solutions are stated as clearly as
   possible. If all the possible solutions fail, please contact our technical
   support team to get more help.

   Error msg: More than 4 PCL Intellio family boards found. Fifth board and
	      after are ignored.
   Solution:
   To avoid this problem, please unplug fifth and after board, because PCL
   driver supports up to 4 boards.

   Error msg: Couldn't install PCL Intellio family driver!
   Solution:
   Load PCL driver fail, the major number may conflict with other devices.
   Please refer to previous section 3.5 to change a free major number for
   PCL driver.

   Error msg: Couldn't install PCL Intellio family callout driver!
   Solution:
   Load PCL callout driver fail, the callout device major number may
   conflict with other devices. Please refer to previous section 3.5 to
   change a free callout device major number for PCL driver.

   Error msg: ERROR! open /dev/PCL failure.
   Solution:
   The special files for PCL ports haven't been created. Please run
   "pclmknod" to create special files.

   Error msg: WARNING! PCL Cxxx(0xXXXXX) MemBank conflict.
   Solution:
   More than two PCLs boards attempt to use the same memory bank. Please
   check driver configuration and make sure each PCL board has an unique
   memory bank.
   
   Error msg: WARNING! PCL Cxxx(0xXXXXX) not found.
   Solution:
   There are three major reasons.
   a. The DIP switch for memory bank configuration is not identical to
      the setting in driver.
   b. Check if the board is properly plugged into ISA/EISA bus slot.
   c. Try the Memory Banks other than C800H,CC00H. Some mother board BIOS may
      occupy these memory areas.

   Error msg: ERROR! Firmware file(xxxx.cod) not found.
   Solution:
   Can't find firmware files(xxxx.cod). Please make sure the firmware files
   have been copied into /usr/lib/pcl.

   Error msg: ERROR! PCL Cxxx(0xXXXXX) download firmware failure.
   Solution:
   For ADVANTECH ISA Boards:
   a. The memory address for the board is conflicting with the BIOS shadow
      RAM or cache. Please release this base address from BIOS or change
      another memory bank.
   b. The memory address you select for the ADVANTECH board conflicts with
      other interface boards such as SCSI board with the same memory
      address. Please adjust the memory address for either boards.


   Error msg: ERROR! PCL PCL-747(0xXXXXX) CPU/Basic module not found.
   Solution:
   a. The CPU/Basic Module and UART/Extensive modules are powered off.
      Check that the connection cable between the CPU/Basic Module and
      Control Board is correct and firmly plugged in on both sides.
      Make sure power switch on CPU/Basic Module is on.
   b. Refer to User's Manual for more hardware troubleshooting procedure.

   Error msg: ERROR! PCL PCL-747+(0xXXXXX) CPU/Basic Module download fail.
   Solution:
   a. The CPU/Basic Module and UART/Extensive modules are powered off.
      Check that the connection cable between the CPU/Basic Module and
      Control Board is correct and firmly plugged in on both sides.
      Make sure power switch on CPU/Basic Module is on.
   b. Refer to User's Manual for more hardware troubleshooting procedure.

   Error msg: ERROR! PCL Cxxx(0xXXXXX) UART module not found.
   Solution:
   a.Make sure that all UART module(s) is(are) fastened properly.

-----------------------------------------------------------------------------
 7. Programming
   Please refer to Serial-Programming-HOWTO to get complete information.
