=============================================================================
	MOXA Intellio Family Device Driver Ver. 5.2 Installation Guide
		    for Linux Kernel 2.2.x and 2.0.3x
	       Copyright (C) 1999-2001, Moxa Technologies Co, Ltd.
=============================================================================
Content

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

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


1. Introduction

   The Intellio family Linux driver, Ver. 5.2, supports following multiport
   boards.

    -C218Turbo, C218Turbo/PCI 8 port multiport board.
    -C320Turbo, C320Turbo/PCI 8~32 port multiport board.
    -CP-204J 4 port multiport board.

   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
    - mxdiag  Diagnostic program for detecting installed Moxa Intellio boards.
    - mxmon   Monitor program to observe data count and line status signals.
    - mxterm  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 Moxa's ftp sites, you may always find latest driver at
   ftp://ftp.moxa.com  or ftp://ftp.moxa.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

       There are two types of buses, ISA and PCI, for Intellio family multiport
       board.

       ISA board
       ---------
       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.

       PCI board
       ---------
       You may need to adjust IRQ usage in BIOS to avoid from IRQ conflict
       with other ISA devices. Please refer to hardware installation
       procedure in User's Manual in advance.


   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. /moxa. The execute commands as below.
	
       # cd /moxa
       # tar xvf /dev/fd0
       or
       # cd /moxa
       # cp /mnt/cdrom/<driver directory>/mxdrv.tgz .
       # tar xvfz mxdrv.tgz

       You may find all the driver and utilities files in /moxa/mxdrv.
       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.


       ------------- Prepare to use the MOXA driver--------------------  
       1. Create tty device with correct major number
          Before using MOXA driver, your system must have the tty devices 
          which are created with driver's major number. We offer one shell
          script "mxmknod" to simplify the procedure. 
          This step is only needed to be executed once. But you still
          need to do this procedure when:
          a. You change the driver's major number. Please refer the "3.5"
             section.
          b. Your total installed MOXA boards number is changed. Maybe you 
             add/delete one MOXA board.
          c. You want to change the tty name. This needs to modify the 
             shell script "mxmknod"

          The procedure is:
	  # cd /moxa/mxdrv/driver
	  # ./mxmknod

          This shell script will require the major number for dial-in 
          device and callout device to create tty device. You also need 
          to specify the total installed MOXA board number. Default major 
          numbers for dial-in device and callout device are 31, 37. If
          you need to change to other number, please refer section "3.5"
          for more detailed procedure.
          Mxmknod will delete any special files occupying the same device 
          naming.

       2. Build the MOXA driver and utilities
          Before using the MOXA driver and utilities, you need compile the
          all the source code. This step is only need to be executed once.
          But you still re-compile the source code if you modify the source
          code. For example, if you change the driver's major number (see 
          "3.5" section), then you need to do this step again.
                    
          Find "Makefile" in /moxa/mxdrv, then run

	  # make install

	  The driver files "moxa.o" and utilities will be properly compiled
	  and copied to system directories respectively. 
	  
	  
       ------------- Load MOXA driver--------------------  
       3. Load the MOXA driver  

	  # insmod moxa <argument>

	  will activate the module driver. You may run "lsmod" to check
	  if "moxa.o" is activated. If the MOXA board is ISA board, the 
          <argument> is needed. Please refer to "6." section for more
          information.

       4. Download firmware. 
          Find "moxaload" in /moxa/mxdrv/driver, then run

	  # ./moxaload -y
	  

       ------------- Load MOXA driver on boot --------------------  
       5. For the above description, you may manually execute "insmod moxa" 
          and "/moxa/mxdrv/driver/moxaload -y" to activate this driver and 
          run "rmmod moxa" 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. We offer one "rc.moxa" 
          file to simplify the procedure under "moxa/mxdrv/driver". 
          
          If you use ISA board, please modify the "insmod ..." command 
          to add the argument (see "6." section). After modifying the 
          rc.moxa, please try to execute "/moxa/mxdrv/driver/rc.moxa" 
          manually to make sure the modification is ok. If any error 
          encountered, please try to modify again. if the modification is 
          completed, follow the below step.
	  
	  Run following command for setting rc files.

	  # cd /moxa/mxdrv/driver
	  # cp ./rc.moxa /etc/rc.d
	  # cd /etc/rc.d

	  Find "rc.serial". If "rc.serial" doesn't exist, create it by vi.
	  Add "rc.moxa" 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

          Reboot and check if moxa.o activated by "lsmod" command.
       
       
       ------------- MOXA driver argument for ISA board --------------------  
       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 moxa 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   C218Turbo/ISA
		x=4   C320Turbo/ISA

	  Ex. There are 2 boards installed in your system.
	      C218Turbo/ISA (Mem bank: dc000) to be first board(ttya11-ttya18).
	      C218Turbo/PCI to be second board(ttyb11-ttyb18).
	      Installation procedure is as follows.
	      1. # insmod moxa type=2,,, baseaddr=0xdc000,,, numports=8,,,
	      2. # /usr/lib/moxa/moxaload -y
		   Intellio Series device driver (Ver. x.x)
		   Downloading .......
		   Board 1: MOXA C218Turbo(MemBank=dc000) is found.
		   Board 2: MOXA C218Turbo/PCI(BusNo=0, DevNo=10) is found.

   3.4 Static driver configuration
       In addition to provide module driver, MOXA Intellio serial driver
       source code is able to be built into kernel. Following explanation
       shows you the way. Please note that part of the instructions may
       vary according to your system environment. If you have any questions,
       please refer to Kernel-HOWTO in advance.
       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. Create link
	  # cd /usr/src/linux/drivers/char
	  # ln -s /moxa/mxdrv/driver/moxa.c moxa.c

       2. Copy files and make tools
	  # cd /usr/lib
	  # mkdir moxa
	  # cd /moxa/mxdrv/driver
	  # cp *.cod /usr/lib/moxa
          # make moxaload
	  # cp moxaload /usr/lib/moxa
	  # cp mxmknod /usr/lib/moxa
	  # cd /moxa/mxdrv/utility
	  # make install

       3. Add memory bank and port number list for ISA boards. In module
	  mode, the memory bank and port number for ISA board is given
	  by parameter. In static driver configuration, you'll have to
	  assign it within driver's source code. If you will not install
	  any ISA boards, you may skip to next portion "Modify tty_io.c".
	  The instructions to modify driver source code are as below

	  a. # cd /moxa/mxdrv/driver
	     # vi moxa.c
	  b. Find the array "moxa_isa_board_conf".
	     Change the memory bank and port number within this array
	     using vi. For example, to driver C218Turbo and C320Turbo(16ports)
	     ISA boards with memory bank 0xC8000 and 0xDC000 as 1st and 2nd
	     board. Just to change the source code as follows.

	     static moxa_isa_board_conf moxa_ida_boards[]={
	      {MOXA_BOARD_C218_ISA,8,0xC8000},
	      {MOXA_BOARD_C320_ISA,16,0xDC000}
	     };

       4. Modify tty_io.c
	  # cd /usr/src/linux/drivers/char/
	  # vi tty_io.c
	    Find pty_init(), insert "moxa_init()" as

	    pty_init();
	    moxa_init();

       5. Modify tty.h
	  # cd /usr/src/linux/include/linux
	  # vi tty.h
	    Find extern int tty_init(void), insert "moxa_init()" as

	    extern int tty_init(void);
	    extern int moxa_init(void);

       6. Modify Makefile
	  # cd /usr/src/linux/drivers/char
	  # vi Makefile
	    Find "L_OBJS := tty_io.o ...... random.o", add
	    "moxa.o" at last of this line as
	    L_OBJS := tty_io.o ....... moxa.o

       7. Rebuild kernel
	  The following are for Linux kernel rebuild, for your reference only.
	  For appropriate details, please refer to the Linux document.

	  If 'lilo' utility is installed, please use '/usr/src/linux/make zlilo'
	  to rebuild kernel. If 'lilo' is not installed, please follow the
	  following steps.

	   a. cd /usr/src/linux
	   b. make clean			     /* take a few minutes */
	   c. make dep				     /* take a few minutes */
	   d. make bzImage		    /* take probably 10-20 minutes */
	   e. Backup original boot kernel file.		  /* optional step */
	   f. cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz
	   g. Please make sure the boot kernel (vmlinuz) is in the
	      correct position. If you use 'lilo' utility, you should
	      check /etc/lilo.conf 'image' item specified the path
	      which is the 'vmlinuz' path, or you will load wrong
	      (or old) boot kernel image (vmlinuz).
	   h. chmod 400 /vmlinuz
	   i. lilo
	   j. rdev -R /vmlinuz 1
	   k. sync

	  Note that if the result of "make zImage" is ERROR, then you have to
	  go back to Linux configuration Setup. Type "make config" in directory
	  /usr/src/linux or "setup".

       8. Configure rc file
	  a. Find "rc.serial" in /etc/rc.d. If "rc.serial" doesn't exist,
	     create it by vi. Then add following content.

	     /usr/lib/moxa/moxaload -y

	  b. Check if following content exist in rc.local. If not, add them to
	     the last line of rc.local.

	     if [ -f /etc/rc.d/rc.serial ]; then
		sh /etc/rc.d/rc.serial
	     fi
       9. Create special file
	   # cd /usr/lib/moxa
	   # ./mxmknod

       10. Reboot

   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 "mxmknod". First, you have to open "mxmknod"
       by vi. Locate each line contains "tty[A-D]" and "tty[a-d]" and change
       them to the device name you desired. "mxmknod" creates the device names
       you need next time executed.

       Change Major number
       -------------------
       If major number 31 and 37 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 /moxa/mxdrv/driver/mxmknod to create special files with
	  specified major numbers.
       3. Modify driver with new major number
	  Run vi to open /moxa/mxdrv/driver/moxa.c. Locate the line
	  contains "MOXAMAJOR". Change the content as below.
	  #define	  MOXAMAJOR		 40
	  #define	  MOXACUMAJOR		 45
       4. Run # make install in /moxa/mxdrv/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 are 3 utilities contained in this driver. They are mxdiag, mxmon and
   mxterm. These 3 utilities are released in form of source code. They should
   be compiled into executable file and copied into /usr/bin.

   mxdiag - Diagnostic
   --------------------
   This utility provides the function to detect what Moxa Intellio multiport
   board exists in the system.

   mxmon - Port Monitoring
   -----------------------
   This utility gives the user a quick view about all the MOXA ports'
   activities. One can easily learn each port's total received/transmitted
   (Rx/Tx) character count since the time when the monitoring is started.
   Rx/Tx throughputs per second are also reported in interval basis (e.g.
   the last 5 seconds) and in average basis (since the time the monitoring
   is started). You can reset all ports' count by <HOME> key. <+> <->
   (plus/minus) keys to change the displaying time interval. Press <ENTER>
   on the port, that cursor stay, to view the port's communication
   parameters, signal status, and input/output queue.

   mxterm - Terminal Emulation
   ---------------------------
   This utility provides data sending and receiving ability of all tty ports,
   especially for MOXA 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 messages 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 Moxa Intellio family boards found. Fifth board and
	      after are ignored.
   Solution:
   To avoid this problem, please unplug fifth and after board, because Moxa
   driver supports up to 4 boards.

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

   Error msg: Couldn't install MOXA Intellio family callout driver!
   Solution:
   Load Moxa 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 Moxa driver.

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

   Error msg: WARNING! MOXA Cxxx(0xXXXXX) MemBank conflict.
   Solution:
   More than two MOXA boards attempt to use the same memory bank. Please
   check driver configuration and make sure each MOXA board has an unique
   memory bank. Usually, this happens to ISA board.

   Error msg: WARNING! MOXA Cxxx(0xXXXXX) not found.
   Solution:
   This problem usually happens to ISA board. 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/moxa.

   Error msg: ERROR! MOXA Cxxx(0xXXXXX) download firmware failure.
   Solution:
   For MOXA 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 MOXA board conflicts with
      other interface boards such as SCSI board with the same memory
      address. Please adjust the memory address for either boards.

   For MOXA PCI Boards:
      The board is not properly plugged in the system or the board is
      malfunctioning.

   Error msg: ERROR! MOXA C320Turbo(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! MOXA C320Turbo(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! MOXA 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.

