home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MS-DOS 8.0
/
MS-DOS8.iso
/
SOFTWARE
/
QEMM
/
TECHNOTE
/
BUS-MAST.TEC
next >
Wrap
Text File
|
1997-05-15
|
16KB
|
305 lines
Using SCSI and Bus-Mastering Devices
Quarterdeck Technical Note #121 Filename: BUS-MAST.TEC
by Quarterdeck Technical Support CompuServe: BUSMAS.TEC
Last revised: 3/28/95 Category: HW
Subject: This note provides troubleshooting tips for users of
bus-mastering (typically SCSI) hard drives, and explains
bus-mastering technology in general for those who are
interested.
Note: All references to 386 computers or to the 80386 processor,
unless otherwise stated, refer to 386 and higher processors.
This note is divided into two parts -- a troubleshooting section
for those who believe that they are having problems with QEMM and
a SCSI hard drive, and an informational section on bus-mastering
issues.
Refer to the troubleshooting section of the QEMM manual, or in the
technical note QEMM GENERAL TROUBLESHOOTING (TROUBLE.TEC) for
instructions on how to boot your machine without QEMM.
1) If your machine locks immediately after posting the banner for
QEMM386, check to see if the DB=2 parameter is on the
QEMM386.SYS line in CONFIG.SYS. If this parameter is not
present, add it. If your machine now works, you're done, and
you may read the information section below. If your machine
still fails, continue with Step 2.
2) Add the parameter VDS:N to the QEMM line, and reboot. If this
solves your problem, proceed to Step 3.
3) Remove VDS:N parmeter (if one is present) from the QEMM line,
and immediately before the QEMM386.SYS place the line
DEVICE=C:\QEMM\FIXINT13.SYS /STACKSIZE=384
FIXINT13.SYS is in the QEMM directory. It is also
available on the Quarterdeck BBS at (310) 309-3227. If this
solves your problem, you're done. If this does not solve your
problem (but the VDS parameter did), replace it. In either
case, you may now choose to read the information section below.
Q. What is a bus-mastering device?
A. Bus-mastering devices are peripherals, typically hard drives,
that do their own direct memory addressing (DMA) without going
through the machine's Central Processing Unit (CPU) or its DMA
controller. The most common bus-mastering devices are SCSI hard
disk controllers, but other types of devices can be
bus-mastering as well. Bus-mastering ESDI disk controllers and
video cards do exist, and an increasing number of bus-mastering
network cards are available as well. While bus-mastering
devices are high-performance devices and quite often found on
386 and higher systems, they are, unfortunately, by design
incompatible with one of the most common operating modes of the
80386 processor--the Virtual 86 mode.
Specifically, the problem is that the device puts data into
absolute memory addresses and assumes that the contents of
those memory addresses will always remain constant. However, on
a 386 processor in Virtual 86 mode, this is often an incorrect
assumption. When a 386 memory manager such as QEMM, or a 386
operating environment such as DESQview 386 or Microsoft Windows
Enhanced Mode is used, it typically associates physical memory
with linear or "logical" addresses. QEMM does this, for
instance, to make High RAM appear at addresses between 640K and
1MB. When a bus-mastering device tries to access data in
memory, it presumes that physical and logical addresses are the
same. In Virtual 86 mode, a given memory address can, at any
moment, contain code or data from various regions of physical
memory.
If you are using a bus-mastering device on a 386 that is in
Virtual 86 mode and memory paging is occurring (when QEMM is
providing High RAM; when QEMM is providing expanded memory;
when DESQview 386 or Microsoft Windows is switching from one
virtual machine to another), your machine will probably hang
when you use the bus-mastering device, unless certain
precautions are taken.
Quarterdeck first became aware of the problem from customers
who had bus-mastering SCSI hard disk controllers. Users
reported that they could boot their machines and start up
DESQview. As long as they ran only one application, their
system ran fine. As soon as they opened a second application,
the system would hang. The problem was also seen by users who
were not using DESQview, but who were using the LOADHI feature
of QEMM. In both cases, the hang would occur because the disk
controller assumed that memory really existed at the address
that it was accessing. In theory, this could have caused data
corruption, but in reality it never did. The memory corruption
was typically so extensive that the systems simply hung as soon
as a change in the memory map occurred. Other 386 memory
managers exhibited the same symptoms, as did Windows version
3.x when run in Enhanced Mode. QEMM solved the problem in its
own code, but this solution was not adopted by Windows when it
entered Enhanced Mode (see the reference to SMARTDRV in item 4
below).
Q. What is the best approach to running bus-mastering devices?
A. There are several possible solutions:
1) THE BEST SOLUTION: Contact the maker of your bus-mastering
device and see whether the manufacturer supports the VDS
(Virtual DMA Services) specification. VDS is now an
industry-wide specification supported by IBM, Microsoft and
Quarterdeck, as well as many other hardware and software
suppliers. VDS, either provided in the device's ROM or as a
device driver, allows a bus-mastering device to find the real
physical address of its data when the processor is in Virtual
86 mode. QEMM versions 5.00 and later support the VDS
specification. A VDS driver provides the best solution to this
problem in terms of reliability, speed and memory efficiency. A
VDS driver may be loaded into High RAM if it appears in the
CONFIG.SYS file after the QEMM386.SYS line, but you may need to
manually add a DB=2 parameter to the QEMM386.SYS device line to
accomplish this if you are not using QEMM 7.5 or later; see
section 6 below.
2) Make sure you're using QEMM version 7.5 or later. QEMM now
automatically creates a buffer when it detects an addressing
problem with a bus-mastering hard drive controller, and this
buffer's support continues into Microsoft Windows.
3) Similarly, the drivers of many bus-mastering hard disks have
proprietary (that is, non-VDS) buffering options. The best
course in this case is to check the documentation for your disk
controller to see if the driver has a parameter to set up
buffering for disk operations. Some drivers will also document
parameters that are specific to 386 operations. For example,
the early Adaptec drivers SCSIHA.SYS and AHA1540.SYS included
both 386 and disk buffering options invoked by the parameters
"/v386" and "/b:64." "/v386" stands for virtual 386; "/b:64"
allocates a 64k buffer, for DMA.
Unlike the drivers in (1) above, these drivers do not provide
VDS services. If you are using a driver such as this, make sure
that it is not loaded high. The purpose of such a driver is to
provide buffering into physical addresses that are the same as
logical addresses; if the program is loaded high, its buffer
will be in logical addresses that are not the same as their
physical addresses. Please read the section below titled
"Making Sure Your Device Driver Loads Low".
4) Check the documentation for your bus-mastering device and see
if it can be configured to use the BIOS or any one of the
standard DMA channels. QEMM can correct the problem if the BIOS
or standard DMA channels are used.
5) As mentioned above, bus-mastering hard drives can also cause
problems for Microsoft Windows 3. Microsoft's solution is in
its SmartDrive disk cache. SMARTDRV (and other disk caches)
contain code that can buffer direct memory access. Before QEMM
7.03, QEMM's VDS services were almost completely disabled when
you entered Enhanced mode, so SMARTDRV's buffering was needed
to ensure that no bus-mastering conflicts occured inside of
Microsoft Windows. If you are using QEMM 7.5 or later, QEMM's
VDS services and disk buffering will function properly while
Microsoft Windows Enhanced mode is running, so loading SMARTDRV
is not necessary.
a) The versions of Smartdrv that ship with Microsoft Windows
3.1, DOS 5, and DOS 6 have two functions: to provide disk
caching through a module loaded in AUTOEXEC.BAT, and to
provide buffering for SCSI hard drives through a module
loaded in CONFIG.SYS. If you are using Windows 3.1 AND a
bus-mastering hard drive and you are NOT using any of the
options numbered 1 through 4 above, make sure that the
following line appears in CONFIG.SYS:
DEVICE=C:\WINDOWS\SMARTDRV.EXE /DOUBLE_BUFFER
(If your path to SmartDrive differs, change C:\WINDOWS to
the correct path.) Please read the section below titled
"Making Sure Your Device Driver Loads Low".
b) Windows 3.0 and DOS 5 shipped with SmartDrive version 3 or
lower. If you are using one of these versions of SmartDrive,
make sure that the following line appears in your CONFIG.SYS
file:
DEVICE=C:\WINDOWS\SMARTDRV.SYS
(If your path to SmartDrive differs, change C:\WINDOWS to
the correct path.)
Please read the section below titled "Making Sure Your
Device Driver Loads Low".
6) QEMM has a DB=xx (DISKBUF=xx) parameter that can prevent
QEMM-SCSI problems at the expense of a little conventional
memory. "xx" is the number of K used for buffering. Any value
for xx is sufficient to correct the problem. DISKBUF=2 is fine
for most cases. Configuring QEMM with a DISKBUF greater than 2
might improve disk performance, but setting DISKBUF to more
than 10 is probably a waste of memory.
Q. How does QEMM's detection of bus-mastering hard drives work?
A. QEMM will detect a bus-mastering hard drive and create a disk
buffer automatically as long as QEMM itself is loaded from that
bus-mastering hard drive. If you load a driver that provides
VDS (Virtual DMA Services) support BEFORE you load QEMM, QEMM
will not create the disk buffer. In cases where QEMM
automatically creates this buffer, it does not add a DISKBUF
parameter to the QEMM386.SYS line. QEMM's automatic detection
of bus-mastering hard disks is active only when the RAM
parameter is specified on the QEMM386.SYS line in the
CONFIG.SYS file. You can disable QEMM's automatic disk
buffering by using the QEMM386.SYS parameters DISKBUF=0, but
there is usually no reason to disable this feature. If you have
a bus-mastering hard disk that you do not load QEMM from, QEMM
will not detect bus-mastering conflicts with it, and you must
either use the disk controller's VDS support or specify the
DISKBUF=nn (DB=nn).
Use of the DB= parameter will not help if the bus-mastering
device is something other than a hard disk. If your
bus-mastering device is not a hard disk then the solutions
above, especially #1, are your only options.
If your bus-mastering hard disk controller uses a VDS device
driver that is loaded after QEMM386.SYS, QEMM will still create
a 2K disk buffer, because the VDS support will not be active
when QEMM loads. This disk buffer will be necessary in most
circumstances, because the Optimize program would otherwise
fail when it tried to load the VDS driver into High RAM.
However, you may wish in this circumstance to reduce the size
of the disk buffer as much as possible by placing the DISKBUF=1
parameter on the QEMM386.SYS device driver line. The smaller
disk buffer is preferable here, because the disk buffer will
never again be used after the VDS driver loads, and a bigger
disk buffer uses valuable conventional memory.
If you are both disabling automatic disk buffering (with the
DISKBUF=0 parameter) and creating a disk buffer for the page
frame (with the DISKBUFFRAME=xx parameter), you must place the
DISKBUF=0 parameter before the DISKBUFFRAME=xx parameter on the
QEMM386.SYS line in the CONFIG.SYS file. If you reverse this
ordering, automatic disk buffering will still be disabled, but
the disk buffer for the page frame will not be created.
Q. I don't have a VDS driver, and I think that my proprietary
device driver or my disk cache should be loaded low. How do I
prevent it from loading high?
A. For double-buffering to work properly, the device driver for
your bus-mastering hardware must be loaded in conventional
memory, where physical and logical addresses are almost always
the same. You must therefore make sure that it loads low if you
are depending on it to provide DMA buffering. We will use
SMARTDRV as an example of such a program. Change the
instructions below to fit your device driver.
Ensure that there is no LOADHI command preceding SMARTDRV on
the line which loads it.
OPTIMIZE will very likely try to load SmartDrive high, unless
you instruct it not to do so. This is most easily done as
follows:
1) Using a text editor, create a text file called OPTIMIZE.NOT
in the \QEMM directory. Systems with DOS 5 and later can
type "EDIT OPTIMIZE.NOT" from the \QEMM directory to create
the file. If such a file exists already, simply open it for
editing.
2) Put a new line in OPTIMIZE.NOT that says:
SMARTDRV
Do not specify a pathname nor an extension to the file name.
Save the file and exit the editor.
3) From now on, OPTIMIZE will not affect the SMARTDRV line in
either CONFIG.SYS or AUTOEXEC.BAT. As long as SMARTDRV is
not being loaded high already, it will not load high during
future OPTIMIZE sessions.
Q. I know I have a bus-mastering device on my computer, but I
haven't seen any problem. Why not?
A. It's possible that your bus-mastering device uses a standard
DMA channel for DMA operations. QEMM automatically supports
bus-mastering when standard DMA channels are used.
Your bus-mastering device may have been shipped with a VDS
driver in its ROM. Some bus-mastering hard disk controllers
ship with drivers that make VDS calls, and these drivers do not
require the DB parameter or any other buffering. We expect that
most bus-mastering devices will eventually include VDS drivers
and, therefore, will not exhibit any problems when run in
Virtual 86 mode.
******************************************************************
* Trademarks are property of their respective owners. *
* This and other technical notes may be available in updated *
* forms through Quarterdeck's standard support channels. *
* Copyright (C) 1996 Quarterdeck Corporation *
******************** E N D O F F I L E ***********************