Microsoft KB Archive/232814

{|
 * width="100%"|

BUG: Windows 98: Multiple Card Service Windows Fail on CardBus Controllers

 * }

Q232814

-

The information in this article applies to:


 * Microsoft Windows 98 Driver Development Kit (DDK)

-

SYMPTOMS
On Windows 98 computers with CardBus controllers, multiple Card Service memory windows may fail to operate correctly. This problem is evident with a single Personal Computer Memory Card International Association (PCMCIA) card requiring multiple windows, as well as multiple cards requiring a single window.

With a single card, multiple calls to RequestWindow (function 21h) normally return the same physical memory address.

When multiple cards that each require a single memory window are inserted into the controller, one of the cards ceases to function correctly.

CAUSE
Windows 98, unlike Windows 95 OSR2, stops and restarts the CardBus adapter when assigning an additional memory resource. This resource rebalance can happen either with a single driver making multiple calls to RequestWindow or with multiple drivers making a single call.

When the CardBus adapter is rebalanced, the original memory window is deallocated and never restored. Subsequent attempts to read from the original memory window fail because it no longer exists.

RESOLUTION
There are two methods to work around this rebalance problem, one method for the single card scenario and one method for the multiple cards scenario.

Single Card Scenario
For a single PCMCIA card that requires multiple memory windows, the driver can call RequestWindow to temporarily allocate a window large enough to contain all the actual memory windows. The driver then releases the large window and calls RequestWindow multiple times for the actual required memory windows. This method works correctly because the first request opens a memory aperture on the CardBus bridge large enough to accommodate the multiple smaller windows. The aperture remains after the first window is released. The subsequent small window requests therefore do not cause Configmg.vxd to rebalance memory resources for the CardBus controller because the aperture on the CardBus bridge is already large enough to accommodate the multiple smaller windows.

Multiple Card Scenario
For multiple cards that each require a single memory window, an .inf file tuple override specifying the card's memory requirements can be used to avoid this problem. The .inf override causes the resource rebalance to occur before the cards' drivers are even loaded. The driver(s) can then make its RequestWindow call successfully because there is no need to further rebalance the CardBus controller.

STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.