I have read up on previous postings regarding the occasional unexpected
address reassignment by HalAssignSlotResources(), and am inquiring as to
whether there are alternative solutions to the problem.
Current workarounds: (1) using /pcilock on WinNT 4.0 command, (2) avoiding
use of HalAssignSlotResources() altogether.
Summary of the problem:
We have two PCI adapters, both behind an Intel bridge. The first adapter
(bus 2, device 0x0B, function 0) exposes three memory windows, 4KB, 2MB,
and 8MB. The second adapter (bus 2, device 0x0D, function 0) exposes one
8MB memory window.
After BIOS, all PCI BARs (system-wide) are set up in a correct
configuration, with no overlapping windows:
Bus 2, Dev 0x0B: FC000000 (8MB)
F4008000 (4KB)
F4200000 (2MB)
Bus 2, Dev 0x0D: FC800000 (8MB)
The driver for the first adapter loads first. When it calls
HalAssignSlotResources(), it uses all default arguments (no registry
info). By snooping with a PCI Bus analyzer, we confirm that
HalAssignSlotResources() and its surrogates do the following:
- Read the configuration space
- Write the configuration space to size it
- Read the sized info (I verified that this is still correct from the
adapter’s perspective) - Restore the saved data read in the first step
- REWRITE the BARs
In the last step, the 8MB BAR is replaced with a value of FC800000, which
conflicts with the (2,0x0D,0) device.
When the driver subsequently attempts to access the overmapped window, the
system understandably hangs.
We are using the /pcilock workaround for now, and considering whether to
use HalAssignSlotResources() at all, and would welcome suggestions.
Thanks!
Gary Maxwell
Vertical Networks