Hook up profile interrupt handler
This commit is contained in:
@@ -10,6 +10,48 @@
|
|||||||
#include <xtos.hh>
|
#include <xtos.hh>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles profiling interrupt.
|
||||||
|
*
|
||||||
|
* @param TrapFrame
|
||||||
|
* Supplies a kernel trap frame pushed by common interrupt handler.
|
||||||
|
*
|
||||||
|
* @return This routine does not return any value.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
HL::Irq::HandleProfileInterrupt(IN PKTRAP_FRAME TrapFrame)
|
||||||
|
{
|
||||||
|
/* Send EOI*/
|
||||||
|
HL::Pic::SendEoi();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles unexpected or unmapped system interrupts.
|
||||||
|
*
|
||||||
|
* @param TrapFrame
|
||||||
|
* Supplies a kernel trap frame pushed by common interrupt handler.
|
||||||
|
*
|
||||||
|
* @return This routine does not return any value.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
HL::Irq::HandleUnexpectedInterrupt(IN PKTRAP_FRAME TrapFrame)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
|
||||||
|
/* Disable interrupts */
|
||||||
|
AR::CpuFunc::ClearInterruptFlag();
|
||||||
|
|
||||||
|
/* Print debug message and raise kernel panic */
|
||||||
|
DebugPrint(L"ERROR: Caught unexpected interrupt (0x%.2llX)!\n", TrapFrame->Vector);
|
||||||
|
KE::Crash::Panic(0x47, TrapFrame->Vector, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the registered interrupt handler for the specified IDT vector.
|
* Returns the registered interrupt handler for the specified IDT vector.
|
||||||
*
|
*
|
||||||
@@ -118,27 +160,3 @@ HL::Irq::RegisterSystemInterruptHandler(IN ULONG Vector,
|
|||||||
/* Update interrupt handler in the processor's interrupt dispatch table */
|
/* Update interrupt handler in the processor's interrupt dispatch table */
|
||||||
ProcessorBlock->InterruptDispatchTable[Vector] = Handler;
|
ProcessorBlock->InterruptDispatchTable[Vector] = Handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles unexpected or unmapped system interrupts.
|
|
||||||
*
|
|
||||||
* @param TrapFrame
|
|
||||||
* Supplies a kernel trap frame pushed by common interrupt handler.
|
|
||||||
*
|
|
||||||
* @return This routine does not return any value.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTCDECL
|
|
||||||
VOID
|
|
||||||
HL::Irq::HandleUnexpectedInterrupt(IN PKTRAP_FRAME TrapFrame)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
|
|
||||||
/* Disable interrupts */
|
|
||||||
AR::CpuFunc::ClearInterruptFlag();
|
|
||||||
|
|
||||||
/* Print debug message and raise kernel panic */
|
|
||||||
DebugPrint(L"ERROR: Caught unexpected interrupt (0x%.2llX)!\n", TrapFrame->Vector);
|
|
||||||
KE::Crash::Panic(0x47, TrapFrame->Vector, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -10,6 +10,48 @@
|
|||||||
#include <xtos.hh>
|
#include <xtos.hh>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles profiling interrupt.
|
||||||
|
*
|
||||||
|
* @param TrapFrame
|
||||||
|
* Supplies a kernel trap frame pushed by common interrupt handler.
|
||||||
|
*
|
||||||
|
* @return This routine does not return any value.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
HL::Irq::HandleProfileInterrupt(IN PKTRAP_FRAME TrapFrame)
|
||||||
|
{
|
||||||
|
/* Send EOI*/
|
||||||
|
HL::Pic::SendEoi();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles unexpected or unmapped system interrupts.
|
||||||
|
*
|
||||||
|
* @param TrapFrame
|
||||||
|
* Supplies a kernel trap frame pushed by common interrupt handler.
|
||||||
|
*
|
||||||
|
* @return This routine does not return any value.
|
||||||
|
*
|
||||||
|
* @since XT 1.0
|
||||||
|
*/
|
||||||
|
XTCDECL
|
||||||
|
VOID
|
||||||
|
HL::Irq::HandleUnexpectedInterrupt(IN PKTRAP_FRAME TrapFrame)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
|
||||||
|
/* Disable interrupts */
|
||||||
|
AR::CpuFunc::ClearInterruptFlag();
|
||||||
|
|
||||||
|
/* Print debug message and raise kernel panic */
|
||||||
|
DebugPrint(L"ERROR: Caught unexpected interrupt (0x%.2lX)!\n", TrapFrame->Vector);
|
||||||
|
KE::Crash::Panic(0x47, TrapFrame->Vector, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the registered interrupt handler for the specified IDT vector.
|
* Returns the registered interrupt handler for the specified IDT vector.
|
||||||
*
|
*
|
||||||
@@ -116,27 +158,3 @@ HL::Irq::RegisterSystemInterruptHandler(IN ULONG Vector,
|
|||||||
/* Update interrupt handler in the processor's interrupt dispatch table */
|
/* Update interrupt handler in the processor's interrupt dispatch table */
|
||||||
ProcessorBlock->InterruptDispatchTable[Vector] = Handler;
|
ProcessorBlock->InterruptDispatchTable[Vector] = Handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles unexpected or unmapped system interrupts.
|
|
||||||
*
|
|
||||||
* @param TrapFrame
|
|
||||||
* Supplies a kernel trap frame pushed by common interrupt handler.
|
|
||||||
*
|
|
||||||
* @return This routine does not return any value.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTCDECL
|
|
||||||
VOID
|
|
||||||
HL::Irq::HandleUnexpectedInterrupt(IN PKTRAP_FRAME TrapFrame)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
|
|
||||||
/* Disable interrupts */
|
|
||||||
AR::CpuFunc::ClearInterruptFlag();
|
|
||||||
|
|
||||||
/* Print debug message and raise kernel panic */
|
|
||||||
DebugPrint(L"ERROR: Caught unexpected interrupt (0x%.2lX)!\n", TrapFrame->Vector);
|
|
||||||
KE::Crash::Panic(0x47, TrapFrame->Vector, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -224,6 +224,7 @@ HL::Pic::InitializeApic(VOID)
|
|||||||
|
|
||||||
/* Register interrupt handlers */
|
/* Register interrupt handlers */
|
||||||
HL::Irq::RegisterInterruptHandler(APIC_VECTOR_SPURIOUS, (PVOID)ArHandleSpuriousInterrupt);
|
HL::Irq::RegisterInterruptHandler(APIC_VECTOR_SPURIOUS, (PVOID)ArHandleSpuriousInterrupt);
|
||||||
|
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_PROFILE, HL::Irq::HandleProfileInterrupt);
|
||||||
|
|
||||||
/* Clear any pre-existing errors */
|
/* Clear any pre-existing errors */
|
||||||
WriteApicRegister(APIC_ESR, 0);
|
WriteApicRegister(APIC_ESR, 0);
|
||||||
|
|||||||
@@ -18,9 +18,10 @@ namespace HL
|
|||||||
class Irq
|
class Irq
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
STATIC XTCDECL VOID HandleProfileInterrupt(IN PKTRAP_FRAME TrapFrame);
|
||||||
|
STATIC XTCDECL VOID HandleUnexpectedInterrupt(IN PKTRAP_FRAME TrapFrame);
|
||||||
STATIC XTAPI PVOID QueryInterruptHandler(IN ULONG Vector);
|
STATIC XTAPI PVOID QueryInterruptHandler(IN ULONG Vector);
|
||||||
STATIC XTAPI PVOID QuerySystemInterruptHandler(IN ULONG Vector);
|
STATIC XTAPI PVOID QuerySystemInterruptHandler(IN ULONG Vector);
|
||||||
STATIC XTCDECL VOID HandleUnexpectedInterrupt(IN PKTRAP_FRAME TrapFrame);
|
|
||||||
STATIC XTAPI VOID RegisterInterruptHandler(IN ULONG Vector,
|
STATIC XTAPI VOID RegisterInterruptHandler(IN ULONG Vector,
|
||||||
IN PVOID Handler);
|
IN PVOID Handler);
|
||||||
STATIC XTAPI VOID RegisterSystemInterruptHandler(IN ULONG Vector,
|
STATIC XTAPI VOID RegisterSystemInterruptHandler(IN ULONG Vector,
|
||||||
|
|||||||
Reference in New Issue
Block a user