The following "Checklist" will help you
determine how to improve the performance of your driver:
- Create your driver in the User Mode as explained in
the previous chapters of this manual.
- Compile and debug your driver in the User Mode.
- When working in the User Mode, performance may take a
hit. Check if you have performance problems. If you do
not have any performance problems, you have finished
your driver development.
If you do have performance problems:
- Identify which part of the code the performance
problem is at. Classify and solve the problem according
to the table below:
| |
Problem |
Solution |
|
#1 |
ISA
Card - Accessing an IO mapped range on the card. |
- Try to convert multiple calls to WD_Transfer() to one
call to WD_MultiTransfer()
- If this does not solve the problem, handle the IO at
Kernel Mode, by writing a kernel PlugIn.
|
|
#2 |
PCI
Card - Accessing an IO mapped range on the card. |
- First, try to change the card from IO mapped to memory
mapped by changing bit 0 of the address space PCI
configuration register to 0, and then try the solutions for
problem #3. You will probably need to re-program the EEPROM
to initialize BAR0/1/2/3/4/5 registers with different
values.
- If this is not possible, try the solutions suggested for
problem #1.
- If this does not solve the problem, handle the IO at
Kernel Mode, by writing a kernel PlugIn.
|
|
#3 |
Accessing a memory mapped range on the card. |
- Try to access memory without using WD_Transfer(), by
using direct access to memory mapped regions
- If this does not solve the problem, then there is a
hardware design problem. You will not be able to increase
performance by using any software design method, or by
writing a Kernel PlugIn, or by writing a full kernel driver.
|
|
#4 |
Interrupt latency. (Missing interrupts, Receiving interrupts
too late) |
- You need to handle the interrupts at Kernel Mode, by
writing a kernel PlugIn.
|
|

|