|
|
coherent
ccoomm -- Device Driver
The COHERENT 286 system supports four asynchronous serial lines, ccoomm11
through ccoomm44, via device drivers aall00 and aall11. The COHERENT 386 system uses
device driver aassyy to control up to 32 serial lines. See their respective
Lexicon entries for further details. Note that the rest of this article
applies to COHERENT 286.
A serial line can be opened into any of four different ``flavors'', as
follows:
ccoomm?ll Interrupt driven, local mode (no modem control)
ccoomm?rr Interrupt driven, remote mode (modem control)
ccoomm?ppll Polled, local mode (no modem control)
ccoomm?pprr Polled, remote mode (modem control)
``Local mode'' means that the line will have a terminal plugged into it, to
directly access the computer. ``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. To disable modem control on
a given serial line, use the minor device which has the modem control bit
set (bit 7). An ooppeenn to a modem-control line will block until a carrier is
detected (DCD goes true).
``Interrupt mode'' means that the port can generate an interrupt to attract
the attention of the COHERENT system; ``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.
The COHERENT 286 system uses two device drivers to manage serial lines: aall00
manages COM1 and COM3, and aall11 manages COM2 and COM4. 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 ggeettttyy on it consumes CPU cycles. As
a rule of thumb, try and open a port in interrupt mode. If you cannot, use
the polled version. Also note that use of any of the four serial ports in
polled mode prevents other polled serial device drivers, such as the hhss
generic multi-port polled serial driver, from being used at the same time.
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.
In addition, if you wish to allow remote logins to your COHERENT system via
your modem, you must insure that the modem does _n_o_t echo any commands or
status information. Failure to do so will result in severe system
thrashing due to the ggeettttyy or llooggiinn processes endlessly ``talking'' to your
modem.
_C_h_a_n_g_i_n_g _D_e_f_a_u_l_t _P_o_r_t _S_p_e_e_d_s
Serial lines ccoomm11 through ccoomm44 default to 9600 baud when opened. This
default speed can be permanently changed on a ``per port'' basis by
changing the value of driver variables CC11BBAAUUDD, CC22BBAAUUDD, CC33BBAAUUDD or CC44BBAAUUDD.
The list of acceptible values can be found in header file <ssggttttyy.hh> and
range from 1, corresponding to 50 baud, up to 17, which corresponds to
19,200 baud. For a table of legal baud rates, see the Lexicon entry for
ssggttttyy.hh.
To change the default value for a port, you must use the /ccoonnff/ppaattcchh
command. For example, to change the default speed for port ccoomm22 to 2400
baud, enter the following command while running as the superuser:
/conf/patch /drv/al1 C2BAUD_=12
The change will not take effect until the next time that you boot your
system.
_L_o_a_d_i_n_g _a _D_r_i_v_e_r
COHERENT 286 version 3.2 and later implements all COM drivers as loadable
drivers. This was done to save space within the kernel, and to let you
configure your system as you prefer. COHERENT 386 version 4.0 links all
COM drivers into the kernel. The rest of this section applies to users of
COHERENT 286, versions 3.2 and later. It does _n_o_t apply to any release of
COHERENT prior to version 3.2.
To load a COM driver, you must use the command ddrrvvlldd to load the
appropriate aall device. As noted above, drivers ccoomm11 and ccoomm33 are
controlled by device aall00, and drivers ccoomm22 and ccoomm44 by aall11. For example, to
load aall00 use the command:
/etc/drvld /drv/al0
To remove a COM driver, first type the command
ps -d
and note the process identifier of the COM driver you want to remove.
Then, become the superuser rroooott and type the command
kill -9 _x_x_x_x
where _x_x_x_x is the process identifier for the COM driver.
Note that aall00 is in directory /ddrrvv, _n_o_t /ddeevv.
If you are going to load certain drivers regularly, be sure to write the
appropriate ddrrvvlldd command into system file /eettcc/ddrrvvlldd.aallll.
_S_e_e _A_l_s_o
ccoomm11, ccoomm22, ccoomm33, ccoomm44, ddeevviiccee ddrriivveerrss, ddrrvvlldd
_D_i_a_g_n_o_s_t_i_c_s
An attempt to open a non-existent device will generate error messages.
This can occur if hardware is absent or not turned on.
_N_o_t_e_s
The ccoomm family of devices apply only to COHERENT 286. To access a serial
port under COHERENT 386, use the driver aassyy, which is described in its own
Lexicon entry.
The ccoomm* series of devices are not compatible with the iiooccttll() parameters
defined in header file <tteerrmmiioo.hh>. Be sure to include header file <ssggttttyy.hh>
if you wish to perform terminal specific iiooccttll() calls.
In the current version of these drivers, the following sequence of steps
results in a panic:
enable com4pl
enable com3pl
disable com4pl
kill kill <al1 driver process id>
The key is that the driver containing the polling routine cannot be
unloaded if the other driver is still polling.
Note, too, that if any ccoomm device driver is used in polling mode, the hhss
driver cannot be used, and vice versa.
Source for these device drivers, is provided in with the driver kit, in
source files aall.cc, aallbbaauudd.cc, and aallxx.cc. In the production releases of
COHERENT 4.0.0 and later, these devices are supplanted by device driver
aassyy.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.