home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ddkx86v5.zip
/
DDKX86
/
SRC
/
DEV
/
ATCOM
/
COM01.DOC
< prev
next >
Wrap
Text File
|
1995-04-10
|
6KB
|
124 lines
.*; SCCSID =
.se os2 = 'OS/2'
.se comp = 'COM01'
.*.us 1
.*.ce &comp. Component
:h3.&comp. Architecture
:h4.Problem Description/Objectives
:p.
The family1 asynchronous communications port device driver
should provide support for some of the capabilities of the new
Extended ISA (EISA) systems that are becoming available to OS/2 users.
The specific areas that need to be addressed are support for
more than two COM ports, and interrupt sharing.
:p.
The majority of the code added will be used at initialization time
to parse the EISA system's configuration information to determine
if the system has any extended capabilities that need to be supported.
There will be NO IMPACT on compatibility for AT-class machines; the
new code will never be executed when run on an AT-class machine.
:h4.Solutions/Justification
:p.
COM01.SYS was originally written to support AT-class machines only. As
such, it only needed to support the two COM ports that were originally
designed for the AT. EISA systems, with their expanded I/O space and an
ability to share interrupt lines, are a good deal more flexible. The
user is allowed to configure the system to match their needs. On many
of the EISA systems that are available, COM ports have been built
in to the system's motherboard. If the user adds an ISA compatible
COM port, they can then re-configure one of the motherboard's
COM ports to be COM3. OS/2 should provide support for this type of
configuration: the user should have access to COM ports beyond COM2
for OS/2 applications.
:p.
Another configurable parameter on EISA machines is the sharing of interrupt
lines. On some of the EISA systems that provide COM ports, the COM ports can
be configured to share their interrupt line. This is mostly useful in server
environments, where a large number of hardware adapters are added to the
system. OS/2's COM driver should support the sharing of a COM port's
interrupt line; this will allow the user more flexibility in the
configuration of an EISA system that will be running OS/2.
:h4.Architectural Review
To be performed.
:h3.&comp. Design
:h4.Design Overview
:p.
The maximum number of COM ports supported on an EISA machine will be four.
Code will be added to parse the EISA system configuration information
at device driver install time to determine the COM port configuration.
A small amount of additional code will be added to the interrupt service
routine for support of any shared interrupt lines.
:p.
A small amount of code will be added to OS2LDR. This code will make
sure that the return value from the DosDevConfig API contains the
correct number of asynchronous COM ports attached to an EISA system.
:h4.Data Structures Description
To be added.
:h4.Exported Interfaces
To be added.
:h4.Imported Interfaces
To be added.
:h4.Design Constraints
To be added.
:h4.Design Review
To be performed.
:h3.&comp. Implementation
:h4.Internal Interfaces
To be added.
:h4.Implementation
:p.
Two new device headers will be added to the COM01.SYS driver: COM3 and
COM4. Minor changes will be needed in a few places to accomodate
these additional devices; this mostly consists of making the code
table driven as opposed to 'if not COM1 then assume COM2'.
:p.
A new module will be added to COM01.SYS for use at device driver
installation time. The existing initialization code will call
a function within this module once, to set up any EISA configuration
information. If not running on an EISA system, the new code will
simply set a flag indicating a non-EISA system and then return. If
running on an EISA system, the EISA system's configuration information will
be searched for COM port information. This information will be stored
in a table.
:p.
When running on an EISA system, as each of the COM device driver's
headers is initialized, this table of information will be used to
initialize the COM driver's data structure for the port. The following
items will be saved in the COM driver's data structure: the port address,
the interrupt line, and whether or not the interrupt line is to be
shared.
:p.
A modification will be made to the interrupt service routine.
A check will be made to see if the COM port causing the interrupt
supports interrupt sharing or not. If it does, then the UART's
Interrupt ID register is read; if it indicates that there is no pending
interrupt, then the driver immediately returns control to the kernel,
with an indication that the interrupt was not from the COM port. Note
that this code will NOT affect the operation of the interrupt service
routine when running on an AT-class system, since interrupt sharing
is NEVER supported on AT-class systems.
:p.
The modification made to OS2LDR will be in the module DOSHLP.ASM. The
current code is already parsing the EISA system configuration information
to determine the "sharing" status of the interrupt lines. This code would
be modified to also count the number of asynchronous COM ports in the
system. This value will be returned to the kernel via DHConfig.
:h4.Implementation Review
To be performed.
:h3.&comp. Appendix (included for each review)
:h4.Glossary
To be added.
:h4.Size and Performance Considerations
:p.
Interrupt sharing can have an affect on COM port throughput. If the
user chooses to share a COM port's interrupt line with another device
that generates a high number of interrupts, COM performance can be
expected to suffer. This is a system configuration issue, however,
not an OS/2 issue.