89 lines
1.5 KiB
C
89 lines
1.5 KiB
C
|
|
||
|
/*++
|
||
|
|
||
|
Copyright (c) 1999-2001 Microsoft Corporation. All Rights Reserved.
|
||
|
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
irq.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module contains defines, global variables, and macros used to enable and disable
|
||
|
processor maskable interrupts as well as the processor performance counter interrupt.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Joseph Ballantyne
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
Kernel Mode
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
extern ULONG PerformanceInterruptState;
|
||
|
|
||
|
#define MASKPERF0INT 1
|
||
|
|
||
|
|
||
|
#define SaveAndDisableMaskableInterrupts() \
|
||
|
__asm \
|
||
|
{ \
|
||
|
__asm pushfd \
|
||
|
__asm cli \
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#define RestoreMaskableInterrupts() \
|
||
|
__asm \
|
||
|
{ \
|
||
|
__asm popfd \
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID __inline SaveAndDisablePerformanceCounterInterrupt(ULONG *pOldState)
|
||
|
{
|
||
|
__asm {
|
||
|
__asm or PerformanceInterruptState, MASKPERF0INT
|
||
|
__asm mov eax, ApicPerfInterrupt
|
||
|
__asm mov ecx, dword ptr[eax]
|
||
|
__asm or dword ptr[eax], MASKED
|
||
|
__asm mov eax, pOldState
|
||
|
__asm mov dword ptr[eax], ecx
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
#define DisablePerformanceCounterInterrupt() \
|
||
|
__asm \
|
||
|
{ \
|
||
|
__asm or PerformanceInterruptState, MASKPERF0INT \
|
||
|
__asm mov eax, ApicPerfInterrupt \
|
||
|
__asm or dword ptr[eax], MASKED \
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#define RestorePerformanceCounterInterrupt(OldState) \
|
||
|
__asm \
|
||
|
{ \
|
||
|
__asm mov ecx, OldState \
|
||
|
__asm mov eax, ApicPerfInterrupt \
|
||
|
__asm test ecx, MASKED \
|
||
|
__asm jz unmask \
|
||
|
__asm or PerformanceInterruptState, MASKPERF0INT \
|
||
|
__asm jmp sethardware \
|
||
|
__asm unmask: \
|
||
|
__asm and PerformanceInterruptState, ~(MASKPERF0INT) \
|
||
|
__asm sethardware: \
|
||
|
__asm mov dword ptr[eax], ecx \
|
||
|
}
|
||
|
|
||
|
|