USING THE XLN2X5 MAC DRIVER WITHOUT
THE PROTOCOL MANAGER
Steve Dauber
Excelan, Inc.
November 29,1988
1. Introduction
The Excelan XLN2x5 MAC driver may be used in two modes. The first
mode, in which the driver is used with Microsoft Lan Manager, is
described in the XLN2x5 MAC Driver User Guide. The MAC driver
(versions 1.4 and greater) may also be used as a standalone link
level interface to the Excelan board. In this mode, the MAC does
not require the protocol manager. It implements separate
mechanisms for obtaining its parameters and for binding to the
higher level protocols.
2. Driver Installation
The driver is installed using a "device=" line in the config.sys
(or config.os2) file. The syntax is:
device=[d:][path]drivername [drivernum] [parameter...]
d: is the disk on which the driver can be found.
path is the path to the driver.
drivername is the filename of the driver (either
xln2x5.dos or xln2x5.os2).
drivernum is the optional driver number.
parameters are used only when the driver is to be used
in standalone mode. They are described more fully
below.
Note that the "device=" line for the XLN2x5 driver must appear
before the "device=" line for any driver which will use it in
standalone mode.
1
2.1. Driver Number
The driver number allows the user to have multiple Excelan boards
in the same machine. If not specified, it defaults to 1. If
multiple boards are installed, each must have a different driver
number.
2.2. Parameters
If the driver is to be used in standalone mode, its hardware
parameters must be specified on the command line. If no
parameters are specified, the driver will assume it is being used
with the protocol manager. If any parameter is specified, the
driver will assume it is in standalone mode. The order in which
the parameters are given is irrelevant.
The following sections describe the parameters used by the
driver. To designate numerical parameters, xxx will be used. The
user may specify either a decimal integer or a hexadecimal
integer starting with the characters 0x (eg. 0xCC000).
2.2.1. Parameters used for all boards
BoardName: This gives the type of board being used. This should
be specified as EXOS_205, EXOS_215, or EXOS_225. This parameter
is mandatory for all boards.
MaxMCast: This gives the maximum number of multicast addresses
allowed at any one time. It is specified as Cxxx. This parameter
is optional, and defaults to 5 if not given.
Loopback: This enables software loopback of packets which should
be self received (see below). It is specified by placing the
parameter L on the command line.
2.2.2. Parameters used by the EXOS 205 and EXOS 225 Boards
The following parameters are mandatory when the EXOS205 or
EXOS225 board is to be used. For information on parameter values,
the hardware manual for your board should be consulted.
IOBase: This gives the base I/O address of the board. It is
specified as Ixxx.
MemBase: This gives the physical address of the board's window in
host memory. It is specified as Mxxx.
MemSize: This gives the size of board memory in kilobytes. It is
specified as Zxxx.
Signal: This gives the interrupt level of the board. It is
specified as Sxxx.
2
2.2.3. Parameters used by the EXOS 215 Board
Slot: This gives the microchannel slot number of the board. It is
specified as Txxx. This parameter is only mandatory if more than
one EXOS 215 board is to be used in the computer. If it is not
given, the driver will scan the microchannel slots until it finds
an EXOS 215 board.
2.3. Example config.sys line
The following is an example config.sys line for the EXOS 205T
board. The parameters used are for the default jumper settings of
the board. Items in bold face are optional and were included
just for the completeness of the example.
device=c:\xln\xln2x5.dos 1 EXOS_205 I0x310 M0xCC000 Z256 S2 L C5
3. Binding to the XLN2x5 MAC Driver
3.1. Introduction
Under Lan Manager, binding is accomplished with the aid of the
protocol manager. At initialization time, each module registers
itself with the protocol manager, passing a far pointer to its
Common Characteristics table and a list of modules to which it
wishes to bind. At bind time, the protocol manager calls each
module in turn, passing the address of the Common Characteristics
table of the module to which it should bind. The binding module
then extracts the vector of the System routine from the
characteristics table, and makes a bind call to the other module.
In order to bind without the aid of the protocol manager, the
XLN2x5 MAC driver implements an IOCTL call which returns the
address of its Common Characteristics table. The binding driver
can then use this address to complete the bind in the same way as
it would if running under Lan Manager.
The binding driver must first open the MAC driver in order to
obtain the handle required by the IOCTL call. The device name of
the MAC driver is "XLN2X5?$", where ? is the driver number
specified on the command line in config.sys. If no number was
given, 1 should be used.
3
3.2. Binding under DOS
The address of the Common Characteristics table may be obtained
using the Device Read IOCTL call. This IOCTL should be requested
using Interrupt 21 with the registers loaded with the following
values:
AH = 44H for IOCTL request
AL = 02H for device read
DS:DX = Pointer to 4 byte buffer
CX = 4 for the size of the buffer
BX = Handle from the DOS open of "XLN2X5?$"
Upon successful return, the buffer will contain a far pointer to
the Common Characteristics table of the XLN2x5 MAC driver. The
binding driver may then make the bind call to the MAC whenever it
is ready.
Note that if the binding entity is an installed device driver,
the IOCTL call is only available at initialization time.
4
3.2.1. Example of DOS binding
.DATA
macdev db 'XLN2X51$',0 ;name of MAC driver
filehandle dw ? ;handle for opening
driver
MacCommChar dd ? ;address of MAC's table
.CODE
GetCommChar PROC NEAR
;open the MAC driver
mov ah,3dh ;command code
mov al,40h ;Deny None, Read Only
mov dx, OFFSET macdev ;device name
int 21h
jnc @F ;check for error
jmp error
@@: mov filehandle,ax
;get pointer to common characteristics table
mov ah,44h ;IOCTL req
mov al,02h ;device input
mov dx,OFFSET MacCommChar ;pointer to buffer
mov cx,4 ;size of buffer
mov bx,filehandle
int 21h ;call DOS
jnc @F ;check for error
jmp error
@@: ret
GetCommChar ENDP
5
3.3. Binding under OS/2
The address of the Common Characteristics table may be obtained
using the OS/2 IOCTL function. This IOCTL has the following
IOCTL request packet parameters:
1. Block Device Unit Code: Undefined since the MAC driver is a
character device.
2. Command Code: 16 for Generic IOCTL
3. Status: This field will contain the status of the request upon
return.
4. Category code: 82h
5. Function code: 41h
6. Parameter buffer: Unused. Should be set to NULL.
7. Data buffer: Pointer to 4 byte buffer.
Upon successful return, the data buffer will contain a far
pointer to the Common Characteristics table of the XLN2x5 MAC
driver.
Under OS/2, the IOCTL call must be made at driver initialization
time. However, the driver can only bind to the MAC when it is
running at Ring 0 ie. after initialization has completed. The
binding driver must thus have some external mechanism by which it
regains control after initialization time in order to make the
bind call to the MAC.
6
3.3.1. Example of OS/2 Binding
.DATA
MacCommChar dd ? ;address of MAC's table
filehandle dw ? ;handle for opening
driver
action dw ? ;used by DOSOPEN
macdev db 'XLN2X51$',0 ;name of MAC driver
.CODE
EXTRN DOSOPEN:FAR, DOSDEVIOCTL:FAR, DOSPUTMESSAGE:FAR
GetCommChar PROC NEAR
;open the MAC driver
push ds ;pointer to device name
push OFFSET macdev
push ds ;pointer to file handle
push OFFSET filehandle
push ds ;pointer to action
push OFFSET action
push WORD PTR 0 ;size
push WORD PTR 0
push WORD PTR READONLY_FILE ;file attribute
push WORD PTR (NOTEXIST_FAIL OR EXIST_OPEN) ;open flag
push WORD PTR (DENY_NONE OR READ_ONLY) ;open mode
push WORD PTR 0 ;reserved
push WORD PTR 0
call DOSOPEN
cmp ax,0 ;open ok?
je @F
jmp error
@@: push ds ;pointer to data buffer
push OFFSET MacCommChar
push WORD PTR 0 ;pointer to param area
push WORD PTR 0
push 41h ;function
push 82h ;category
push filehandle ;device handle
call DOSDEVIOCTL
cmp ax,0 ;IOCTL ok?
je @F
jmp error
@@: ret
GetCommChar ENDP
7
4. Driver Description
The XLN2x5 MAC driver fully conforms to the Lan Manager Network
Driver Interface Specification, Version 1.0.1 (NDIS). This
document will not duplicate the information of the NDIS.
The following sections document design decisions and additional
features of the XLN2x5 driver which may be useful to those
designing software which use it.
4.1. Interrupts
The board interrupts the host to indicate reception of a packet
or completion of a request. For the EXOS 215 board, interrupt
level sharing is completely supported under DOS and OS/2.
The PC architecture causes interrupt level 2 to be mapped to
interrupt level 9. The driver takes care of this mapping, so two
may be specified as the interrupt level of the board.
4.2. Packet Reception
The driver passes received packets to the higher protocol layers
by using the ReceiveLookahead/TransferData mechanism. The
complete packet will always be available at the time
ReceiveLookahead is called.
4.3. Loopback
Loopback of packets which should be self-received is not
supported by the hardware. By default, the MAC driver will not
support this loopback in software. This loopback should be
supported by higher layers of the protocol.
In some cases, loopback at the MAC layer may be necessary (if a
protocol stack does not support loopback, for example). MAC layer
loopback may be enabled by including the Loopback flag on the
command line. Note that enabling loopback will decrease
performance to some extent, and thus it should not be enabled
unless it is required.
8
4.4. General Requests
All general requests are executed asynchronously. RequestConfirm
is called when the requests complete. The following general
requests are supported.
SetStationAddress
OpenAdaptor
CloseAdaptor
SetPacketFilter
AddMulticastAddress
DeleteMulticastAddress
UpdateStatistics
ClearStatistics
SetLookahead
4.5. Statistics
The number of statistics kept is limited in order to improve
performance. Only the following statistics are kept:
Total frames received
Frames with CRC error
Total bytes received
Frames discarded - no buffer space
Frames received with errors
Total frames transmitted
Total bytes transmitted
Frames not transmitted - timeout
Frames not transmitted - hardware error
Frames with alignment error
Frames not sent - too many collisions
Transmit error mask
9