238 ULONG IrrBit = 1UL << VectorLow;
296 return (
KIRQL)__readcr8();
297#elif defined(APIC_LAZY_IRQL)
312#elif defined(APIC_LAZY_IRQL)
319#define ApicRaiseIrql ApicSetIrql
339#define ApicLowerIrql ApicSetIrql
424 if (VersionRegister.
MaxLVT >= 4)
428 if (VersionRegister.
MaxLVT >= 5)
597 DPRINT1(
"I/O APIC at 0x%lx with input base %lu ignored\n", PhysicalBase, InputBase);
618 DPRINT1(
"No I/O APIC responds at 0x%lx\n", PhysicalBase);
623 Unit->InputBase = InputBase;
1067#ifdef APIC_LAZY_IRQL
1069 if (CurrentIrql >=
Irql)
#define EFLAGS_INTERRUPT_MASK
static VOID NTAPI HalpMapIoApic(_In_ ULONG PhysicalBase, _In_ ULONG InputBase)
Maps an I/O APIC and adds it to the units in use.
VOID NTAPI ApicInitializeLocalApic(_In_ ULONG Cpu)
static NTSTATUS NTAPI HalpQueryVectorInput(_In_ ULONG Vector, _Out_ PULONG Input, _Out_ PKINTERRUPT_POLARITY Polarity)
Asks the ACPI driver for the input of a vector it allocated.
VOID DECLSPEC_NORETURN FASTCALL HalpApcInterruptHandler(IN PKTRAP_FRAME TrapFrame)
const KIRQL HalVectorToIRQL[16]
VOID NTAPI HalDisableSystemInterrupt(_In_ ULONG Vector, _In_ KIRQL Irql)
VOID FASTCALL KfLowerIrql(IN KIRQL OldIrql)
BOOLEAN NTAPI HalEnableSystemInterrupt(_In_ ULONG Vector, _In_ KIRQL Irql, _In_ KINTERRUPT_MODE InterruptMode)
VOID NTAPI HalEndSystemInterrupt(IN KIRQL OldIrql, IN PKTRAP_FRAME TrapFrame)
FORCEINLINE VOID IOApicWrite(_In_ ULONG_PTR Base, _In_ UCHAR Register, _In_ ULONG Value)
UCHAR HalpVectorToIndex[256]
FORCEINLINE VOID ApicSetIrql(KIRQL Irql)
UCHAR FASTCALL HalpIrqToVector(_In_ UCHAR Irq)
KIRQL FASTCALL HalpVectorToIrql(UCHAR Vector)
VOID NTAPI ApicInitializeIOApic(VOID)
FORCEINLINE VOID ApicWriteIORedirectionEntry(_In_ ULONG Input, _In_ IOAPIC_REDIRECTION_REGISTER ReDirReg)
Programs a redirection entry and records it in the shadow table.
UCHAR NTAPI HalpAllocateSystemInterrupt(_In_ UCHAR Irq, _In_ UCHAR Vector)
struct _HALP_IOAPIC_UNIT HALP_IOAPIC_UNIT
BOOLEAN NTAPI HalBeginSystemInterrupt(_In_ KIRQL Irql, _In_ ULONG Vector, _Out_ PKIRQL OldIrql)
FORCEINLINE VOID ApicLowerIrql(KIRQL Irql)
FORCEINLINE VOID ApicRequestSelfInterrupt(IN UCHAR Vector, UCHAR TriggerMode)
VOID DECLSPEC_NORETURN FASTCALL HalpDispatchInterruptHandler(IN PKTRAP_FRAME TrapFrame)
UCHAR FASTCALL HalpVectorToIrq(UCHAR Vector)
HALP_APIC_INFO_TABLE HalpApicInfoTable
FORCEINLINE VOID ApicSendEOI(void)
static KINTERRUPT_POLARITY NTAPI HalpGetInputPolarity(_In_ ULONG Input, _In_ KINTERRUPT_MODE Mode, _In_ KINTERRUPT_POLARITY Reported)
Picks the polarity to program for an input.
FORCEINLINE KIRQL ApicGetProcessorIrql(VOID)
ULONG NTAPI HalpGetRootInterruptVector(_In_ ULONG BusInterruptLevel, _In_ ULONG BusInterruptVector, _Out_ PKIRQL OutIrql, _Out_ PKAFFINITY OutAffinity)
IOAPIC_REDIRECTION_REGISTER HalpIoApicShadow[HALP_MAX_INPUTS]
UCHAR HalpGsivToVector[256]
HALP_IOAPIC_UNIT HalpIoApics[HALP_MAX_IOAPICS]
VOID FASTCALL HalRequestSoftwareInterrupt(IN KIRQL Irql)
VOID NTAPI HalpInitializePICs(_In_ BOOLEAN EnableInterrupts)
FORCEINLINE IOAPIC_REDIRECTION_REGISTER ApicReadIORedirectionEntry(_In_ ULONG Input)
Returns a redirection entry from the shadow table, without accessing the I/O APIC.
VOID NTAPI HalpSendEOI(VOID)
struct _HALP_IOAPIC_UNIT * PHALP_IOAPIC_UNIT
const UCHAR HalpIRQLtoTPR[32]
FORCEINLINE ULONG IOApicRead(_In_ ULONG_PTR Base, _In_ UCHAR Register)
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
VOID FASTCALL HalClearSoftwareInterrupt(IN KIRQL Irql)
FORCEINLINE KIRQL ApicGetCurrentIrql(VOID)
FORCEINLINE BOOLEAN HalpFindIoApicInput(_In_ ULONG Input, _Out_ PHALP_IOAPIC_UNIT *Unit)
Finds the I/O APIC that serves an input.
KIRQL NTAPI KeRaiseIrqlToSynchLevel(VOID)
#define APIC_CLOCK_VECTOR
#define APIC_SPURIOUS_VECTOR
#define APIC_ERROR_VECTOR
#define APIC_PROFILE_VECTOR
#define HALP_IOAPIC_MAX_ENTRIES
enum _APIC_REGISTER APIC_REGISTER
#define ApicLogicalId(Cpu)
VOID __cdecl ApicSpuriousService(VOID)
FORCEINLINE ULONG ApicRead(APIC_REGISTER Register)
#define APIC_RESERVED_VECTOR
VOID __cdecl ApicErrorService(VOID)
FORCEINLINE VOID ApicWrite(APIC_REGISTER Register, ULONG Value)
#define IrqlToSoftVector(Irql)
VOID NTAPI KiDispatchInterrupt(VOID)
#define WRITE_REGISTER_ULONG(r, v)
#define READ_REGISTER_ULONG(r)
DECLSPEC_NORETURN VOID NTAPI KeBugCheck(ULONG BugCheckCode)
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
#define DECLSPEC_NORETURN
#define KeGetCurrentIrql()
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment KeRaiseIrqlToDpcLevel
KAFFINITY HalpDefaultInterruptAffinity
VOID HalpClockInterrupt(VOID)
VOID NTAPI HalpRegisterVector(IN UCHAR Flags, IN ULONG BusVector, IN ULONG SystemVector, IN KIRQL Irql)
VOID NTAPI HalpInitializeLegacyPICs(VOID)
VOID __cdecl HalpDispatchInterrupt(VOID)
#define HalAddressToPte(x)
VOID __cdecl HalpApcInterrupt(VOID)
VOID __cdecl HalpClockIpi(VOID)
#define _ReadWriteBarrier()
PPC_QUAL unsigned char __readfsbyte(const unsigned long Offset)
PPC_QUAL void __writemsr(const unsigned long Value)
PPC_QUAL unsigned long long __readmsr()
PPC_QUAL void __writefsbyte(const unsigned long Offset, const unsigned char Data)
__INTRIN_INLINE void __writeeflags(uintptr_t Value)
__INTRIN_INLINE uintptr_t __readeflags(void)
#define HalGetVectorInputOverride
_In_ ULONG _In_ ULONG Offset
FORCEINLINE BOOLEAN KiUserTrap(IN PKTRAP_FRAME TrapFrame)
FORCEINLINE VOID KeRegisterInterruptHandler(IN ULONG Vector, IN PVOID Handler)
DECLSPEC_NORETURN VOID FASTCALL KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
VOID NTAPI KiDeliverApc(IN KPROCESSOR_MODE DeliveryMode, IN PKEXCEPTION_FRAME ExceptionFrame, IN PKTRAP_FRAME TrapFrame)
enum _KINTERRUPT_MODE KINTERRUPT_MODE
void __cdecl _disable(void)
void __cdecl _enable(void)
_Requires_lock_held_ SpinLock _Releases_lock_ SpinLock _In_ _IRQL_restores_ KIRQL NewIrql
#define HALP_ISA_IRQ_COUNT
#define HALP_APIC_INFO_TABLE_IOAPIC_NUMBER
ULONG IsaIrqGsi[HALP_ISA_IRQ_COUNT]
ULONG IoApicPA[HALP_APIC_INFO_TABLE_IOAPIC_NUMBER]
ULONG IoApicIrqBase[HALP_APIC_INFO_TABLE_IOAPIC_NUMBER]
KINTERRUPT_POLARITY IsaIrqPolarity[HALP_ISA_IRQ_COUNT]
FORCEINLINE VOID KiEnterInterruptTrap(IN PKTRAP_FRAME TrapFrame)
#define FIELD_OFFSET(t, f)
#define STATUS_INVALID_PARAMETER
UINT64 DestinationShortHand
UINT32 FocusCPUCoreChecking
UINT32 ExtRegSpacePresent
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ ULONG _In_ ULONG BusInterruptLevel
_In_ ULONG _In_ ULONG _In_ ULONG BusInterruptVector
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE InterruptMode
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
@ InterruptPolarityUnknown
enum _KINTERRUPT_POLARITY KINTERRUPT_POLARITY
enum _KINTERRUPT_POLARITY * PKINTERRUPT_POLARITY