/* Handlers for pending software interrupts when we already have a trap frame*/
PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY SWInterruptHandlerTable2[3] =
{
- (PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)KiUnexpectedInterrupt,
+ (PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)(PVOID)KiUnexpectedInterrupt,
HalpApcInterrupt2ndEntry,
HalpDispatchInterrupt2ndEntry
};
return _HalpDismissIrqLevel(Irql, Irq, OldIrql);
}
-VOID
+PHAL_SW_INTERRUPT_HANDLER
__cdecl
-HalpHardwareInterruptLevel(VOID)
+HalpHardwareInterruptLevel2(VOID)
{
PKPCR Pcr = KeGetPcr();
ULONG PendingIrqlMask, PendingIrql;
if (PendingIrqlMask)
{
/* Check for in-service delayed interrupt */
- if (Pcr->IrrActive & 0xFFFFFFF0) return;
+ if (Pcr->IrrActive & 0xFFFFFFF0) return NULL;
/* Check if pending IRQL affects hardware state */
BitScanReverse(&PendingIrql, PendingIrqlMask);
Pcr->IRR ^= (1 << PendingIrql);
/* Now handle pending interrupt */
- SWInterruptHandlerTable[PendingIrql]();
+ return SWInterruptHandlerTable[PendingIrql];
}
+
+ return NULL;
}
/* SYSTEM INTERRUPTS **********************************************************/