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.


.lt
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.

Adapter			How 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 TokenLink	This 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.

Adapter			How 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
.el

