=============================================================================
          MOXA Smartio/Industio Family Device Driver Installation Guide
		    for Linux Kernel 2.4.x, 2.6.x
	       Copyright (C) 2008, Moxa Inc.
=============================================================================
Date: 01/21/2008

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 and 2.6.x.
   3.6 Custom configuration
   3.7 Verify driver installation
4. Utilities
5. Setserial
6. Troubleshooting

-----------------------------------------------------------------------------
1. Introduction

   The Smartio/Industio/UPCI family Linux driver supports following multiport
   boards.

    - 2 ports multiport board
	CP-102U, CP-102UL, CP-102UF
	CP-132U-I, CP-132UL,
	CP-132, CP-132I, CP132S, CP-132IS,
	CI-132, CI-132I, CI-132IS,
	(C102H, C102HI, C102HIS, C102P, CP-102, CP-102S)

    - 4 ports multiport board
	CP-104EL,
	CP-104UL, CP-104JU,
	CP-134U, CP-134U-I,
	C104H/PCI, C104HS/PCI,
	CP-114, CP-114I, CP-114S, CP-114IS, CP-114UL,
	C104H, C104HS,
	CI-104J, CI-104JS,
	CI-134, CI-134I, CI-134IS,
	(C114HI, CT-114I, C104P)
	POS-104UL,
	CB-114,
	CB-134I

    - 8 ports multiport board
	CP-118EL, CP-168EL,
	CP-118U, CP-168U,
	C168H/PCI,
	C168H, C168HS,
	(C168P),
	CB-108

   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, Mandrake, Fedora and S.u.S.E Linux. 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
    - msdiag     Diagnostic program for displaying installed Moxa
                 Smartio/Industio boards.
    - msmon      Monitor program to observe data count and line status signals.
    - msterm     A simple terminal program which is useful in testing serial
	         ports.
    - io-irq.exe Configuration program to setup ISA boards. Please note that
                 this program can only be executed under DOS.

   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 Web sites, you may always find latest driver at http://web.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 Smartio/Industio
       family multiport board.

       ISA board
       ---------
       You'll have to configure CAP address, I/O address, Interrupt Vector
       as well as IRQ before installing this driver. Please refer to hardware
       installation procedure in User's Manual before proceed any further.
       Please make sure the JP1 is open after the ISA board is set properly.

       PCI/UPCI 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.

       PCI IRQ Sharing
       -----------
       Each port within the same multiport board shares the same IRQ. Up to
       4 Moxa Smartio/Industio PCI Family multiport boards can be installed
       together on one system and they can share the same IRQ.


   3.2 Driver files

       The driver file may be obtained from ftp, CD-ROM or floppy disk. The
       first step, anyway, is to copy driver file "mxser.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>/mxser.tgz .
       # tar xvfz mxser.tgz


   3.3 Device naming convention

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

       Dialin and callout port
       -----------------------
       This driver remains traditional serial device properties. There are
       two special file name for each serial port. One is dial-in port
       which is named "ttyMxx". For callout port, the naming convention
       is "cumxx".

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

       Board Num.	 Dial-in Port	      Callout port
       1st board	ttyM0  - ttyM7	      cum0  - cum7
       2nd board	ttyM8  - ttyM15       cum8  - cum15
       3rd board	ttyM16 - ttyM23       cum16 - cum23
       4th board	ttyM24 - ttym31       cum24 - cum31


       !!!!!!!!!!!!!!!!!!!! NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       Under Kernel 2.6 the cum Device is Obsolete. So use ttyM*
       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 CAP address of ISA boards.
       For PCI boards, their sequence will be after ISA boards and C168H/PCI
       has higher priority than C104H/PCI 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 "msmknod" 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.7"
             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 "msmknod"

          The procedure is:
	  # cd /moxa/mxser/driver
	  # ./msmknod

          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 30, 35. If
          you need to change to other number, please refer section "3.7"
          for more detailed procedure.
          Msmknod 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.7" section), then you need to do this step again.

          Find "Makefile" in /moxa/mxser, then run

	  # make clean; make install

          !!!!!!!!!! NOTE !!!!!!!!!!!!!!!!!
	  For Red Hat 9, Red Hat Enterprise Linux AS3/ES3/WS3 & Fedora Core1:
	  # make clean; make installsp1

	  For Red Hat Enterprise Linux AS4/ES4/WS4:
	  # make clean; make installsp2
          !!!!!!!!!! NOTE !!!!!!!!!!!!!!!!!

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

       ------------- Load MOXA driver--------------------
       3.4.3 Load the MOXA driver

	  # modprobe mxser <argument>

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


       ------------- Load MOXA driver on boot --------------------
       3.4.4 For the above description, you may manually execute
          "modprobe mxser" to activate this driver and run
	  "rmmod mxser" 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.mxser" file to simplify
          the procedure under "moxa/mxser/driver".

          But if you use ISA board, please modify the "modprobe ..." command
          to add the argument (see "3.4.5" section). After modifying the
          rc.mxser, please try to execute "/moxa/mxser/driver/rc.mxser"
          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/mxser/driver
	  # cp ./rc.mxser /etc/rc.d
	  # cd /etc/rc.d

	  Check "rc.serial" is existed 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.mxser" in last line,

          Reboot and check if moxa.o activated by "lsmod" command.

       3.4.5. If you'd like to drive Smartio/Industio ISA boards in the system,
          you'll have to add parameter to specify CAP address of given
	  board while activating "mxser.o". The format for parameters are
	  as follows.

	  modprobe mxser ioaddr=0x???,0x???,0x???,0x???
				|      |     |	  |
				|      |     |	  +- 4th ISA board
				|      |     +------ 3rd ISA board
				|      +------------ 2nd ISA board
				+------------------- 1st ISA board

   3.5 Static driver configuration for Linux kernel 2.4.x and 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 mxser.c mxser.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/mxser/driver/mxser.c mxser.c

       3.5.3 Add CAP address list for ISA boards. For PCI boards user,
          please skip this step.

	  In module mode, the CAP address 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.
	  The instructions to modify driver source code are as
	  below.
	  a. # cd /moxa/mxser/driver
	     # vi mxser.c
	  b. Find the array mxserBoardCAP[] as below.

	     static int mxserBoardCAP[]
	     = {0x00, 0x00, 0x00, 0x00};

	  c. Change the address within this array using vi. For
	     example, to driver 2 ISA boards with CAP address
	     0x280 and 0x180 as 1st and 2nd board. Just to change
	     the source code as follows.

	     static int mxserBoardCAP[]
	     = {0x280, 0x180, 0x00, 0x00};

       3.5.4 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
          SmartIO support] driver with "[*]" for built-in (not "[M]"), then
          select [Exit] to exit this program.

       3.5.5 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. make install	     /* copy boot image to correct position */
	   f. Please make sure the boot kernel (vmlinuz) is in the
	      correct position.
	   g. 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.6 Make tty device and special file
          # cd /moxa/mxser/driver
          # ./msmknod

       3.5.7 Make utility
	  # cd /moxa/mxser/utility
	  # make clean; make install

       3.5.8 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 "msmknod". First, you have to open "msmknod"
       by vi. Locate each line contains "ttyM" and "cum" and change them
       to the device name you desired. "msmknod" creates the device names
       you need next time executed.

       Change Major number
       -------------------
       If major number 30 and 35 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/mxser/driver/msmknod to create special files with
	  specified major numbers.
       3.6.3 Modify driver with new major number
	  Run vi to open /moxa/mxser/driver/mxser.c. Locate the line
	  contains "MXSERMAJOR". Change the content as below.
	  #define	  MXSERMAJOR		  40
	  #define	  MXSERCUMAJOR		  45
       3.6.4 Run "make clean; make install" in /moxa/mxser/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 msdiag, msmon and
   msterm. These 3 utilities are released in form of source code. They should
   be compiled into executable file and copied into /usr/bin.

   Before using these utilities, please load driver (refer 3.4 & 3.5) and
   make sure you had run the "msmknod" utility.

   msdiag - Diagnostic
   --------------------
   This utility provides the function to display what Moxa Smartio/Industio
   board found by driver in the system.

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

   msterm - 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_shi	  Use  230.4kb	when  the application requests 38.4kb.
   spd_warp	  Use  460.8kb	when  the application requests 38.4kb.
   spd_normal	  Use  38.4kb  when  the application requests 38.4kb.
   spd_cust	  Use  the custom divisor to set the speed when  the
		  application requests 38.4kb.
   divisor	  This option set the custom divison.
   baud_base	  This option set the base baud rate.

-----------------------------------------------------------------------------
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 Smartio/Industio 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: Request_irq fail, IRQ(?) may be conflict with another device.
   Solution:
   Other PCI or ISA devices occupy the assigned IRQ. If you are not sure
   which device causes the situation, please check /proc/interrupts to find
   free IRQ and simply change another free IRQ for Moxa board.

   Error msg: Board #: C1xx Series(CAP=xxx) interrupt number invalid.
   Solution:
   Each port within the same multiport board shares the same IRQ. Please set
   one IRQ (IRQ doesn't equal to zero) for one Moxa board.

   Error msg: No interrupt vector be set for Moxa ISA board(CAP=xxx).
   Solution:
   Moxa ISA board needs an interrupt vector.Please refer to user's manual
   "Hardware Installation" chapter to set interrupt vector.

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

   Error msg: Couldn't install MOXA Smartio/Industio 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.7 to
   change a free callout device major number for Moxa driver.


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

