Re: IRQ assignment in Windows 2K/XP/2003...
- From: "Cosmo" <cosmo_matt@xxxxxxxxxxx>
- Date: Fri, 09 Jun 2006 05:04:16 GMT
I never did report what I found out on this:
I discovered in the PCI bridge spec (chapter 9, revision 1.1) that if
multiple devices on the other side of a PCI-to-PCI bridge (on an
expansion
board) are required to use the same PCI slot interrupt line
(INTA#-INTD#)
and therefore same IRQ#, the "interrupt pin" request in each of the
device's
PCI configuration header has to be different (they both don't request
INTA#
as I thought). For the first device, it had to specify INTA# and the
second
device needed to specify INTD#. When BIOS POST code is initializing
the
system, it assumes a pre-defined set of routing information and writes
a
common IRQ# to each device's "interrupt line" register in the
configuration
space.
Who would have thunk it?
So, no driver, Windows PnP manager, or BIOS problems were the
culprit--just
a misconfiguration in hardware...
So Mark, the bridge wasn't "directly" involved with the routing of the
interrupts--but the presence of the bridge did change the configuration
requirements for the devices on the secondary bus...
Cosmo
Mark Roddy wrote:
Paul L wrote:A lines
Why do you say that the motherboard has them or'd together? The Int
Int linesdo not need to be bussed together. The mother board can route the
appearfrom each slot anyway it wishes.
Yes indeed but from the description of the OP's problem it would
that the lines are ORd together and that the BIOS is misreportingthem
as separate. It is not that it has to be this way, it is that thisseparate
appears, from the evidence presented, to be a fact in this situation.
He has two devices behind the bridge, each of which are given
interrupt vectors by the OS, indicating that the OS believes them tobe
separately routable. Call them DevA and DevB. DevB asserts aninterrupt,
but the ISR for DevA gets invoked. DevA.ISR returns False, as the
interrupt is not for DevA. DevB.ISR does not get invoked. Instead, as
the PCI interrupt is still asserted, DevA.ISR is immediatelyre-invoked.
Repeat ad nauseum. I say that the bios is misreporting the interruptwiring.
its
So the bridge is actually supposed to sort the INTA-D routing from
slot to its secondary PCI bus across all of the secondary slots. Butthe
bios has to correctly report how the primary bus physical slothandles
INTA-D. If it says they are separately routable when in fact they are
OR'd together, I think big trouble is in the works. Of course it isalso
possible that the bridge device has the INTA-D sorting wrong as well.side of
Paul
"Mark Roddy" <markr@xxxxxxxxxxxxxx> wrote in message
news:%23y$Xs5kOFHA.2356@xxxxxxxxxxxxxxxxxxxxxxx
Cosmo wrote:
OS: Windows 2K/XP/2003
Hardware Platform: Intel x86-based PC, PIII, 815E chipset
Drivers: WDM-style
I have two independent, single-function PCI devices on the other
devicea
PCI-to-PCI bridge:
PCI slot <---> PCI-to-PCI bridge <---> PCI device #1
|
---> PCI
to INTA#2
Both PCI devices request an interrupt and are physically attached
each ofon
the PCI bus. A seperate WDM device driver is written to control
the
PCI devices.
When the drivers load for each of the two devices, the system (PnP
Sometimes themanager)
dynamically assigns an IRQ # for each of the two devices.
andIRQ
# is the same and sometimes the IRQ # is different. I can disable
the IRQ #re-enable each device via the Windows XP Device Manager and get
determineassignments to change.
Now, when the two devices are assigned a common IRQ # and INTA is
asserted
by either device, the ISR in each of the drivers is called to
yes--hardware isif
they are interrupting (one says no and the other says
assignedserviced and all is well). However, when the two devices are
If thedifferent IRQ #s, only the ISR for one of the drivers is called.
isother device happened to be generating the interrupt, the system
loop.locked
up as the non-interrupting device's ISR is continually called in a
assigned
I am inclined to believe that as long as the two PCI devices are
linedifferent IRQ #s by PnP when they both use the same INTA interrupt
consulted.on
the PCI bus, both device's ISRs are not guaranteed to be
done
What can be done to cure this problem? Can something different be
Rightin
the driver during start time? In the IoConnectInterrupt() call?
PnPnow
I am simply passing the information handed to the driver by the
anything bemanager
into the IoConnectInterrupt() call. Any other options? Can
PCI-to-PCIdone to the PCI configuration space of the end-devices or
understandbridge
to influence the system's choice of IRQ #? I would like to
directlythis
behavior better (what is going on under the covers).
Regards,
Cosmo
My PCI book says that the interrupt lines on your pci devices are
bridge isconnected to the same interrupt lines on the connector slot your
really inplugged into. In other words, for interrupts, the bridge is not
thesethe picture. So the situation appears to be that the OS thinks that
motherboarddevices have separately routable interrupts when in fact they
me, thehas them or'd together. So somebody is confused. The choices are:
bios, or the os.
--
=====================
Mark Roddy DDK MVP
Windows 2003/XP/2000 Consulting
Hollis Technology Solutions 603-321-1032
www.hollistech.com
--
=====================
Mark Roddy DDK MVP
Windows 2003/XP/2000 Consulting
Hollis Technology Solutions 603-321-1032
www.hollistech.com
.
- References:
- IRQ assignment in Windows 2K/XP/2003...
- From: Cosmo
- Re: IRQ assignment in Windows 2K/XP/2003...
- From: Paul L
- Re: IRQ assignment in Windows 2K/XP/2003...
- From: Mark Roddy
- IRQ assignment in Windows 2K/XP/2003...
- Prev by Date: Re: Encrypt/ Decrypt in NdisIM with Ethernet
- Next by Date: RE: ZwQueryDirectoryFile
- Previous by thread: Re: IRQ assignment in Windows 2K/XP/2003...
- Next by thread: Re: PsSetCreateProcessNotifyRoutine & driver unloading
- Index(es):
Relevant Pages
|