admin
base
basedrv
boot
busdrv
cluster
cmd
crts
ddk
dload
dloadhandler
efiutil
eventlog
firmware
fs
fsrec
hals
headless
inc
mspatch
mvdm
ntdll
ntdllsym
ntos
arb
cache
config
dbgk
ex
fsrtl
fstub
inc
init
io
kd64
ke
alpha
amd64
alignem.c
allproc.c
apcint.asm
apcuser.c
callback.c
callout.asm
clockint.asm
cpuid.asm
ctxswap.asm
dpcint.asm
dpcplt.c
exceptn.c
flush.c
flushtb.c
genamd64.m4
idle.asm
initkr.c
intipi.asm
intobj.c
intplt.c
intsup.asm
iopm.c
ipi.c
kiamd64.h
misc.c
miscs.asm
pat.c
procstat.asm
procswap.c
profint.asm
queuelock.c
services.stb
sources
spinlock.c
start.asm
table.stb
threadbg.asm
thredini.c
timindex.c
trap.asm
xcpt4.c
zero.asm
axp64
i386
ia64
mp
pae
paemp
tests
up
aligntrk.c
apcobj.c
apcsup.c
balmgr.c
bugcheck.c
channel.c
config.c
debug.c
devquobj.c
dirs
dpcobj.c
dpcsup.c
eventobj.c
genxx.h
genxx.inc
interobj.c
kernldat.c
kevutil.c
ki.h
kiinit.c
miscc.c
mutntobj.c
procobj.c
profobj.c
queueobj.c
raisexcp.c
semphobj.c
services.tab
sources.inc
thredobj.c
thredsup.c
timerobj.c
timersup.c
wait.c
waitsup.c
xipi.c
yield.c
lpc
mm
nls
ntsym
ob
perf
po
ps
raw
rtl
se
vdm
verifier
wmi
dirs
makefil0
ntoskrnl.inc
project.mk
wdm.mng
ntsetup
pnp
published
qfe
remoteboot
screg
seaudit
strsafe
stublibs
subsys
testlockout
tools
urtl
wdmdrv
wdmlib
win32
wmi
wow64
xip
zlib
dirs
prerelease.inc
project.mk
com
developer
drivers
ds
enduser
inetcore
inetsrv
loc
mergedcomponents
multimedia
net
printscan
public
published
sdktools
shell
termsrv
tools
windows
dirs
makefil0
89 lines
1.8 KiB
C
89 lines
1.8 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;
|
|
}
|