HELP: strange IRQ/ISR problem with Win2K

I wrote a kernel NT driver for a PCI card which runs perfectly fine with
WinNT 4.0 under any circumstances. Under Windows 2000 I’m facing the
problem now that on some machines it works (always) and on others it
doesn’t (the hardware is 100% identical). I traced down the problem and
found out that my ISR is not called on some machines.

So first I decided to rewrite the driver to make it a WDM/PNP driver
(because this is a good thing anyway for the future), but the same problem
still exists with the rewritten driver.

On systems where the ISR is not called, I have examined following strange
situation:

When I call HalAssignSlotResources (in the NT driver) or look at the
resource list which I get in my PnpDispatch routine (during the
IRP_MN_START_DEVICE in the PnpDriver), I get e.g. 0xC (12) as my interrupt
vector (not translated of course).

But at the same time (and also later) when I look in the PCI configuration
space of the card (e.g. using the !pci command in WinDbg) I see that the
IrqLine is set to another value, e.g. 0xB (11).

How can this happen? Do I totally misunderstand something here? I always
thought that these two values should be the same (and they are on machines
where it is working).

Is this the reason why my ISR is not called?

The device certainly is interrupting (doublechecked) and I even see from
the registers on the card that interrupts are pending.

The other strange thing is that the interrupt is of course level sensitive
(PCI) and no other driver should be servicing it (plain W2K installation +
Wildcat AGP driver), so normally the system should stall, but it doesn’t.
It just continues to work (except for my driver of course ;-(

Does anybody have a hint what could be the reason for this problem. I’m
really out of ideas now.

Some more facts and things I already doublechecked:

  • all machines are multiprocessor
  • using MPS or ACPI HAL makes no difference
  • IRQ BIOS settings have no influence (as it should be with Pnp)
  • In the NT driver, I DO specify the device object in my call to
    HalAssignSlotResources.

The problem certainly has nothing to do with the hardware (as the same NT
driver always works under NT, e.g. in a dual boot configuration with W2K).
And I also have some disks with W2K where it always works regardless in
which of my (several identical) computers I’m using it.

Any help on how to continue debugging here is greatly appreciated

Thanks in advance

Christian Huber


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

I don’t know if this is your problem, but I have found this:

When our adapter is plugged into the PCI bus as a PCI card, all things are
equal. However, when we use a PMC card on a carrier, when the PCI BARS
information is parsed, I get 4 items instead of 3. In my case I was getting
TWO (yes 2) items for the port information. One was legal, with a valid
range, whereas one has a bogus range and an invalid address. I now test for
a valid range and discard the invalid parameter.

Perhaps something like that is your problem.

Identical hardware? I doubt it. It’s 2 different machines, unless your
company is doing strange things with the 4th dimension. :slight_smile:

Gary

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Christian Huber
Sent: Saturday, November 17, 2001 10:20 AM
To: NT Developers Interest List
Subject: [ntdev] HELP: strange IRQ/ISR problem with Win2K

I wrote a kernel NT driver for a PCI card which runs perfectly fine with
WinNT 4.0 under any circumstances. Under Windows 2000 I’m facing the
problem now that on some machines it works (always) and on others it
doesn’t (the hardware is 100% identical). I traced down the problem and
found out that my ISR is not called on some machines.

So first I decided to rewrite the driver to make it a WDM/PNP driver
(because this is a good thing anyway for the future), but the same problem
still exists with the rewritten driver.

On systems where the ISR is not called, I have examined following strange
situation:

When I call HalAssignSlotResources (in the NT driver) or look at the
resource list which I get in my PnpDispatch routine (during the
IRP_MN_START_DEVICE in the PnpDriver), I get e.g. 0xC (12) as my interrupt
vector (not translated of course).

But at the same time (and also later) when I look in the PCI configuration
space of the card (e.g. using the !pci command in WinDbg) I see that the
IrqLine is set to another value, e.g. 0xB (11).

How can this happen? Do I totally misunderstand something here? I always
thought that these two values should be the same (and they are on machines
where it is working).

Is this the reason why my ISR is not called?

The device certainly is interrupting (doublechecked) and I even see from
the registers on the card that interrupts are pending.

The other strange thing is that the interrupt is of course level sensitive
(PCI) and no other driver should be servicing it (plain W2K installation +
Wildcat AGP driver), so normally the system should stall, but it doesn’t.
It just continues to work (except for my driver of course ;-(

Does anybody have a hint what could be the reason for this problem. I’m
really out of ideas now.

Some more facts and things I already doublechecked:

  • all machines are multiprocessor
  • using MPS or ACPI HAL makes no difference
  • IRQ BIOS settings have no influence (as it should be with Pnp)
  • In the NT driver, I DO specify the device object in my call to
    HalAssignSlotResources.

The problem certainly has nothing to do with the hardware (as the same NT
driver always works under NT, e.g. in a dual boot configuration with W2K).
And I also have some disks with W2K where it always works regardless in
which of my (several identical) computers I’m using it.

Any help on how to continue debugging here is greatly appreciated

Thanks in advance

Christian Huber


You are currently subscribed to ntdev as: xxxxx@inland.net
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

>I wrote a kernel NT driver for a PCI card which runs perfectly fine with

WinNT 4.0 under any circumstances. Under Windows 2000 I’m facing the
problem now that on some machines it works (always) and on others it
doesn’t (the hardware is 100% identical). I traced down the problem and
found out that my ISR is not called on some machines.

Is it possible it fails on machine where the card is behind a PCI bridge?
You might see what the bus number claims to be. You might also see if it
works in some slots (non-bridged slots) and but not others.

I’m not real sure how PCI interrupts get translated by a bridge, especially
if using an APIC like on SMP machines.

If anybody knows a really good document that explains all the voodoo of PCI
interrupt mapping flavors, I’d sure like to read it. A good explanation why
ACPI machine like to map all the interrupts to the same vector would be
nice too.

  • Jan

You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

It isn’t ACPI that maps all the interrupts to the same vector, it is
w2k’s acpi-hal that makes that decision. ACPI just describes what the
choices are. The only real problem with this is that other people’s bad
drivers can be a real headache. What’s the difference really between
sharing vectors and interleaving prioritized interrupts? You still have
to wait for somebody else to do whatever it is they have to do.

If you give the PCI-SIG $5000 there is lots of good documentation,
otherwise the more reasonably priced Mindshare PCI System Architecture
Series (Addison Wesley) is IMHO the best that there is, and not too bad
at that.

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Jan Bottorff
Sent: Saturday, November 17, 2001 9:01 PM
To: NT Developers Interest List
Subject: [ntdev] Re: HELP: strange IRQ/ISR problem with Win2K

>I wrote a kernel NT driver for a PCI card which runs perfectly fine
>with WinNT 4.0 under any circumstances. Under Windows 2000
I’m facing
>the problem now that on some machines it works (always) and
on others
>it doesn’t (the hardware is 100% identical). I traced down
the problem
>and found out that my ISR is not called on some machines.

Is it possible it fails on machine where the card is behind a
PCI bridge?
You might see what the bus number claims to be. You might
also see if it
works in some slots (non-bridged slots) and but not others.

I’m not real sure how PCI interrupts get translated by a
bridge, especially
if using an APIC like on SMP machines.

If anybody knows a really good document that explains all the
voodoo of PCI
interrupt mapping flavors, I’d sure like to read it. A good
explanation why
ACPI machine like to map all the interrupts to the same
vector would be
nice too.

  • Jan

You are currently subscribed to ntdev as:
xxxxx@hollistech.com To unsubscribe send a blank email to
leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Did you make sure the BIOS is identical on the machines?

— Christian Huber wrote:
> I wrote a kernel NT driver for a PCI card which runs perfectly fine with
> WinNT 4.0 under any circumstances. Under Windows 2000 I’m facing the
> problem now that on some machines it works (always) and on others it
> doesn’t (the hardware is 100% identical). I traced down the problem and
> found out that my ISR is not called on some machines.
>
> So first I decided to rewrite the driver to make it a WDM/PNP driver
> (because this is a good thing anyway for the future), but the same problem
> still exists with the rewritten driver.
>
> On systems where the ISR is not called, I have examined following strange
> situation:
>
> When I call HalAssignSlotResources (in the NT driver) or look at the
> resource list which I get in my PnpDispatch routine (during the
> IRP_MN_START_DEVICE in the PnpDriver), I get e.g. 0xC (12) as my interrupt
> vector (not translated of course).
>
> But at the same time (and also later) when I look in the PCI configuration
> space of the card (e.g. using the !pci command in WinDbg) I see that the
> IrqLine is set to another value, e.g. 0xB (11).
>
> How can this happen? Do I totally misunderstand something here? I always
> thought that these two values should be the same (and they are on machines
> where it is working).
>
> Is this the reason why my ISR is not called?
>
> The device certainly is interrupting (doublechecked) and I even see from
> the registers on the card that interrupts are pending.
>
> The other strange thing is that the interrupt is of course level sensitive
> (PCI) and no other driver should be servicing it (plain W2K installation +
> Wildcat AGP driver), so normally the system should stall, but it doesn’t.
> It just continues to work (except for my driver of course ;-(
>
> Does anybody have a hint what could be the reason for this problem. I’m
> really out of ideas now.
>
> Some more facts and things I already doublechecked:
>
> - all machines are multiprocessor
> - using MPS or ACPI HAL makes no difference
> - IRQ BIOS settings have no influence (as it should be with Pnp)
> - In the NT driver, I DO specify the device object in my call to
> HalAssignSlotResources.
>
> The problem certainly has nothing to do with the hardware (as the same NT
> driver always works under NT, e.g. in a dual boot configuration with W2K).
> And I also have some disks with W2K where it always works regardless in
> which of my (several identical) computers I’m using it.
>
> Any help on how to continue debugging here is greatly appreciated
>
> Thanks in advance
>
> Christian Huber
>
>
> —
> You are currently subscribed to ntdev as: xxxxx@yahoo.com
> To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

__________________________________________________
Do You Yahoo!?
Find the one for you at Yahoo! Personals
http://personals.yahoo.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Hello,

I also facing same problem… I am getting IRQ as a 11 from BIOS, and when
my driver reads the resources using HalGetResources, I am getting it as a
12. And may be because of this my ISR routine is not getting called, even
after card generating the interrupt… My machine is also have a PCI
bridge.

Thank you.

Regards,
Mohan

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of Mark Roddy
Sent: Sunday, November 18, 2001 7:54 AM
To: NT Developers Interest List
Subject: [ntdev] Re: HELP: strange IRQ/ISR problem with Win2K

It isn’t ACPI that maps all the interrupts to the same vector, it is
w2k’s acpi-hal that makes that decision. ACPI just describes what the
choices are. The only real problem with this is that other people’s bad
drivers can be a real headache. What’s the difference really between
sharing vectors and interleaving prioritized interrupts? You still have
to wait for somebody else to do whatever it is they have to do.

If you give the PCI-SIG $5000 there is lots of good documentation,
otherwise the more reasonably priced Mindshare PCI System Architecture
Series (Addison Wesley) is IMHO the best that there is, and not too bad
at that.

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Jan Bottorff
Sent: Saturday, November 17, 2001 9:01 PM
To: NT Developers Interest List
Subject: [ntdev] Re: HELP: strange IRQ/ISR problem with Win2K

>I wrote a kernel NT driver for a PCI card which runs perfectly fine
>with WinNT 4.0 under any circumstances. Under Windows 2000
I’m facing
>the problem now that on some machines it works (always) and
on others
>it doesn’t (the hardware is 100% identical). I traced down
the problem
>and found out that my ISR is not called on some machines.

Is it possible it fails on machine where the card is behind a
PCI bridge?
You might see what the bus number claims to be. You might
also see if it
works in some slots (non-bridged slots) and but not others.

I’m not real sure how PCI interrupts get translated by a
bridge, especially
if using an APIC like on SMP machines.

If anybody knows a really good document that explains all the
voodoo of PCI
interrupt mapping flavors, I’d sure like to read it. A good
explanation why
ACPI machine like to map all the interrupts to the same
vector would be
nice too.

  • Jan

You are currently subscribed to ntdev as:
xxxxx@hollistech.com To unsubscribe send a blank email to
leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: xxxxx@controlnet.co.in
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Set the BIOS setup value “PnP OS Installed” to “No”.
Setting it to “Yes” is guaranteed to lead to PCI IRQ problems with NT4 and is also bad for w2k.

Max

----- Original Message -----
From: “Christian Huber”
To: “NT Developers Interest List”
Sent: Saturday, November 17, 2001 10:19 AM
Subject: [ntdev] HELP: strange IRQ/ISR problem with Win2K

> I wrote a kernel NT driver for a PCI card which runs perfectly fine with
> WinNT 4.0 under any circumstances. Under Windows 2000 I’m facing the
> problem now that on some machines it works (always) and on others it
> doesn’t (the hardware is 100% identical). I traced down the problem and
> found out that my ISR is not called on some machines.
>
> So first I decided to rewrite the driver to make it a WDM/PNP driver
> (because this is a good thing anyway for the future), but the same problem
> still exists with the rewritten driver.
>
> On systems where the ISR is not called, I have examined following strange
> situation:
>
> When I call HalAssignSlotResources (in the NT driver) or look at the
> resource list which I get in my PnpDispatch routine (during the
> IRP_MN_START_DEVICE in the PnpDriver), I get e.g. 0xC (12) as my interrupt
> vector (not translated of course).
>
> But at the same time (and also later) when I look in the PCI configuration
> space of the card (e.g. using the !pci command in WinDbg) I see that the
> IrqLine is set to another value, e.g. 0xB (11).
>
> How can this happen? Do I totally misunderstand something here? I always
> thought that these two values should be the same (and they are on machines
> where it is working).
>
> Is this the reason why my ISR is not called?
>
> The device certainly is interrupting (doublechecked) and I even see from
> the registers on the card that interrupts are pending.
>
> The other strange thing is that the interrupt is of course level sensitive
> (PCI) and no other driver should be servicing it (plain W2K installation +
> Wildcat AGP driver), so normally the system should stall, but it doesn’t.
> It just continues to work (except for my driver of course ;-(
>
> Does anybody have a hint what could be the reason for this problem. I’m
> really out of ideas now.
>
> Some more facts and things I already doublechecked:
>
> - all machines are multiprocessor
> - using MPS or ACPI HAL makes no difference
> - IRQ BIOS settings have no influence (as it should be with Pnp)
> - In the NT driver, I DO specify the device object in my call to
> HalAssignSlotResources.
>
> The problem certainly has nothing to do with the hardware (as the same NT
> driver always works under NT, e.g. in a dual boot configuration with W2K).
> And I also have some disks with W2K where it always works regardless in
> which of my (several identical) computers I’m using it.
>
> Any help on how to continue debugging here is greatly appreciated
>
> Thanks in advance
>
> Christian Huber
>
>
> —
> You are currently subscribed to ntdev as: xxxxx@storagecraft.com
> To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
>


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com