=============================================================================
	   MOXA Intellio Family Device Driver Installation Guide
	        for Linux Kernel 2.4.x, 2.6.x
   	     Copyright (C) 2005, Moxa Technologies Co, Ltd.
=============================================================================
Date: 3/30/2005

Content

1. Introduction
2. System Requirement
3. Installation
   3.1 Hardware installation
   3.2 Driver files   
   3.3 Device naming convention
   3.4 Module driver configuration   
   3.5 Static driver configuration for Linux kernel 2.4.x, 2.6.x.
   3.6 Custom configuration
   3.7 Verify driver installation
4. Utilities
5. Setserial
6. Troubleshooting
7. Programming


-----------------------------------------------------------------------------
0. Note

   0.1 For Linux kernel 2.4.x or above user.
      The Moxa Intellio driver is ready in the Linux kernel  
      version 2.2.14 or above. But to use this built-in driver, you still need 
      more utilities which downloaded from Moxa ftp or CD-ROM. We suggest you 
      backup this built-in driver (/usr/src/linux/drivers/char/mxser.c) and 
      use the driver downloaded from Moxa or CD-ROM.
      
      We will describe this topic in this document.
      
      
   0.2 Installation step summary.   
   
      Hardware installation:
      	Refer to the "3.1 Hardware installation".
      	
      Software/driver installation:	   	
        0.2.1 Extract the Moxa driver: Refer to the "3.2 Driver files".
        
        0.2.2 There are two methods to install Moxa driver: module & static. If 
          you want to use module method, refer to the "3.4 Module driver
          configuration". If you want to use static method, refer to the
          "3.5 Static driver configuration".

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


1. Introduction

   The Intellio family Linux driver 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 have been developed upon Linux Kernel
   2.4.x and 2.6.x. This driver supports Intel x86 hardware platform. In 
   order to maintain compatibility, this version has also been properly 
   tested with RedHat, S.u.S.E Linux, Mandrake and Fedora. However, if 
   compatibility problem occurs, 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 displaying 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 www.moxa.com.

   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 machine
   - Kernel version: 2.4.x or 2.6.x.
   - gcc version 2.72 or later
   - Maximum 4 boards can be installed in combination

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

3. Installation
   3.1 Hardware installation
   3.2 Driver files   
   3.3 Device naming convention
   3.4 Module driver configuration   
   3.5 Static driver configuration for Linux kernel 2.4.x, 2.6.x.
   3.6 Custom configuration
   3.7 Verify driver 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 /
       # mkdir moxa 			
       # cd /moxa
       # tar xvf /dev/fd0
       
       or
       
       # cd /
       # mkdir moxa
       # cd /moxa
       # cp /mnt/cdrom/<driver directory>/mxdrv.tgz .
       # tar xvfz mxdrv.tgz


   3.3 Device naming convention
       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
       
       !!!!!!!!!!!!!!!!!!!! NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Under Kernel 2.6 the Callout Device is Obsolete. So use
       Dial-in device instead.
       !!!!!!!!!!!!!!!!!!!! NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        

       Board sequence
       --------------
       This driver will activate ISA boards according to the parameter set
       in the driver. After all specified ISA board activated, PCI board
       will be installed in the system automatically driven.
       Therefore the board number is sorted by the memory address of ISA 
       boards. For PCI boards, their sequence will be after ISA boards.


   3.4 Module driver configuration
       Module driver is easiest way to install. If you prefer static driver
       installation, please skip this paragraph.


       ------------- Prepare to use the MOXA driver--------------------  
       3.4.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.6"
             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.6"
          for more detailed procedure.
          Mxmknod will delete any special files occupying the same device 
          naming.

       3.4.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 clean; make install
	  
          !!!!!!!!!! NOTE !!!!!!!!!!!!!!!!! 
	  For Redhat AS/ES/WS & Fedora Core 1:
	  # make clean; make installsp1
          !!!!!!!!!! NOTE !!!!!!!!!!!!!!!!! 
 	  

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

	  # modprobe moxa <argument>

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

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

	  # cd /moxa/mxerv/driver 
	  # ./moxaload -y
	  

       ------------- Load MOXA driver on boot --------------------  
       3.4.5. For the above description, you may manually execute 
          "modprobe 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 "modprobe ..." command 
          to add the arguments (see "3.4.6" section). Otherwise, If you 
          use the distribution Mandrake 10.1 or Fedora Core 3, please
          modify the "/usr/lib/moxa/mxmknod ..." command to add the 
          arguments. 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

	  Check "rc.serial" exist or not. If "rc.serial" doesn't exist, 
	  create it by vi, run "chmod 755 rc.serial" to change the permission.
	  Add "/etc/rc.d/rc.moxa" in last line, 
	  
          Reboot and check if moxa.(k)o activated by "lsmod" command.
       
       
       ------------- MOXA driver argument for ISA board --------------------  
       3.4.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.

	  modprobe 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. # modprobe 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.5 Static driver configuration for Linux kernel 2.4.x or above,
       include 2.6.x.
       
       Note: To use static driver, you must install the linux kernel
             source package.
   
       3.5.1 Backup the built-in driver in the kernel.
          # cd /usr/src/linux/drivers/char
          # mv moxa.c moxa.c.old
       
          For Red Hat 7.x user, you need to create link:
          # cd /usr/src
          # ln -s linux-2.4 linux

       3.5.2 Create link
	  # cd /usr/src/linux/drivers/char
	  # ln -s /moxa/mxdrv/driver/moxa.c moxa.c

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

       3.5.4 Create special file
	  # cd /usr/lib/moxa
	  # ./mxmknod

       3.5.5 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},
	      0, 0
	     };
	     

       3.5.6 Setup kernel configuration
          Configure the kernel:
          
            # cd /usr/src/linux
            # make menuconfig
            
          You will go into a menu-driven system. Please select [Character
          devices][Non-standard serial port support], enable the [Moxa 
          IntellIO support] driver with "[*]" for built-in (not "[M]"), then
          select [Exit] to exit this program. 
          
       3.5.7 Rebuild kernel
	  The following are for Linux kernel rebuilding, for your 
          reference only.
	  For appropriate details, please refer to the Linux document.

	   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. Please make sure the boot kernel (vmlinuz) is in the
	      correct position. 
	   f. 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).
	      After checking /etc/lilo.conf, please run "lilo".

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

	  
       3.5.8 Configure rc file
	  Run following command for setting rc files.

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

	  Check "rc.serial" exist or not. If "rc.serial" doesn't exist, 
	  create it by vi, run "chmod 755 rc.serial" to change the permission.
	  Add "/usr/lib/moxa/moxaload -y" in last line, 
     

       3.5.9 Reboot

   3.6 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.

       3.6.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.
       3.6.2 Create special files
	  Run /moxa/mxdrv/driver/mxmknod to create special files with
	  specified major numbers.
       3.6.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
       3.6.4 Run "make clean; make install" in /moxa/mxdrv/driver.

   3.7 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 display 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.

   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.

