hi
I’m using a modified version of the i8042 PS/2 version and I’m hitting a debug break in the code when I hit the power button to resume from standby.
My guess is that an interrupt is firing without the ISR being connected, based on the call stack below. Note that this is for custom hardware - I’m using a modified version of the i8042 driver, but I made very minimal changes - nothing in the area of power management.
In the driver source code, I notice that interrupts are not disabled (no call to I8xToggleInterrupts(FALSE) ) on S3/D3 but if the interrupts are level triggered, the driver’s ISR is disconnected from the interrupt (IoDisconnectInterrupt).
Can you tell me why interrupts are not being explicitly disabled? Since I doubt this is accidental, is it that interrupts shouldn’t be firing or is it that the OS handles the interrupts (in some default handler) if it does fire? Please enlighten me as to the details on this.
It may be that I’m running into hardware differences from a traditional PS/2 mouse. Maybe for a traditional PS/2 things are powered up and down differently - so you can’t get an interrupt and don’t have to worry about disabling them for D3.
When I hit the power button to resume from standby, I get the following:
Break instruction exception - code 80000003 (first chance)
nt!DbgBreakPointWithStatus+0x4:
80526da8 cc int 3
The callstack:
nt!DbgBreakPointWithStatus+0x4
nt!KeEnterKernelDebugger+0x3f
nt!Kei386EoiHelper+0x627
hal+0xe18
hal!HalBeginSystemInterrupt+0xa4
pci!PciStallForPowerChange+0x77
pci!PciSetPowerManagedDevicePowerState+0xaf
pci!PciPdoSetPowerState+0xc7
pci!PciDispatchIrp+0x88
nt!IoBuildPartialMdl+0xed
nt!PoCallDriver+0x195
ACPI!ACPIDispatchForwardPowerIrp+0x40
ACPI!ACPIDeviceIrpForwardRequest+0x46
ACPI!ACPIDeviceCompleteRequest+0xc5
ACPI!ACPIDEvicePowerProessGenericPhase+0x72
nt!KiDispatchInterrupt+0x35d
thanks!