Refactor spurious interrupt handling to use assembly routine
This commit is contained in:
@@ -117,32 +117,6 @@ HL::Pic::GetCpuApicId(VOID)
|
|||||||
return (ApicMode == APIC_MODE_COMPAT) ? ((ApicId & 0xFFFFFFFF) >> APIC_XAPIC_LDR_SHIFT) : ApicId;
|
return (ApicMode == APIC_MODE_COMPAT) ? ((ApicId & 0xFFFFFFFF) >> APIC_XAPIC_LDR_SHIFT) : ApicId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows an APIC spurious interrupts to end up.
|
|
||||||
*
|
|
||||||
* @return This routine does not return any value.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTCDECL
|
|
||||||
VOID
|
|
||||||
HL::Pic::HandleApicSpuriousService(VOID)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows a PIC spurious interrupts to end up.
|
|
||||||
*
|
|
||||||
* @return This routine does not return any value.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTCDECL
|
|
||||||
VOID
|
|
||||||
HL::Pic::HandlePicSpuriousService(VOID)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the APIC interrupt controller.
|
* Initializes the APIC interrupt controller.
|
||||||
*
|
*
|
||||||
@@ -249,8 +223,7 @@ HL::Pic::InitializeApic(VOID)
|
|||||||
WriteApicRegister(APIC_LINT1, LvtRegister.Long);
|
WriteApicRegister(APIC_LINT1, LvtRegister.Long);
|
||||||
|
|
||||||
/* Register interrupt handlers */
|
/* Register interrupt handlers */
|
||||||
HL::Irq::SetInterruptHandler(APIC_VECTOR_SPURIOUS, (PVOID)HandleApicSpuriousService);
|
HL::Irq::SetInterruptHandler(APIC_VECTOR_SPURIOUS, (PVOID)ArHandleSpuriousInterrupt);
|
||||||
HL::Irq::SetInterruptHandler(PIC1_VECTOR_SPURIOUS, (PVOID)HandlePicSpuriousService);
|
|
||||||
|
|
||||||
/* Clear any pre-existing errors */
|
/* Clear any pre-existing errors */
|
||||||
WriteApicRegister(APIC_ESR, 0);
|
WriteApicRegister(APIC_ESR, 0);
|
||||||
@@ -332,6 +305,9 @@ HL::Pic::InitializeLegacyPic(VOID)
|
|||||||
|
|
||||||
/* Mask all interrupts on PIC2 port */
|
/* Mask all interrupts on PIC2 port */
|
||||||
HL::IoPort::WritePort8(PIC2_DATA_PORT, 0xFF);
|
HL::IoPort::WritePort8(PIC2_DATA_PORT, 0xFF);
|
||||||
|
|
||||||
|
/* Register interrupt handler */
|
||||||
|
HL::Irq::SetInterruptHandler(PIC1_VECTOR_SPURIOUS, (PVOID)ArHandleSpuriousInterrupt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ namespace HL
|
|||||||
private:
|
private:
|
||||||
STATIC XTAPI BOOLEAN CheckApicSupport(VOID);
|
STATIC XTAPI BOOLEAN CheckApicSupport(VOID);
|
||||||
STATIC XTAPI BOOLEAN CheckX2ApicSupport(VOID);
|
STATIC XTAPI BOOLEAN CheckX2ApicSupport(VOID);
|
||||||
STATIC XTCDECL VOID HandleApicSpuriousService(VOID);
|
|
||||||
STATIC XTCDECL VOID HandlePicSpuriousService(VOID);
|
|
||||||
STATIC XTAPI VOID InitializeApic(VOID);
|
STATIC XTAPI VOID InitializeApic(VOID);
|
||||||
STATIC XTAPI VOID InitializeLegacyPic(VOID);
|
STATIC XTAPI VOID InitializeLegacyPic(VOID);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user