#include <hal.h>
#include "apicp.h"
#include <debug.h>
Go to the source code of this file.
|
FORCEINLINE ULONG | IOApicRead (UCHAR Register) |
|
FORCEINLINE VOID | IOApicWrite (UCHAR Register, ULONG Value) |
|
FORCEINLINE VOID | ApicWriteIORedirectionEntry (UCHAR Index, IOAPIC_REDIRECTION_REGISTER ReDirReg) |
|
FORCEINLINE IOAPIC_REDIRECTION_REGISTER | ApicReadIORedirectionEntry (UCHAR Index) |
|
FORCEINLINE VOID | ApicRequestSelfInterrupt (IN UCHAR Vector, UCHAR TriggerMode) |
|
FORCEINLINE VOID | ApicSendEOI (void) |
|
FORCEINLINE KIRQL | ApicGetProcessorIrql (VOID) |
|
FORCEINLINE KIRQL | ApicGetCurrentIrql (VOID) |
|
FORCEINLINE VOID | ApicSetIrql (KIRQL Irql) |
|
FORCEINLINE VOID | ApicLowerIrql (KIRQL Irql) |
|
UCHAR FASTCALL | HalpIrqToVector (UCHAR Irq) |
|
KIRQL FASTCALL | HalpVectorToIrql (UCHAR Vector) |
|
UCHAR FASTCALL | HalpVectorToIrq (UCHAR Vector) |
|
VOID NTAPI | HalpSendEOI (VOID) |
|
VOID NTAPI | ApicInitializeLocalApic (ULONG Cpu) |
|
UCHAR NTAPI | HalpAllocateSystemInterrupt (_In_ UCHAR Irq, _In_ UCHAR Vector) |
|
ULONG NTAPI | HalpGetRootInterruptVector (_In_ ULONG BusInterruptLevel, _In_ ULONG BusInterruptVector, _Out_ PKIRQL OutIrql, _Out_ PKAFFINITY OutAffinity) |
|
VOID NTAPI | ApicInitializeIOApic (VOID) |
|
VOID NTAPI | HalpInitializePICs (IN BOOLEAN EnableInterrupts) |
|
VOID DECLSPEC_NORETURN FASTCALL | HalpApcInterruptHandler (IN PKTRAP_FRAME TrapFrame) |
|
VOID DECLSPEC_NORETURN FASTCALL | HalpDispatchInterruptHandler (IN PKTRAP_FRAME TrapFrame) |
|
VOID FASTCALL | HalRequestSoftwareInterrupt (IN KIRQL Irql) |
|
VOID FASTCALL | HalClearSoftwareInterrupt (IN KIRQL Irql) |
|
BOOLEAN NTAPI | HalEnableSystemInterrupt (IN ULONG Vector, IN KIRQL Irql, IN KINTERRUPT_MODE InterruptMode) |
|
VOID NTAPI | HalDisableSystemInterrupt (IN ULONG Vector, IN KIRQL Irql) |
|
BOOLEAN NTAPI | HalBeginSystemInterrupt (IN KIRQL Irql, IN ULONG Vector, OUT PKIRQL OldIrql) |
|
VOID NTAPI | HalEndSystemInterrupt (IN KIRQL OldIrql, IN PKTRAP_FRAME TrapFrame) |
|
KIRQL NTAPI | KeGetCurrentIrql (VOID) |
|
VOID FASTCALL | KfLowerIrql (IN KIRQL OldIrql) |
|
KIRQL FASTCALL | KfRaiseIrql (IN KIRQL NewIrql) |
|
KIRQL NTAPI | KeRaiseIrqlToDpcLevel (VOID) |
|
KIRQL NTAPI | KeRaiseIrqlToSynchLevel (VOID) |
|
◆ APIC_LAZY_IRQL
◆ ApicRaiseIrql
◆ NDEBUG
◆ ApicGetCurrentIrql()
◆ ApicGetProcessorIrql()
◆ ApicInitializeIOApic()
Definition at line 459 of file apic.c.
#define _ReadWriteBarrier()
FORCEINLINE ULONG ApicRead(APIC_REGISTER Register)
#define HalAddressToPte(x)
FORCEINLINE VOID ApicWriteIORedirectionEntry(UCHAR Index, IOAPIC_REDIRECTION_REGISTER ReDirReg)
#define APIC_CLOCK_VECTOR
UCHAR HalpVectorToIndex[256]
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG Vector
Referenced by HalpInitializePICs().
◆ ApicInitializeLocalApic()
Definition at line 291 of file apic.c.
360 #ifdef APIC_LAZY_IRQL
FORCEINLINE ULONG ApicRead(APIC_REGISTER Register)
#define APIC_SPURIOUS_VECTOR
#define ApicLogicalId(Cpu)
FORCEINLINE VOID ApicWrite(APIC_REGISTER Register, ULONG Value)
PPC_QUAL unsigned long long __readmsr()
UINT32 FocusCPUCoreChecking
#define APIC_ERROR_VECTOR
PPC_QUAL void __writemsr(const unsigned long Value)
FORCEINLINE VOID KeRegisterInterruptHandler(IN ULONG Vector, IN PVOID Handler)
FORCEINLINE VOID ApicSetIrql(KIRQL Irql)
VOID __cdecl ApicSpuriousService(VOID)
Referenced by HalpInitProcessor().
◆ ApicLowerIrql()
◆ ApicReadIORedirectionEntry()
◆ ApicRequestSelfInterrupt()
Definition at line 139 of file apic.c.
152 ULONG IrrBit = 1
UL << VectorLow;
FORCEINLINE ULONG ApicRead(APIC_REGISTER Register)
void __cdecl _enable(void)
__INTRIN_INLINE uintptr_t __readeflags(void)
FORCEINLINE VOID ApicWrite(APIC_REGISTER Register, ULONG Value)
_Must_inspect_result_ _In_ ULONG Flags
UINT64 DestinationShortHand
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG Vector
void __cdecl _disable(void)
#define EFLAGS_INTERRUPT_MASK
Referenced by HalBeginSystemInterrupt(), and HalRequestSoftwareInterrupt().
◆ ApicSendEOI()
◆ ApicSetIrql()
Definition at line 221 of file apic.c.
225 #elif defined(APIC_LAZY_IRQL)
FORCEINLINE VOID ApicWrite(APIC_REGISTER Register, ULONG Value)
PPC_QUAL void __writefsbyte(const unsigned long Offset, const unsigned char Data)
#define FIELD_OFFSET(t, f)
Referenced by ApicInitializeLocalApic().
◆ ApicWriteIORedirectionEntry()
◆ HalBeginSystemInterrupt()
Definition at line 747 of file apic.c.
757 #ifdef APIC_LAZY_IRQL 759 if (CurrentIrql >=
Irql)
FORCEINLINE VOID ApicRequestSelfInterrupt(IN UCHAR Vector, UCHAR TriggerMode)
void __cdecl _enable(void)
FORCEINLINE IOAPIC_REDIRECTION_REGISTER ApicReadIORedirectionEntry(UCHAR Index)
FORCEINLINE KIRQL ApicGetCurrentIrql(VOID)
FORCEINLINE VOID ApicWrite(APIC_REGISTER Register, ULONG Value)
UCHAR HalpVectorToIndex[256]
#define APIC_RESERVED_VECTOR
_In_ WDFCOLLECTION _In_ ULONG Index
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG Vector
FORCEINLINE VOID ApicSendEOI(void)
Referenced by HalpApcInterruptHandler(), HalpDispatchInterruptHandler(), and MpsTimerHandler().
◆ HalClearSoftwareInterrupt()
◆ HalDisableSystemInterrupt()
Definition at line 723 of file apic.c.
FORCEINLINE VOID IOApicWrite(UCHAR Register, ULONG Value)
UCHAR HalpVectorToIndex[256]
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG Vector
FORCEINLINE ULONG IOApicRead(UCHAR Register)
◆ HalEnableSystemInterrupt()
Definition at line 669 of file apic.c.
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE InterruptMode
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
FORCEINLINE IOAPIC_REDIRECTION_REGISTER ApicReadIORedirectionEntry(UCHAR Index)
#define ApicLogicalId(Cpu)
FORCEINLINE VOID ApicWriteIORedirectionEntry(UCHAR Index, IOAPIC_REDIRECTION_REGISTER ReDirReg)
UCHAR HalpVectorToIndex[256]
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG Vector
◆ HalEndSystemInterrupt()
Definition at line 813 of file apic.c.
FORCEINLINE VOID ApicLowerIrql(KIRQL Irql)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
FORCEINLINE VOID ApicSendEOI(void)
Referenced by MpsTimerHandler().
◆ HalpAllocateSystemInterrupt()
Definition at line 368 of file apic.c.
FORCEINLINE VOID ApicWriteIORedirectionEntry(UCHAR Index, IOAPIC_REDIRECTION_REGISTER ReDirReg)
UCHAR HalpVectorToIndex[256]
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG Vector
Referenced by HalpGetRootInterruptVector().
◆ HalpApcInterruptHandler()
Definition at line 556 of file apic.c.
565 #ifdef APIC_LAZY_IRQL void __cdecl _enable(void)
FORCEINLINE KIRQL ApicGetProcessorIrql(VOID)
DECLSPEC_NORETURN VOID FASTCALL KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
FORCEINLINE KIRQL ApicGetCurrentIrql(VOID)
FORCEINLINE VOID ApicLowerIrql(KIRQL Irql)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
FORCEINLINE BOOLEAN KiUserTrap(IN PKTRAP_FRAME TrapFrame)
FORCEINLINE VOID KiEnterInterruptTrap(IN PKTRAP_FRAME TrapFrame)
void __cdecl _disable(void)
FORCEINLINE VOID ApicSendEOI(void)
VOID NTAPI KiDeliverApc(IN KPROCESSOR_MODE DeliveryMode, IN PKEXCEPTION_FRAME ExceptionFrame, IN PKTRAP_FRAME TrapFrame)
BOOLEAN NTAPI HalBeginSystemInterrupt(IN KIRQL Irql, IN ULONG Vector, OUT PKIRQL OldIrql)
◆ HalpDispatchInterruptHandler()
Definition at line 605 of file apic.c.
613 #ifdef APIC_LAZY_IRQL void __cdecl _enable(void)
FORCEINLINE KIRQL ApicGetProcessorIrql(VOID)
DECLSPEC_NORETURN VOID FASTCALL KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
FORCEINLINE KIRQL ApicGetCurrentIrql(VOID)
FORCEINLINE VOID ApicLowerIrql(KIRQL Irql)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
VOID NTAPI KiDispatchInterrupt(VOID)
FORCEINLINE VOID KiEnterInterruptTrap(IN PKTRAP_FRAME TrapFrame)
void __cdecl _disable(void)
FORCEINLINE VOID ApicSendEOI(void)
BOOLEAN NTAPI HalBeginSystemInterrupt(IN KIRQL Irql, IN ULONG Vector, OUT PKIRQL OldIrql)
◆ HalpGetRootInterruptVector()
Definition at line 400 of file apic.c.
UCHAR FASTCALL HalpVectorToIrq(UCHAR Vector)
_In_ ULONG _In_ ULONG BusInterruptLevel
KAFFINITY HalpDefaultInterruptAffinity
UCHAR FASTCALL HalpIrqToVector(UCHAR Irq)
KIRQL FASTCALL HalpVectorToIrql(UCHAR Vector)
UCHAR NTAPI HalpAllocateSystemInterrupt(_In_ UCHAR Irq, _In_ UCHAR Vector)
UCHAR HalpVectorToIndex[256]
_In_ ULONG _In_ ULONG Offset
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG Vector
Referenced by HalGetInterruptVector(), and HalpGetSystemInterruptVector().
◆ HalpInitializePICs()
Definition at line 513 of file apic.c.
VOID NTAPI HalpRegisterVector(IN UCHAR Flags, IN ULONG BusVector, IN ULONG SystemVector, IN KIRQL Irql)
#define APIC_SPURIOUS_VECTOR
__INTRIN_INLINE uintptr_t __readeflags(void)
VOID __cdecl HalpDispatchInterrupt(VOID)
VOID NTAPI ApicInitializeIOApic(VOID)
#define APIC_CLOCK_VECTOR
UCHAR HalpVectorToIndex[256]
#define APIC_RESERVED_VECTOR
VOID __cdecl HalpApcInterrupt(VOID)
__INTRIN_INLINE void __writeeflags(uintptr_t Value)
VOID HalpClockInterrupt(VOID)
FORCEINLINE VOID KeRegisterInterruptHandler(IN ULONG Vector, IN PVOID Handler)
void __cdecl _disable(void)
VOID NTAPI HalpInitializeLegacyPICs(VOID)
#define EFLAGS_INTERRUPT_MASK
◆ HalpIrqToVector()
◆ HalpSendEOI()
Definition at line 284 of file apic.c.
FORCEINLINE VOID ApicSendEOI(void)
◆ HalpVectorToIrq()
Definition at line 277 of file apic.c.
UCHAR HalpVectorToIndex[256]
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG Vector
Referenced by HalpGetRootInterruptVector().
◆ HalpVectorToIrql()
◆ HalRequestSoftwareInterrupt()
Definition at line 650 of file apic.c.
FORCEINLINE VOID ApicRequestSelfInterrupt(IN UCHAR Vector, UCHAR TriggerMode)
#define IrqlToSoftVector(Irql)
◆ IOApicRead()
◆ IOApicWrite()
◆ KeGetCurrentIrql()
Definition at line 829 of file apic.c.
FORCEINLINE KIRQL ApicGetCurrentIrql(VOID)
◆ KeRaiseIrqlToDpcLevel()
Definition at line 878 of file apic.c.
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
◆ KeRaiseIrqlToSynchLevel()
Definition at line 885 of file apic.c.
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
◆ KfLowerIrql()
Definition at line 837 of file apic.c.
FORCEINLINE KIRQL ApicGetCurrentIrql(VOID)
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
FORCEINLINE VOID ApicLowerIrql(KIRQL Irql)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
◆ KfRaiseIrql()
Definition at line 854 of file apic.c.
FORCEINLINE KIRQL ApicGetCurrentIrql(VOID)
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
_Requires_lock_held_ SpinLock _Releases_lock_ SpinLock _In_ _IRQL_restores_ KIRQL NewIrql
Referenced by KeRaiseIrqlToDpcLevel(), and KeRaiseIrqlToSynchLevel().
◆ ApicVersion
◆ HalpIRQLtoTPR
◆ HalpVectorToIndex
UCHAR HalpVectorToIndex[256] |
◆ HalVectorToIRQL
Initial value:=
{
0,
0xff,
0xff,
1,
2,
4,
5,
6,
7,
8,
9,
10,
27,
28,
29,
31,
}
Definition at line 69 of file apic.c.