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:
- ll
- (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.
- rr
- (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).
- pp
- (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.
- ff
- (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 _f_o_l_l_o_w_s
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 //ddeevv -- 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:
- 11..
- Type the following command to become the superuser
root:
su root
- 22..
- Change to directory /etc/conf.
- 33..
- Execute script asy/mkdev. This script
walks you through the process of describing your serial
ports to COHERENT.
- 44..
- 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.
- 55..
- 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:
- +o
- The hexadecimal base address for the port.
- +o
- The IRQ number, in decimal, used by the port (use zero
if no interrupt line is needed).
- +o
- 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.
- +o
- One if the port needs exclusive use of its interrupt
line (true for conventional COM1/COM4 equipment), zero
otherwise.
- +o
- Default baud rate for the port.
- +o
- Channel number for the port (0-31).
- +o
- 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:
- 11..
- Bits in the status port are one when the corresponding
port needs service, zero otherwise. (Sealevel, Comtrol,
Star Gate, Connect Tech, Boca Research.)
- 22..
- Bits in the status port are zero when the corresponding
port needs service, one otherwise. (Arnet.)
- 33..
- The low three bits in the status port give the slot
number on the card for the port needing service. (GTEK.)
- 44..
- 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:
- +o
- The hexadecimal address for the group-status port.
- +o
- The IRQ number used by the group. Use zero if no
interrupt line is needed.
- +o
- The hexadecimal value used for control lines OUT1 and
OUT2 when the port is open (usually eight).
- +o
- The type number of the group -- one, two, or three, as
described above.
- +o
- The number of ports in the group, 1 through 16.
- +o
- 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:
- +o
- The hexadecimal base address for the port.
- +o
- Default baud rate for the port.
- +o
- 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.
- +o
- 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 /_k_e_r_n_e_l___n_a_m_e
where kernel_name is the new kernel that includes
the asy driver. To run this new kernel,
simply reboot your machine.
See Also
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.