windows-nt/Source/XPSP1/NT/base/ntos/ke/amd64/intplt.c

89 lines
1.7 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
intplt.c
Abstract:
This module implements platform specific code to support the processing
of interrupts.
Author:
David N. Cutler (davec) 30-Aug-2000
Environment:
Kernel mode only.
Revision History:
--*/
#include "ki.h"
BOOLEAN
KeSynchronizeExecution (
IN PKINTERRUPT Interrupt,
IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
IN PVOID SynchronizeContext
)
/*++
Routine Description:
This function synchronizes the execution of the specified routine with
the execution of the service routine associated with the specified
interrupt object.
Arguments:
Interrupt - Supplies a pointer to an interrupt object.
SynchronizeRoutine - Supplies a pointer to the function whose
execution is to be synchronized with the execution of the service
routine associated with the specified interrupt object.
SynchronizeContext - Supplies a context pointer which is to be
passed to the synchronization function as a parameter.
Return Value:
The value returned by the synchronization routine is returned as the
function value.
--*/
{
KIRQL OldIrql;
BOOLEAN Status;
//
// Raise IRQL to the interrupt synchronization level and acquire the
// actual interrupt spinlock.
//
OldIrql = KfRaiseIrql(Interrupt->SynchronizeIrql);
KiAcquireSpinLock(Interrupt->ActualLock);
//
// Call the specfied synchronization routine.
//
Status = (SynchronizeRoutine)(SynchronizeContext);
//
// Release the spin lock, lower IRQL to its previous value, and return
// the sysnchronization routine status.
//
KiReleaseSpinLock(Interrupt->ActualLock);
KeLowerIrql(OldIrql);
return Status;
}