89 lines
1.7 KiB
C
89 lines
1.7 KiB
C
|
/*++
|
||
|
|
||
|
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;
|
||
|
}
|