This article explains problems related to 16-bit PC Card devices that require ISA interrupts to operate and why vendors should move to support shareable PCI interrupts. It also explains how device vendors with devices or drivers that do not support sharable PCI can inform Microsoft Windows operating systems using an INF.
The article also introduces Microsoft plans to require that 16-bit PC Card devices and drivers support shareable PCI interrupts in order to receive the "Designed for Windows" logo.
| Introduction | |
| INF Overrides | |
| Logo Requirement Timeline | |
| Resources and Call to Action |
16-bit PC Card devices that require ISA interrupts cause significant problems for end users because, in some systems, CardBus controllers do not have an ISA interrupt connected to them. Therefore, such CardBus controllers cannot provide an ISA interrupt to devices inserted into CardBus slots. If a device appears that requires an ISA interrupt (which is relatively common for 16-bit PC Cards), the device cannot function and may cause system-wide problems, such as interrupt storms.
This article explains this problem in detail. The long-term solution to this problem is to implement a proposed new logo requirement that would require all 16-bit PC Card devices to support shareable PCI interrupts.
Note: Before the advent of CardBus, 16-bit PC Cards were connected to the system over a legacy PCMCIA bridge (also referred to as a PCIC bridge). These bridges are not capable of running CardBus cards or routing 16-bit PC Card devices to a PCI IRQ. The information in this article about routing to PCI interrupts does not apply to PCIC bridges.
There are two classes of PCMCIA cards, both of which are supported by CardBus controllers:
| • | 32-bit PCI-compliant CardBus PC Cards. In this document, these devices are referred to simply as "CardBus cards." |
| • | 16-bit PC Cards, which are essentially ISA devices. |
CardBus cards are essentially PCI devices, and their interrupts are routed to PCI IRQs as defined by the PCI specification. 16-bit PC Cards were defined before the advent of PCI, and their interrupts were, therefore, typically routed to ISA IRQs. It is important to note that 16-bit PC Cards can also support routing interrupts to PCI. However, they have to meet the following two basic requirements in order to successfully use PCI interrupts instead of ISA interrupts.
| • | Support PCI level-triggered interrupt generation. Most 16-bit PC Cards support level-triggered interrupts because the support is defined in the PCMCIA specification and because CardBus controllers have the ability to route 16-bit PC Card interrupts either to an ISA IRQ or to a PCI IRQ. | ||||||
| • | Support interrupt sharing. PCI interrupts are shareable. Therefore, 16-bit PC Cards and their drivers must be designed to handle interrupt sharing. Many 16-bit PC Card drivers do not successfully support interrupt sharing. Common problems that prevent devices and drivers from sharing interrupts are:
All of these problems cause an interrupt storm, which will cause the system to stop responding. |
Although many 16-bit PC Card drivers do not successfully support interrupt sharing (and therefore require an ISA interrupt), there are system configurations on the market in which the CardBus controller is not connected to any ISA IRQ, and therefore, cannot provide an ISA interrupt to 16-bit PC Cards.
Examples of configurations where CardBus controllers do not have a connection to an ISA interrupt include:
| • | A desktop machine with a CardBus controller plugged into a standard PCI slot. In this case, the CardBus controller does not have access to an ISA interrupt, because ISA interrupts are never present at a PCI slot. In the past, these PCI cards may have been distributed with an ISA "paddle card." The purpose of the paddle card was to provide a connection to ISA IRQs. However, paddle cards are typically no longer available. |
| • | A Mini-PCI device that contains an R2 PC Card device installed behind a CardBus controller. These are typically wireless devices. |
Because no ISA interrupts are available for CardBus controllers in these configurations, PCI interrupts are the only type of interrupts available. However, if a device that does not support PCI interrupts is inserted into a CardBus slot in this system, it will not function and may cause system-wide problems, such as an interrupt storm.
Ideally, no device would require an ISA interrupt, and Windows could just assign shareable PCI interrupts to all 16-bit PC Cards. Microsoft is planning to require support for PCI interrupts in future versions of the "Designed for Windows" Logo requirements so that this problem can be avoided.
If Windows routes an interrupt from a 16-bit PC Card and that card does not support shareable PCI interrupts, then the system may stop responding. To avoid this problem, vendors should always support shareable PCI interrupts. If a device does not support shareable PCI interrupts, it should inform Windows using this INF override so that an interrupt storm can be avoided.
PcmciaExclusiveIrq:
This setting can be specified in the INF of the target device to prevent Pcmcia.sys from routing that device to a shared IRQ. For example, if the a modem fails to support interrupt sharing because its drivers ISR was not designed for it, the following directive can be specified in its INF (in an AddReg section):
HKR,,PcmciaExclusiveIrq,0x00010001,1
CAUTION: This INF setting effectively breaks this device for all bridges that have no ISA IRQs detached. Use this setting only when it is absolutely certain that the device cannot function on a shared PCI IRQ.
As stated earlier in this article, future planned logo requirements will require all 16-bit PC Card devices to support shareable PCI interrupts. This is a proposed logo requirement and will take effect 18 months after the formal requirement is published.
Note to 16-bit PC Card vendors: In the same timeline, your devices will be required to support flexible allocation of I/O resources for your devices. That is, 16-bit PC Card devices will not be allowed to request specific ranges of I/O space, but will only be allowed to request a specific amount of I/O space.
Call to Action:
| • | System manufactures should be aware that there are devices that require ISA IRQs. Therefore, system vendors should ensure that ISA IRQs are available to CardBus controllers in the system until the logo requirements described in this article help phase out this problem. |
| • | System manufacturers should ensure that BIOS code sets CardBus controllers to PCIC mode for compatibility with Windows 95/98/Me operating systems, Windows 2000, and Windows XP. |
| • | Device manufacturers should implement CardBus devices instead of 16-bit PC Card devices because they are PCI compliant and not legacy ISA. |
| • | If a vendor must implement 16-bit PC Card devices, design them to support shareable PCI interrupts. R2 cards that support PCI shared interrupts are much more likely to work properly because they do not rely on system manufacturers to wire an ISA interrupt to the CardBus controller. |
| • | Driver developers should design drivers to support shareable PCI interrupts. |
| • | For more information, see CardBus Controllers and Windows. |
Feedback:
Resources:
| • | Windows Platform Development white papers and resources for CardBus (including references for PCMCIA specifications): |
| • | Windows Driver Development Kit: |
| • | Windows Logo Program for Hardware: |
| • | WHQL Test Specifications and testing notes: |