diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-27 21:57:04 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-27 21:57:04 +0100 |
| commit | 2cf9f370d40a5c6512530c600292c5fac0410e11 (patch) | |
| tree | 964a997e4ba3285aac8e1ffde3d91bf7fefc7c36 /Private/HALKit/AMD64/HalDescriptorLoader.cpp | |
| parent | 9b67443fe423bf6d84725183697a040e12296bce (diff) | |
Kernel: remove SFN, hanging interrupts and COM1 logging.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/HALKit/AMD64/HalDescriptorLoader.cpp')
| -rw-r--r-- | Private/HALKit/AMD64/HalDescriptorLoader.cpp | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/Private/HALKit/AMD64/HalDescriptorLoader.cpp b/Private/HALKit/AMD64/HalDescriptorLoader.cpp index 58cce26c..59952cd3 100644 --- a/Private/HALKit/AMD64/HalDescriptorLoader.cpp +++ b/Private/HALKit/AMD64/HalDescriptorLoader.cpp @@ -21,19 +21,34 @@ void GDTLoader::Load(Register64 &gdt) { rt_load_gdt(kRegGdt); } -static HAL::Register64 kRegIdt; +static volatile HAL::Register64 kRegIdt; void IDTLoader::Load(Register64 &idt) { - volatile ::HCore::Detail::AMD64::InterruptDescriptorAMD64* baseIdt = (::HCore::Detail::AMD64::InterruptDescriptorAMD64 *)idt.Base; + // Remap PIC. + HAL::Out8(0x20, 0x11); + HAL::Out8(0xA0, 0x11); + HAL::Out8(0x21, 0x20); + HAL::Out8(0xA1, 0x28); + HAL::Out8(0x21, 0x04); + HAL::Out8(0xA1, 0x02); + HAL::Out8(0x21, 0x01); + HAL::Out8(0xA1, 0x01); + HAL::Out8(0x21, 0x0); + HAL::Out8(0xA1, 0x0); + + volatile ::HCore::Detail::AMD64::InterruptDescriptorAMD64 *baseIdt = + (::HCore::Detail::AMD64::InterruptDescriptorAMD64 *)idt.Base; for (auto i = 0; i < kKernelIdtSize; i++) { baseIdt[i].Selector = kGdtCodeSelector; - baseIdt[i].Ist = 00; + baseIdt[i].Ist = 0x0; baseIdt[i].TypeAttributes = kInterruptGate; - baseIdt[i].OffsetLow = (UInt16)((UInt32) ke_handle_irq & 0x000000000000ffff); - baseIdt[i].OffsetMid = (UInt16)(((UInt32) ke_handle_irq & 0x00000000ffff0000) >> 16); - baseIdt[i].OffsetHigh = (UInt32)((UInt32) ke_handle_irq & 0xffffffff00000000) >> 32; - baseIdt[i].Zero = 0; + baseIdt[i].OffsetLow = (UInt16)((UInt32)ke_handle_irq & 0x000000000000ffff); + baseIdt[i].OffsetMid = + (UInt16)(((UInt32)ke_handle_irq & 0x00000000ffff0000) >> 16); + baseIdt[i].OffsetHigh = + (UInt32)(((UInt32)ke_handle_irq & 0xffffffff00000000) >> 32); + baseIdt[i].Zero = 0x0; } rt_load_idt(idt); |
