Ref: 08260005
Title: Disabling DMA on Adapters for Windows 3.0 Enhanced Mode
Date: 3/20/91

Copyright 3Com Corporation, 1991.  All rights reserved.

This note explains how 3Com's network adapter drivers must disable
DMA operation (to enable processor I/O) so that Windows 3.0 can run on
a 80386 processor in Enhanced mode.

Microsoft Windows 3.0 has three modes of operation:  real, standard, and
enhanced.  Only enhanced mode uses the Virtual 8086 capability of the
80386 processor.  When the 80386 is running in this virtual mode, all
memory and I/O access is intercepted and translated from virtual
addresses to real, physical addresses by the processor hardware and/or
the operating system.

DMA access is a special case of this translation.  Current 3Com drivers
(as well as the drivers of most other vendors) are real mode.  They think
that the address of a data buffer is the real physical address in memory.
Under DOS and under real and standard mode Windows, this is true.  But in
Windows enhanced mode, the physical address could be anywhere in the 16 MB
range of memory.  So, Windows must convert address values from virtual to
physical when the driver attempts to program the DMA chip.

However, while Windows 3.0 enhanced mode is loading and initializing, the
capability to convert virtual address values to physical addresses is not
available.  Drivers that attempt to perform DMA at this time will likely
fail, including most of 3Com's adapter drivers.  Instead, the drivers must
be configured to use programmed I/O or repeat string move or I/O.

Each adapter has two methods to disable DMA, depending on whether
the MINDS (ETH) driver or NDIS driver is being used.  Following are the
instructions on how to do this.

Note:  All configurations are set by modifying text files (no hardware
changes are required), and are activated when you reboot the system.


HOW TO DISABLE DMA FOR ADAPTERS USING MINDS DRIVERS
---------------------------------------------------
Make sure you have the most current version of the MINDS drivers, which
are contained in 3+ 1.6.

AdapterHow to Disable DMA (MINDS drivers only)
----------------------------------------------------
EtherLink,Edit the CONFIG.SYS file.  On the DEVICE=
EtherLink II: ETHxxx.SYS <int> <I/O> <DMA> line, add or set
the fourth parameter to 4 (for 80286/386/486
machines only).
For example:  DEVICE = ETH503.SYS 3 300 1 4

Host-based EtherLink    Edit the CONFIG.SYS file.  On the DEVICE=
Plus:ETH505.SYS <int> <I/O> <DMA> line, add or set the
fourth parameter to 2.
For example:  DEVICE = ETH505.SYS 3 300 1 2

Host-based TokenLinkThis driver does not support disabling DMA.
Plus:Because this adapter has been obsoleted, there are
no plans to update the driver to do so.

LPO EtherLink Plus,     Edit the CONFIG.SYS file.  On the DEVICE=
LPO TokenLink Plus:     PSH.SYS <int> <I/O> <DMA> line, add or set
the fourth parameter to 2.
For example:  DEVICE = PSH.SYS 3 300 5 2

EtherLink/MC,The Etherlink/MC and Etherlink 16 never use
EtherLink 16:DMA.  No changes are required.

TokenLink:Edit the CONFIG.SYS file.  On the DEVICE=
TOK603.SYS <int> <I/O> <DMA> line, set the
third parameter to a value of 0.
For example:  DEVICE = TOK603.SYS 3 300 0


HOW TO DISABLE DMA FOR ADAPTERS USING NDIS DRIVERS
---------------------------------------------------
Make sure you have the most current version of the NDIS drivers, which
are contained in the 3+Open 1.1 Maintenance Upgrade.

AdapterHow to Disable DMA (NDIS drivers only)
----------------------------------------------------
EtherLink: Edit the PROTOCOL.INI file.  In the section for
this adapter, change the line for DMAChannel to
read:  DMACHANNEL =(There should be nothing
to the right of the "=" sign.)

EtherLink II, Host-Edit the PROTOCOL.INI file.  Change the section
based EtherLink Plus,   for the adapter, so it contains the line:
Host-based TokenLink    DATATRANSFER = PIO_WORD".  For example:
Plus:
[ETHERLINK_PLUS]
drivername = ELNKPL$
interrupt = 3
IOAddress = 0x300
DMAChannel = 5
Datatransfer = PIO_WORD

LPO EtherLink Plus,There is no NDIS driver for an LPO configuration.
LPO TokenLink Plus:

EtherLink/MC,The Etherlink/MC and Etherlink 16 never use
EtherLink 16:DMA.  No changes are required.

TokenLink:Edit the PROTOCOL.INI file.  Change the section
for the adapter, on the line for DMAChannel, to
read:  DMACHANNEL = 0

