COHERENT manpages

This page displays the COHERENT manpage for asy [Device driver for asynchronous serial lines].

List of available manpages
Index


asy -- Device Driver

Device driver for asynchronous serial lines

The device driver asy supports serial ports.  It uses major number 5.

asy can handle  from one to 32 serial ports.   The ports can be any mixture
of 8250, 8250B, 16550, 16550A, and equivalent devices, including nearly all
conventional  COM1  through COM4  serial  cards,  and most  non-intelligent
multiport  add-in cards.   It automatically  recognizes, and  uses, on-chip
FIFO, and  it can  specify groups  of ports that  share a  single interrupt
status.

Types of Port Configuration

Each port that asy serves has  a base name, e.g.,  /dev/com1r. Each has its
own minor device number.  Different configurations of the port are selected
by using different suffixes, as follows:

l  (Local) ``Local mode'' means that  the line will have a terminal plugged
   into it, or is connected to a modem running in command mode.  Local mode
   uses the minor device with the modem-control bit (bit 7) set.

r  (Remote) ``Modem control'' means that the line will have a modem plugged
   into it.   Modem control is  enabled on a  serial line by  resetting the
   modem control  bit (bit  7) in  the minor number  for the  device.  This
   allows the  system to generate a hangup signal  when the modem indicates
   loss of  carrier by  dropping DCD (Data  Carrier Detect).  A  modem line
   should  always  have its  DSR,  DCD  and CTS  pins  connected.  If  left
   hanging,  spurious transitions  can cause  severe system  thrashing.  An
   open() to  a modem-control line  will block until a  carrier is detected
   (i.e., until DCD goes true).

p  (Polled mode)  ``Polled mode''  means that  the port cannot  generate an
   interrupt, but  must be checked  (or polled) constantly  by the COHERENT
   system to  see if  activity has  occurred on it.   Such polling  takes a
   significant toll on  system performance.  The main reason for supporting
   polled devices  is that  older style COM  equipment will not  allow both
   com1 and com3 to use interrupts at the same time, nor will it allow both
   com2 and com4 to use interrupts  at the same time.  If you use a port in
   polled mode, you will get better performance using one of the newer FIFO
   parts, such as the 16550A.

   To convert from using a polled  to an interrupt driven device, edit file
   /etc/ttys and then type the command:

       kill quit 1

   For details, see the Lexicon entry for ttys.

f  (Flow control)  A device with  hardware flow control.   Here, signal CTS
   must be active for the driver  to send data out the port, and signal RTS
   will be set  active by the driver whenever it  is ready for input.  Some
   high-speed modems, and some  serial printers, are capable of using these
   conventions.  If  your equipment  does not support  RTS/CTS handshaking,
   there is no benefit to using this option.

Due to limitations in the design of the ports, you can enable interrupts on
either COM1 or COM3 (or on COM2 or COM4), but not both.  If you wish to use
both ports simultaneously, one must be run in polled mode.  For example, if
you wish  to open all four  serial lines, you can open two  of the lines in
interrupt mode: you can open either COM1 or COM3 in interrupt mode, and you
can open either  COM2 or COM4 in interrupt mode.   The other two lines must
be opened in polled mode.

Opening a  device in polled mode  consumes many CPU cycles,  based upon the
speed of the highest baud rate  requested.  For example, on a 20 MHz 80386-
based machine, polling  at 9600-baud was found to consume  about 15% of the
CPU time.  As only one device can use the interrupt line at any given time,
the best  approach is  to make  the high-speed line  of the  pair interrupt
driven and open the low-speed  or less-frequently used line in polled mode.
However, if you enable a polled  line for logins, the port is open and will
be polled as long as the port remains open (enabled).  Thus, even if a port
is not in use, the fact  that it has a getty on it consumes CPU cycles.  As
a rule of thumb, try to  open a port in interrupt mode.  If you cannot, use
the polled version.

If you intend to use a  modem on your serial port, you must insure that the
DCD signal  from the  modem actually follows  the state of  carrier detect.
Some modems allow the user to ``strap'' or set the DCD signal so that it is
always asserted (true).  This  incorrect setup will cause COHERENT to think
that the  modem is ``connected'' to  a remote modem, even  when there is no
such connection.

There are eight possible  configurations, and eight valid suffixes.  In the
example of  the port whose base  name is com1, the  configurations would be
found  in  the  directory  /dev  as  /dev/com1l,  /dev/com1r,  /dev/com1pl,
/dev/com1pr, /dev/com1fl, /dev/com1fr, /dev/com1fpl, and /dev/com1fpr.

Driver Configuration

asy is usually configured -- and proper names are created in directory /dev
-- when you install COHERENT.  The following explains how to configure asy,
in case you must modify the original installation.

To configure asy, do the following:

1. Type the following command to become the superuser root:

       su root

2. Change to directory /etc/conf.

3. Execute script  asy/mkdev. This script walks you  through the process of
   describing your serial ports to COHERENT.

4. When you have successfully completed asy/mkdev, type the command:

       bin/idmkcoh -o cohtest

   This  generates a  new kernel,  called  cohtest, which  incorporates the
   changes you described when you ran asy/mkdev.

5. Boot  your new kernel.   If you  do not  know how to  do this,  read the
   Lexicon entry booting.

Editing /etc/default/async

The first  step in  reconfiguring asy  is to edit  /etc/default/async. This
file holds the description of how the asy driver is to be configured.

asy ignores blank lines and lines that begin with a pound sign `#'; you can
use them  as comments if you  wish.  Each port that is not  in a group must
have a line beginning with the letter `P', followed by seven numbers:

-> The hexadecimal base address for the port.

-> The IRQ number,  in decimal, used by the port  (use zero if no interrupt
   line is needed).

-> The hexadecimal value used for control lines OUT1 and OUT2 when the port
   is open.  Permissible values are 0,  4, 8, and C.  Use 4 if OUT1 must be
   asserted, 8 if OUT2 must be  asserted, and C if both signals are needed.
   The most common value needed in this field is 8.

-> One if  the port  needs exclusive  use of its  interrupt line  (true for
   conventional COM1/COM4 equipment), zero otherwise.

-> Default baud rate for the port.

-> Channel number for the port (0-31).

-> A flag  to indicate  if modem-status interrupts  are to be  disabled for
   this board: one if they are to be disabled, zero if they are not.

The last field is required because some chips are defective and lock up the
system  if modem  status interrupts  are enabled.   This flag  protects you
against such problems, but at the price of disabling hardware flow control.

Many multiport  boards support a separate  I/O address that can  be read to
determine which port  requires service.  Each group of up  to 16 ports must
have a  line beginning  with the  letter `G', followed  by a  separate line
describing each port in the group.  There are four different group types:

1. Bits  in the  status  port are  one  when the  corresponding port  needs
   service, zero  otherwise.  (Sealevel, Comtrol, Star  Gate, Connect Tech,
   Boca Research.)

2. Bits  in the  status port  are  zero when  the corresponding  port needs
   service, one otherwise.  (Arnet.)

3. The low three  bits in the status port give  the slot number on the card
   for the port needing service.  (GTEK.)

4. The low  four bits in the  status port give the slot  number on the card
   for the port reading service.  If no port needs service, the status port
   contains hexadecimal value FF.  (Digiboard.)

The `G' line requires the following  fields.  All are in decimal, except as
noted:

-> The hexadecimal address for the group-status port.

-> The IRQ  number used  by the  group.  Use zero  if no interrupt  line is
   needed.

-> The hexadecimal value used for control lines OUT1 and OUT2 when the port
   is open (usually eight).

-> The type number of the group -- one, two, or three, as described above.

-> The number of ports in the group, 1 through 16.

-> A flag  to indicate  if modem-status interrupts  are to be  disabled for
   this board: one if they are to be disabled, zero if they are not.

Each group line  is followed by a separate `M'  line for each member of the
group.  Fields required on the `M' line (in decimal, except as noted) are:

-> The hexadecimal base address for the port.

-> Default baud rate for the port.

-> The slot  number of the  port within the  group 0 through  7.  For group
   types 1 and  2, slot 0 corresponds to the  least-order bit in the status
   port, slot 7 to the highest order bit.

-> Channel number for the port (0-31).

The following gives the async file  for a system with standard COM1 through
COM4 ports as channels 0 through  3, a Comtrol Hostess 550/16 as channels 4
through 19, and finally an Arnet Multiport as channels 20 through 27.

# /etc/default/async spec for standard com1-com4
#Record formats:
#P     Port   Irq    OUT[12]       Excl   Speed   ChannelNo MS int
#G     Port   Irq    OUT[12]       Type   Number-of-SlotsNo MS int
#M     Port   Speed  Slot   Channel

# com1/2/3/4
P      3f8    4      8      1      9600   0  0
P      2f8    3      8      1      9600   1  0
P      3e8    4      8      1      9600   2  0
P      2e8    3      8      1      9600   3  0

# Hostess 550 16 - two groups of 8 ports, using irq 12
G      507    12     8      1      8      0
M      500    9600   0      4
M      508    9600   1      5
M      510    9600   2      6
M      518    9600   3      7
M      520    9600   4      8
M      528    9600   5      9
M      530    9600   6      10
M      538    9600   7      11

G      547    12     8      1      8      0
M      540    9600   0      12
M      548    9600   1      13
M      550    9600   2      14
M      558    9600   3      15
M      560    9600   4      16
M      568    9600   5      17
M      570    9600   6      18
M      578    9600   7      19

# Arnet Multiport - one group of 8 ports, using irq 7
G      272    7      0      2      8      0
M      280    9600   0      20
M      288    9600   1      21
M      290    9600   2      22
M      298    9600   3      23
M      2A0    9600   4      24
M      2A8    9600   5      25
M      2B0    9600   6      26
M      2B8    9600   7      27

You should  look at the version of /etc/default/async  that is shipped with
COHERENT  for examples  of all  async  features, including  those described
above.  This file includes  sample configurations for every board that Mark
Williams Company had available for testing.

Building a New Kernel

Now that  you have described  how you want  asy to be  configured, the next
step is  to build a new  kernel.  Log in as the  superuser root and execute
the following commands:

    cd /etc/conf
    asy/mkdev
    bin/idmkcoh -o /kernel_name

where kernel_name is  the new kernel that includes the  asy driver.  To run
this new kernel, simply reboot your machine.

See Also

asymkdev,
device drivers,
RS-232

Notes

If your  system loses  characters while  transferring files on  4800-bps or
higher-speed lines, we strongly urge  you to replace your existing 8250- or
16450-based  UARTs with  those based  upon the 16550A  design, such  as the
National  Semiconductor NS16550AFN.  These  newer UARTs  are pin-compatible
with the older UARTs.   COHERENT automatically senses and enables them when
it boots.