forked from xt-sys/exectos
Move IRQ handling from kernel executive to hardware layer
This commit is contained in:
@@ -20,6 +20,7 @@ list(APPEND XTOSKRNL_SOURCE
|
|||||||
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/cpu.cc
|
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/cpu.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/pic.cc
|
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/pic.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.cc
|
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.cc
|
||||||
|
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/irq.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/runlevel.cc
|
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/runlevel.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/hl/acpi.cc
|
${XTOSKRNL_SOURCE_DIR}/hl/acpi.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/hl/cport.cc
|
${XTOSKRNL_SOURCE_DIR}/hl/cport.cc
|
||||||
@@ -31,7 +32,6 @@ list(APPEND XTOSKRNL_SOURCE
|
|||||||
${XTOSKRNL_SOURCE_DIR}/kd/data.cc
|
${XTOSKRNL_SOURCE_DIR}/kd/data.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/kd/dbgio.cc
|
${XTOSKRNL_SOURCE_DIR}/kd/dbgio.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/kd/exports.cc
|
${XTOSKRNL_SOURCE_DIR}/kd/exports.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/irq.cc
|
|
||||||
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/krnlinit.cc
|
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/krnlinit.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/kthread.cc
|
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/kthread.cc
|
||||||
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/proc.cc
|
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/proc.cc
|
||||||
|
|||||||
@@ -249,8 +249,8 @@ HL::Pic::InitializeApic(VOID)
|
|||||||
WriteApicRegister(APIC_LINT1, LvtRegister.Long);
|
WriteApicRegister(APIC_LINT1, LvtRegister.Long);
|
||||||
|
|
||||||
/* Register interrupt handlers */
|
/* Register interrupt handlers */
|
||||||
KE::Irq::SetInterruptHandler(APIC_VECTOR_SPURIOUS, (PVOID)HandleApicSpuriousService);
|
HL::Irq::SetInterruptHandler(APIC_VECTOR_SPURIOUS, (PVOID)HandleApicSpuriousService);
|
||||||
KE::Irq::SetInterruptHandler(PIC1_VECTOR_SPURIOUS, (PVOID)HandlePicSpuriousService);
|
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);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <hl/init.hh>
|
#include <hl/init.hh>
|
||||||
#include <hl/ioport.hh>
|
#include <hl/ioport.hh>
|
||||||
#include <hl/ioreg.hh>
|
#include <hl/ioreg.hh>
|
||||||
|
#include <hl/irq.hh>
|
||||||
#include <hl/pic.hh>
|
#include <hl/pic.hh>
|
||||||
#include <hl/runlevel.hh>
|
#include <hl/runlevel.hh>
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
/**
|
/**
|
||||||
* PROJECT: ExectOS
|
* PROJECT: ExectOS
|
||||||
* COPYRIGHT: See COPYING.md in the top level directory
|
* COPYRIGHT: See COPYING.md in the top level directory
|
||||||
* FILE: xtoskrnl/includes/ke/irq.hh
|
* FILE: xtoskrnl/includes/hl/irq.hh
|
||||||
* DESCRIPTION: Kernel interrupts support
|
* DESCRIPTION: Interrupts support
|
||||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __XTOSKRNL_KE_IRQ_HH
|
#ifndef __XTOSKRNL_HL_IRQ_HH
|
||||||
#define __XTOSKRNL_KE_IRQ_HH
|
#define __XTOSKRNL_HL_IRQ_HH
|
||||||
|
|
||||||
#include <xtos.hh>
|
#include <xtos.hh>
|
||||||
|
|
||||||
|
|
||||||
/* Kernel Library */
|
/* Hardware Layer */
|
||||||
namespace KE
|
namespace HL
|
||||||
{
|
{
|
||||||
class Irq
|
class Irq
|
||||||
{
|
{
|
||||||
@@ -23,4 +23,4 @@ namespace KE
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __XTOSKRNL_KE_IRQ_HH */
|
#endif /* __XTOSKRNL_HL_IRQ_HH */
|
||||||
@@ -17,7 +17,6 @@
|
|||||||
#include <ke/dpc.hh>
|
#include <ke/dpc.hh>
|
||||||
#include <ke/event.hh>
|
#include <ke/event.hh>
|
||||||
#include <ke/guard.hh>
|
#include <ke/guard.hh>
|
||||||
#include <ke/irq.hh>
|
|
||||||
#include <ke/kprocess.hh>
|
#include <ke/kprocess.hh>
|
||||||
#include <ke/krnlinit.hh>
|
#include <ke/krnlinit.hh>
|
||||||
#include <ke/kthread.hh>
|
#include <ke/kthread.hh>
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
/**
|
|
||||||
* PROJECT: ExectOS
|
|
||||||
* COPYRIGHT: See COPYING.md in the top level directory
|
|
||||||
* FILE: xtoskrnl/ke/amd64/irq.cc
|
|
||||||
* DESCRIPTION: Kernel interrupts support for amd64 architecture
|
|
||||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <xtos.hh>
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets new interrupt handler for the existing IDT entry.
|
|
||||||
*
|
|
||||||
* @param HalVector
|
|
||||||
* Supplies the HAL vector number.
|
|
||||||
*
|
|
||||||
* @param Handler
|
|
||||||
* Supplies the new interrupt handler.
|
|
||||||
*
|
|
||||||
* @return This routine does not return any value.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTAPI
|
|
||||||
VOID
|
|
||||||
KE::Irq::SetInterruptHandler(IN ULONG Vector,
|
|
||||||
IN PVOID Handler)
|
|
||||||
{
|
|
||||||
PKPROCESSOR_BLOCK ProcessorBlock;
|
|
||||||
|
|
||||||
/* Get current processor block */
|
|
||||||
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
|
||||||
|
|
||||||
/* Update interrupt handler */
|
|
||||||
AR::ProcSup::SetIdtGate(ProcessorBlock->IdtBase,
|
|
||||||
Vector,
|
|
||||||
Handler,
|
|
||||||
KGDT_R0_CODE,
|
|
||||||
0,
|
|
||||||
KIDT_ACCESS_RING0,
|
|
||||||
AMD64_INTERRUPT_GATE);
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
/**
|
|
||||||
* PROJECT: ExectOS
|
|
||||||
* COPYRIGHT: See COPYING.md in the top level directory
|
|
||||||
* FILE: xtoskrnl/ke/i686/irq.cc
|
|
||||||
* DESCRIPTION: Kernel interrupts support for i686 architecture
|
|
||||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <xtos.hh>
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets new interrupt handler for the existing IDT entry.
|
|
||||||
*
|
|
||||||
* @param HalVector
|
|
||||||
* Supplies the HAL vector number.
|
|
||||||
*
|
|
||||||
* @param Handler
|
|
||||||
* Supplies the new interrupt handler.
|
|
||||||
*
|
|
||||||
* @return This routine does not return any value.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTAPI
|
|
||||||
VOID
|
|
||||||
KE::Irq::SetInterruptHandler(IN ULONG Vector,
|
|
||||||
IN PVOID Handler)
|
|
||||||
{
|
|
||||||
PKPROCESSOR_BLOCK ProcessorBlock;
|
|
||||||
|
|
||||||
/* Get current processor block */
|
|
||||||
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
|
||||||
|
|
||||||
/* Update interrupt handler */
|
|
||||||
AR::ProcSup::SetIdtGate(ProcessorBlock->IdtBase,
|
|
||||||
Vector,
|
|
||||||
Handler,
|
|
||||||
KGDT_R0_CODE,
|
|
||||||
0,
|
|
||||||
KIDT_ACCESS_RING0,
|
|
||||||
I686_INTERRUPT_GATE);
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user