summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit/AMD64/HalDescriptorLoader.cpp
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-05-11 06:43:54 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-05-11 06:43:54 +0000
commitca675beb41dba8d7d16c5793b55d1672f38be3b4 (patch)
treec995ada42729ac2059a0ed87a4539d1a7e10b14a /Private/HALKit/AMD64/HalDescriptorLoader.cpp
parent2b4a4792abf51487ab4a16106f9376f43acf381a (diff)
parentbc57a29a24b98b00ba17710ba84ec2188ab73504 (diff)
Merged in MHR-23 (pull request #12)
MHR-23: Merge work.
Diffstat (limited to 'Private/HALKit/AMD64/HalDescriptorLoader.cpp')
-rw-r--r--Private/HALKit/AMD64/HalDescriptorLoader.cpp78
1 files changed, 0 insertions, 78 deletions
diff --git a/Private/HALKit/AMD64/HalDescriptorLoader.cpp b/Private/HALKit/AMD64/HalDescriptorLoader.cpp
deleted file mode 100644
index 53bcd621..00000000
--- a/Private/HALKit/AMD64/HalDescriptorLoader.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -------------------------------------------
-
- Copyright Mahrouss Logic
-
-------------------------------------------- */
-
-#include <ArchKit/ArchKit.hpp>
-
-namespace NewOS::HAL {
-namespace Detail {
-STATIC RegisterGDT kRegGdt;
-STATIC HAL::Register64 kRegIdt;
-
-STATIC ::NewOS::Detail::AMD64::InterruptDescriptorAMD64
- kInterruptVectorTable[kKernelIdtSize];
-
-STATIC Void RemapPIC(Void) noexcept {
- // Remap PIC.
- HAL::Out8(0x20, 0x10 | 0x01);
- HAL::Out8(0xA0, 0x10 | 0x01);
-
- HAL::Out8(0x21, 32);
- HAL::Out8(0xA1, 40);
-
- HAL::Out8(0x21, 4);
- HAL::Out8(0xA1, 2);
-
- HAL::Out8(0x21, 0x01);
- HAL::Out8(0xA1, 0x01);
-
- HAL::Out8(0x21, 0x00);
- HAL::Out8(0xA1, 0x00);
-}
-} // namespace Detail
-
-/// @brief Loads the provided Global Descriptor Table.
-/// @param gdt
-/// @return
-Void GDTLoader::Load(RegisterGDT &gdt) {
- MUST_PASS(gdt.Base != 0);
-
- Detail::kRegGdt.Base = gdt.Base;
- Detail::kRegGdt.Limit = gdt.Limit;
-
- hal_load_gdt(Detail::kRegGdt);
-}
-
-Void IDTLoader::Load(Register64 &idt) {
- volatile ::NewOS::UIntPtr **baseIdt = (volatile ::NewOS::UIntPtr **)idt.Base;
-
- MUST_PASS(baseIdt);
-
- Detail::RemapPIC();
-
- for (UInt16 i = 0; i < kKernelIdtSize; ++i) {
- MUST_PASS(baseIdt[i]);
-
- Detail::kInterruptVectorTable[i].Selector = kGdtCodeSelector;
- Detail::kInterruptVectorTable[i].Ist = 0x0;
- Detail::kInterruptVectorTable[i].TypeAttributes = kInterruptGate;
- Detail::kInterruptVectorTable[i].OffsetLow = ((UIntPtr)baseIdt[i] & 0xFFFF);
- Detail::kInterruptVectorTable[i].OffsetMid = (((UIntPtr)baseIdt[i] >> 16) & 0xFFFF);
- Detail::kInterruptVectorTable[i].OffsetHigh =
- (((UIntPtr)baseIdt[i] >> 32) & 0xFFFFFFFF);
- Detail::kInterruptVectorTable[i].Zero = 0x0;
- }
-
- Detail::kRegIdt.Base = reinterpret_cast<UIntPtr>(Detail::kInterruptVectorTable);
- Detail::kRegIdt.Limit = sizeof(::NewOS::Detail::AMD64::InterruptDescriptorAMD64) *
- (kKernelIdtSize - 1);
-
- hal_load_idt(Detail::kRegIdt);
-}
-
-void GDTLoader::Load(Ref<RegisterGDT> &gdt) { GDTLoader::Load(gdt.Leak()); }
-
-void IDTLoader::Load(Ref<Register64> &idt) { IDTLoader::Load(idt.Leak()); }
-} // namespace NewOS::HAL