diff options
| author | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-09 08:37:29 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-09 08:37:29 +0100 |
| commit | 3e607e871b1b20e14527845a511ae2a6739fcaac (patch) | |
| tree | 973c617f634367af2229e2ad2c10bce3e3df6aaa /Private/HALKit | |
| parent | 5bf99218f0cad958868e662cf99192811060f95f (diff) | |
See below.
- HCoreKrnl:
- Improve interrupt handler for AMD64 targets.
- Wrapped AHCI and PE types into a namespace.
- Replace L0 with the label MainLoop.
- Reworked C++Kit and NetBoot modules.
- Put INewFSIterator constructor as explicit.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'Private/HALKit')
| -rw-r--r-- | Private/HALKit/AMD64/HalDescriptorLoader.cpp | 12 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalInterruptHandlerAMD64.cxx | 29 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalNewBoot.asm | 2 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/Processor.hpp | 4 |
4 files changed, 26 insertions, 21 deletions
diff --git a/Private/HALKit/AMD64/HalDescriptorLoader.cpp b/Private/HALKit/AMD64/HalDescriptorLoader.cpp index a68fb54a..1dbe8e9e 100644 --- a/Private/HALKit/AMD64/HalDescriptorLoader.cpp +++ b/Private/HALKit/AMD64/HalDescriptorLoader.cpp @@ -25,11 +25,12 @@ STATIC ::HCore::Detail::AMD64::InterruptDescriptorAMD64 void IDTLoader::Load(Register64 &idt) { volatile ::HCore::UIntPtr **baseIdt = (volatile ::HCore::UIntPtr **)idt.Base; + MUST_PASS(baseIdt); - - MUST_PASS(baseIdt[0]); - + for (UInt16 i = 0; i < kKernelIdtSize; i++) { + MUST_PASS(baseIdt[i]); + kInterruptVectorTable[i].Selector = kGdtCodeSelector; kInterruptVectorTable[i].Ist = 0x0; kInterruptVectorTable[i].TypeAttributes = kInterruptGate; @@ -40,10 +41,9 @@ void IDTLoader::Load(Register64 &idt) { kInterruptVectorTable[i].Zero = 0x0; } - kRegIdt.Base = (UIntPtr)kInterruptVectorTable; + kRegIdt.Base = reinterpret_cast<UIntPtr>(kInterruptVectorTable); kRegIdt.Limit = sizeof(::HCore::Detail::AMD64::InterruptDescriptorAMD64) * - kKernelIdtSize - - 1; + (kKernelIdtSize - 1); rt_load_idt(kRegIdt); diff --git a/Private/HALKit/AMD64/HalInterruptHandlerAMD64.cxx b/Private/HALKit/AMD64/HalInterruptHandlerAMD64.cxx index be0932bd..34cf049e 100644 --- a/Private/HALKit/AMD64/HalInterruptHandlerAMD64.cxx +++ b/Private/HALKit/AMD64/HalInterruptHandlerAMD64.cxx @@ -9,21 +9,26 @@ #include <ArchKit/ArchKit.hpp> -/// @brief Interrupt handler 21h, 10h -/// @param rsp stack pointer. - -#define kInterruptIdAlt 0x10 #define kInterruptId 0x21 -EXTERN_C ATTRIBUTE(naked) HCore::UIntPtr rt_handle_interrupts(HCore::UIntPtr rsp) +/// @brief Runtime interrupt handler +/// @param sf The stack frame pushed by the isr. +/// @return the stackframe pointer. +EXTERN_C ATTRIBUTE(naked) HCore::UIntPtr rt_handle_interrupts(HCore::UIntPtr sf) { - HCore::HAL::StackFramePtr stackPtr = reinterpret_cast<HCore::HAL::StackFramePtr>(rsp); - - if (stackPtr->IntNum == kInterruptId || - stackPtr->IntNum == kInterruptIdAlt) { - /// Do system call TODO - + volatile HCore::HAL::StackFramePtr stackPtr = reinterpret_cast<volatile HCore::HAL::StackFramePtr>(sf); + MUST_PASS(stackPtr); + + switch (stackPtr->IntNum) + { + case kInterruptId: + { + /* TODO: HcOpenDevice and such syscalls. */ + break; + } + default: + break; } - return rsp; + return sf; }
\ No newline at end of file diff --git a/Private/HALKit/AMD64/HalNewBoot.asm b/Private/HALKit/AMD64/HalNewBoot.asm index a18b6814..881c1728 100644 --- a/Private/HALKit/AMD64/HalNewBoot.asm +++ b/Private/HALKit/AMD64/HalNewBoot.asm @@ -34,7 +34,7 @@ Main: push rcx call RuntimeMain pop rcx -L0: +MainLoop: cli hlt jmp $ diff --git a/Private/HALKit/AMD64/Processor.hpp b/Private/HALKit/AMD64/Processor.hpp index e5e35f20..c69e35d0 100644 --- a/Private/HALKit/AMD64/Processor.hpp +++ b/Private/HALKit/AMD64/Processor.hpp @@ -23,8 +23,8 @@ #define kCPUBackendName "AMD64" -#define IsActiveLow(flag) (flag & 2) -#define IsLevelTriggered(flag) (flag & 8) +#define IsActiveLow(FLG) (FLG & 2) +#define IsLevelTriggered(FLG) (FLG & 8) #define kInterruptGate 0x8E #define kTrapGate 0xEF |
