ACPI ISR problem...

Hi,

I have a PCI board with PLX9080 and I wrote a WDM driver for it.
It works fine on 98, Win2k with “Standard PC”, Win2k with “ACPI Uniprocessor PC”, WinXP with
“Standard PC”.
I have a PC with WinXP “ACPI Uniprocessor PC” and the ISR is not called at all.
I tried on this machine the same XP but with “Standard PC” (without ACPI) and it works.

With ACPI Uniprocessor PC it doesn’t want to call my ISR at all (I verified with SoftIce).

I use the following code for connecting to the interrupt in the AddDevice routine of the driver:

devExt->InterruptLevel = (UCHAR)prdTranslated->u.Interrupt.Level;
devExt->InterruptVector = prdTranslated->u.Interrupt.Vector;
devExt->InterruptAffinity = prdTranslated->u.Interrupt.Affinity;
if (prdTranslated->Flags & CM_RESOURCE_INTERRUPT_LATCHED) {
devExt->InterruptMode = Latched;
} else {
devExt->InterruptMode = LevelSensitive;
}
ASSERT(devExt->InterruptMode == LevelSensitive);
irq_shared = (prdTranslated->ShareDisposition == CmResourceShareShared);

code = IoConnectInterrupt(&devExt->InterruptObject,
PciHandleInterrupt,
devExt, // ISR Context
NULL,
devExt->InterruptVector,
(KIRQL)devExt->InterruptLevel,
(KIRQL)devExt->InterruptLevel,
devExt->InterruptMode,
irq_shared,
devExt->InterruptAffinity,
FALSE);

When it is called, the values are:
Vector: 0x183
InterruptLevel: 0x07
InterruptMode: 0
irq_shared: 1
InterruptAffinity: 1

I tried to catch the IoConnectInterrupt for a whatever driver (USB host controller, NIC) with values:
Vector: 0x173
InterruptLevel: 0x06
InterruptMode: 0
share:1, affinity: 1, respectively

Vector: 0x1B4
InterruptLevel: 0x0A
InterruptMode: 0
share:1, affinity: 1.

(… the other drivers work, verified with SoftIce and the ISR is called).

I don’t think this code is wrong, because I kept all of the DDK says about IoConnectInterrupt and it works with Win2k ACPI Uniprocessor PC.
And I’m sure this is a software problem, because I can read the PLX’s Interrupt Control/Status register and the bit 15 (Local Interrupt is active) is set (of course the local interrupt and the pci interrupt are enabled) and I measured the INTA signal and it is active physically.

If someone has some suggestion, please help me.
Thanks,
Micsa


Home, no matter how far…
http://www.home.ro

What raw interrupt values came in with your IRP_MN_START_DEVICE? Put
differently, what IRQ did you get assigned? And was it different between
Win2K and WinXP?

Probably more importantly, what motherboard are you using? It’s likely that
you’ve run across one of the many motherboards that has a slightly busted
ACPI BIOS. (I’ll reverse that statement if the IRQ on Win2K was the same as
the IRQ on WinXP.)


Jake Oshins
Windows Kernel Group

This posting is provided “AS IS” with no warranties, and confers no rights.

“Csaba Miklos” wrote in message news:xxxxx@ntdev…
>
> Hi,
>
> I have a PCI board with PLX9080 and I wrote a WDM driver for it.
> It works fine on 98, Win2k with “Standard PC”, Win2k with “ACPI
> Uniprocessor PC”, WinXP with
> “Standard PC”.
> I have a PC with WinXP “ACPI Uniprocessor PC” and the ISR is not called at
> all.
> I tried on this machine the same XP but with “Standard PC” (without ACPI)
> and it works.
>
> With ACPI Uniprocessor PC it doesn’t want to call my ISR at all (I
> verified with SoftIce).
>
> I use the following code for connecting to the interrupt in the AddDevice
> routine of the driver:
>
> devExt->InterruptLevel = (UCHAR)prdTranslated->u.Interrupt.Level;
> devExt->InterruptVector = prdTranslated->u.Interrupt.Vector;
> devExt->InterruptAffinity = prdTranslated->u.Interrupt.Affinity;
> if (prdTranslated->Flags & CM_RESOURCE_INTERRUPT_LATCHED) {
> devExt->InterruptMode = Latched;
> } else {
> devExt->InterruptMode = LevelSensitive;
> }
> ASSERT(devExt->InterruptMode == LevelSensitive);
> irq_shared = (prdTranslated->ShareDisposition == CmResourceShareShared);
>
> code = IoConnectInterrupt(&devExt->InterruptObject,
> PciHandleInterrupt,
> devExt, // ISR Context
> NULL,
> devExt->InterruptVector,
> (KIRQL)devExt->InterruptLevel,
> (KIRQL)devExt->InterruptLevel,
> devExt->InterruptMode,
> irq_shared,
> devExt->InterruptAffinity,
> FALSE);
>
> When it is called, the values are:
> Vector: 0x183
> InterruptLevel: 0x07
> InterruptMode: 0
> irq_shared: 1
> InterruptAffinity: 1
>
> I tried to catch the IoConnectInterrupt for a whatever driver (USB host
> controller, NIC) with values:
> Vector: 0x173
> InterruptLevel: 0x06
> InterruptMode: 0
> share:1, affinity: 1, respectively
>
> Vector: 0x1B4
> InterruptLevel: 0x0A
> InterruptMode: 0
> share:1, affinity: 1.
>
> (… the other drivers work, verified with SoftIce and the ISR is called).
>
> I don’t think this code is wrong, because I kept all of the DDK says about
> IoConnectInterrupt and it works with Win2k ACPI Uniprocessor PC.
> And I’m sure this is a software problem, because I can read the PLX’s
> Interrupt Control/Status register and the bit 15 (Local Interrupt is
> active) is set (of course the local interrupt and the pci interrupt are
> enabled) and I measured the INTA signal and it is active physically.
>
>
> If someone has some suggestion, please help me.
> Thanks,
> Micsa
>
>
>
>
>
>
> ----
>
> Home, no matter how far…
> http://www.home.ro
>

Go to BIOS setup screen and say “PnP OS = No”. This can help.

Maxim Shatskih, Windows DDK MVP
StorageCraft Corporation
xxxxx@storagecraft.com
http://www.storagecraft.com

----- Original Message -----
From: “Csaba Miklos”
To: “Windows System Software Devs Interest List”
Sent: Thursday, August 05, 2004 5:17 PM
Subject: [ntdev] ACPI ISR problem…

>
> Hi,
>
> I have a PCI board with PLX9080 and I wrote a WDM driver for it.
> It works fine on 98, Win2k with “Standard PC”, Win2k with “ACPI Uniprocessor
PC”, WinXP with
> “Standard PC”.
> I have a PC with WinXP “ACPI Uniprocessor PC” and the ISR is not called at
all.
> I tried on this machine the same XP but with “Standard PC” (without ACPI) and
it works.
>
> With ACPI Uniprocessor PC it doesn’t want to call my ISR at all (I verified
with SoftIce).
>
> I use the following code for connecting to the interrupt in the AddDevice
routine of the driver:
>
> devExt->InterruptLevel = (UCHAR)prdTranslated->u.Interrupt.Level;
> devExt->InterruptVector = prdTranslated->u.Interrupt.Vector;
> devExt->InterruptAffinity = prdTranslated->u.Interrupt.Affinity;
> if (prdTranslated->Flags & CM_RESOURCE_INTERRUPT_LATCHED) {
> devExt->InterruptMode = Latched;
> } else {
> devExt->InterruptMode = LevelSensitive;
> }
> ASSERT(devExt->InterruptMode == LevelSensitive);
> irq_shared = (prdTranslated->ShareDisposition == CmResourceShareShared);
>
> code = IoConnectInterrupt(&devExt->InterruptObject,
> PciHandleInterrupt,
> devExt, // ISR Context
> NULL,
> devExt->InterruptVector,
> (KIRQL)devExt->InterruptLevel,
> (KIRQL)devExt->InterruptLevel,
> devExt->InterruptMode,
> irq_shared,
> devExt->InterruptAffinity,
> FALSE);
>
> When it is called, the values are:
> Vector: 0x183
> InterruptLevel: 0x07
> InterruptMode: 0
> irq_shared: 1
> InterruptAffinity: 1
>
> I tried to catch the IoConnectInterrupt for a whatever driver (USB host
controller, NIC) with values:
> Vector: 0x173
> InterruptLevel: 0x06
> InterruptMode: 0
> share:1, affinity: 1, respectively
>
> Vector: 0x1B4
> InterruptLevel: 0x0A
> InterruptMode: 0
> share:1, affinity: 1.
>
> (… the other drivers work, verified with SoftIce and the ISR is called).
>
> I don’t think this code is wrong, because I kept all of the DDK says about
IoConnectInterrupt and it works with Win2k ACPI Uniprocessor PC.
> And I’m sure this is a software problem, because I can read the PLX’s
Interrupt Control/Status register and the bit 15 (Local Interrupt is active) is
set (of course the local interrupt and the pci interrupt are enabled) and I
measured the INTA signal and it is active physically.
>
>
> If someone has some suggestion, please help me.
> Thanks,
> Micsa
>
>
>
>
>
>
> ----
>
> Home, no matter how far…
> http://www.home.ro
>
> —
> Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256
>
> You are currently subscribed to ntdev as: xxxxx@storagecraft.com
> To unsubscribe send a blank email to xxxxx@lists.osr.com

A BIOS upgrade solved my problem…

Thank You


Home, no matter how far…
http://www.home.ro