CardBus I/O Resource Windows in Windows Vista
Updated: October 26, 2006
Windows Vista introduces changes to I/O resource allocation for PCI bridge and CardBus controllers. In some cases, these changes may prevent PCMCIA R2 cards from being started properly. System firmware developers can prevent these failures by understanding the changes in Windows Vista and implementing proper BIOS support for CardBus bridge I/O windows. OEMs with current shipping systems that are affected by the problems described in this article may want to revert the changes to I/O resource allocation in Windows Vista by applying the workaround described in this article.
Background
According to PCI and CardBus specifications, an I/O window is considered not implemented when the limit register value is less than the base register value. Windows Vista will not assign any bridge window resources for unimplemented windows. This is a change from Windows XP and Windows Server 2003, where Windows would ignore cases where limit is less than the base on CardBus bridges and allocate a bridge window resource for the CardBus controller.
Problem Scenario
When an R2 card is inserted in a CardBus bridge slot, its I/O resource requirements are arbitrated from a bridge resource window of the parent of the CardBus controller. The I/O transactions for an R2 card are claimed subtractively by the CardBus bridge. For this to work correctly, an I/O decode bit must be set in the CardBus bridge. In Windows Vista, if the CardBus bridge does not implement any I/O windows, the I/O decode in the CardBus bridge's command register bit will not be enabled. An R2 card that is inserted in a slot behind this CardBus bridge will fail to access its I/O range, leading to the device failing to start and being marked with a Code 10 in Device Manager.
Solution
To avoid this issue in Windows Vista, BIOS developers should ensure that system firmware properly implements I/O windows on CardBus bridges. This will allow an R2 card with I/O resources to continue to work properly in Windows Vista with no further changes required.
For existing systems that do not provide the correct BIOS support, Windows Vista provides an errata mechanism that causes Windows Vista to revert to the legacy behavior of Windows XP and Windows Server 2003. This may be used as a temporary solution to systems already in the field without requiring a BIOS update.
To enable the legacy behavior on Windows Vista, edit the registry as follows:
-
Under
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PCI, add a Parameters key.
-
Under
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PCI\Parameters, add the following key: