From 5e43fe1160ac03bd0b968e539c6751ba995da8c2 Mon Sep 17 00:00:00 2001 From: Amlal Date: Mon, 30 Sep 2024 07:42:46 +0200 Subject: IMP: Refactored AMD64 HAL's CPUID.hxx, APICController.cxx and BMPMgr.cxx - Processor.hxx: Moved macros at end of file to begin of file. Signed-off-by: Amlal --- dev/zka/HALKit/AMD64/CPUID.hxx | 124 ++++++++++++++--------------- dev/zka/HALKit/AMD64/HalAPICController.cxx | 39 +++++++++ dev/zka/HALKit/AMD64/HalAPICMgr.cxx | 36 --------- dev/zka/HALKit/AMD64/HalBMPMgr.cxx | 6 +- dev/zka/HALKit/AMD64/Processor.hxx | 14 ++-- 5 files changed, 113 insertions(+), 106 deletions(-) create mode 100644 dev/zka/HALKit/AMD64/HalAPICController.cxx delete mode 100644 dev/zka/HALKit/AMD64/HalAPICMgr.cxx (limited to 'dev') diff --git a/dev/zka/HALKit/AMD64/CPUID.hxx b/dev/zka/HALKit/AMD64/CPUID.hxx index ae6e42c5..966996fd 100644 --- a/dev/zka/HALKit/AMD64/CPUID.hxx +++ b/dev/zka/HALKit/AMD64/CPUID.hxx @@ -15,67 +15,67 @@ enum { - eCPU_FEATURE_ECX_SSE3 = 1 << 0, - eCPU_FEATURE_ECX_PCLMUL = 1 << 1, - eCPU_FEATURE_ECX_DTES64 = 1 << 2, - eCPU_FEATURE_ECX_MONITOR = 1 << 3, - eCPU_FEATURE_ECX_DS_CPL = 1 << 4, - eCPU_FEATURE_ECX_VMX = 1 << 5, - eCPU_FEATURE_ECX_SMX = 1 << 6, - eCPU_FEATURE_ECX_EST = 1 << 7, - eCPU_FEATURE_ECX_TM2 = 1 << 8, - eCPU_FEATURE_ECX_SSSE3 = 1 << 9, - eCPU_FEATURE_ECX_CID = 1 << 10, - eCPU_FEATURE_ECX_SDBG = 1 << 11, - eCPU_FEATURE_ECX_FMA = 1 << 12, - eCPU_FEATURE_ECX_CX16 = 1 << 13, - eCPU_FEATURE_ECX_XTPR = 1 << 14, - eCPU_FEATURE_ECX_PDCM = 1 << 15, - eCPU_FEATURE_ECX_PCID = 1 << 17, - eCPU_FEATURE_ECX_DCA = 1 << 18, - eCPU_FEATURE_ECX_SSE4_1 = 1 << 19, - eCPU_FEATURE_ECX_SSE4_2 = 1 << 20, - eCPU_FEATURE_ECX_X2APIC = 1 << 21, - eCPU_FEATURE_ECX_MOVBE = 1 << 22, - eCPU_FEATURE_ECX_POP3C = 1 << 23, - eCPU_FEATURE_ECX_TSC = 1 << 24, - eCPU_FEATURE_ECX_AES = 1 << 25, - eCPU_FEATURE_ECX_XSAVE = 1 << 26, - eCPU_FEATURE_ECX_OSXSAVE = 1 << 27, - eCPU_FEATURE_ECX_AVX = 1 << 28, - eCPU_FEATURE_ECX_F16C = 1 << 29, - eCPU_FEATURE_ECX_RDRAND = 1 << 30, - eCPU_FEATURE_ECX_HYPERVISOR = 1 << 31, - eCPU_FEATURE_EDX_FPU = 1 << 0, - eCPU_FEATURE_EDX_VME = 1 << 1, - eCPU_FEATURE_EDX_DE = 1 << 2, - eCPU_FEATURE_EDX_PSE = 1 << 3, - eCPU_FEATURE_EDX_TSC = 1 << 4, - eCPU_FEATURE_EDX_MSR = 1 << 5, - eCPU_FEATURE_EDX_PAE = 1 << 6, - eCPU_FEATURE_EDX_MCE = 1 << 7, - eCPU_FEATURE_EDX_CX8 = 1 << 8, - eCPU_FEATURE_EDX_APIC = 1 << 9, - eCPU_FEATURE_EDX_SEP = 1 << 11, - eCPU_FEATURE_EDX_MTRR = 1 << 12, - eCPU_FEATURE_EDX_PGE = 1 << 13, - eCPU_FEATURE_EDX_MCA = 1 << 14, - eCPU_FEATURE_EDX_CMOV = 1 << 15, - eCPU_FEATURE_EDX_PAT = 1 << 16, - eCPU_FEATURE_EDX_PSE36 = 1 << 17, - eCPU_FEATURE_EDX_PSN = 1 << 18, - eCPU_FEATURE_EDX_CLFLUSH = 1 << 19, - eCPU_FEATURE_EDX_DS = 1 << 21, - eCPU_FEATURE_EDX_ACPI = 1 << 22, - eCPU_FEATURE_EDX_MMX = 1 << 23, - eCPU_FEATURE_EDX_FXSR = 1 << 24, - eCPU_FEATURE_EDX_SSE = 1 << 25, - eCPU_FEATURE_EDX_SSE2 = 1 << 26, - eCPU_FEATURE_EDX_SS = 1 << 27, - eCPU_FEATURE_EDX_HTT = 1 << 28, - eCPU_FEATURE_EDX_TM = 1 << 29, - eCPU_FEATURE_EDX_IA64 = 1 << 30, - eCPU_FEATURE_EDX_PBE = 1 << 31 + eCPUFeatureSSE3 = 1 << 0, + eCPUFeaturePCLMUL = 1 << 1, + eCPUFeatureDTES64 = 1 << 2, + eCPUFeatureMONITOR = 1 << 3, + eCPUFeatureDS_CPL = 1 << 4, + eCPUFeatureVMX = 1 << 5, + eCPUFeatureSMX = 1 << 6, + eCPUFeatureEST = 1 << 7, + eCPUFeatureTM2 = 1 << 8, + eCPUFeatureSSSE3 = 1 << 9, + eCPUFeatureCID = 1 << 10, + eCPUFeatureSDBG = 1 << 11, + eCPUFeatureFMA = 1 << 12, + eCPUFeatureCX16 = 1 << 13, + eCPUFeatureXTPR = 1 << 14, + eCPUFeaturePDCM = 1 << 15, + eCPUFeaturePCID = 1 << 17, + eCPUFeatureDCA = 1 << 18, + eCPUFeatureSSE4_1 = 1 << 19, + eCPUFeatureSSE4_2 = 1 << 20, + eCPUFeatureX2APIC = 1 << 21, + eCPUFeatureMOVBE = 1 << 22, + eCPUFeaturePOP3C = 1 << 23, + eCPUFeatureECXTSC = 1 << 24, + eCPUFeatureAES = 1 << 25, + eCPUFeatureXSAVE = 1 << 26, + eCPUFeatureOSXSAVE = 1 << 27, + eCPUFeatureAVX = 1 << 28, + eCPUFeatureF16C = 1 << 29, + eCPUFeatureRDRAND = 1 << 30, + eCPUFeatureHYPERVISOR = 1 << 31, + eCPUFeatureFPU = 1 << 0, + eCPUFeatureVME = 1 << 1, + eCPUFeatureDE = 1 << 2, + eCPUFeaturePSE = 1 << 3, + eCPUFeatureEDXTSC = 1 << 4, + eCPUFeatureMSR = 1 << 5, + eCPUFeaturePAE = 1 << 6, + eCPUFeatureMCE = 1 << 7, + eCPUFeatureCX8 = 1 << 8, + eCPUFeatureAPIC = 1 << 9, + eCPUFeatureSEP = 1 << 11, + eCPUFeatureMTRR = 1 << 12, + eCPUFeaturePGE = 1 << 13, + eCPUFeatureMCA = 1 << 14, + eCPUFeatureCMOV = 1 << 15, + eCPUFeaturePAT = 1 << 16, + eCPUFeaturePSE36 = 1 << 17, + eCPUFeaturePSN = 1 << 18, + eCPUFeatureCLFLUSH = 1 << 19, + eCPUFeatureDS = 1 << 21, + eCPUFeatureACPI = 1 << 22, + eCPUFeatureMMX = 1 << 23, + eCPUFeatureFXSR = 1 << 24, + eCPUFeatureSSE = 1 << 25, + eCPUFeatureSSE2 = 1 << 26, + eCPUFeatureSS = 1 << 27, + eCPUFeatureHTT = 1 << 28, + eCPUFeatureTM = 1 << 29, + eCPUFeatureIA64 = 1 << 30, + eCPUFeaturePBE = 1 << 31 }; -typedef long long int hal_cpu_feature_type; \ No newline at end of file +typedef __INT64_TYPE__ hal_cpu_feature_type; diff --git a/dev/zka/HALKit/AMD64/HalAPICController.cxx b/dev/zka/HALKit/AMD64/HalAPICController.cxx new file mode 100644 index 00000000..5964c432 --- /dev/null +++ b/dev/zka/HALKit/AMD64/HalAPICController.cxx @@ -0,0 +1,39 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + +------------------------------------------- */ + +#include +#include + +#define cIOAPICRegVal (4) +#define cIOAPICRegReg (0) + +namespace Kernel::HAL +{ + /// @brief Read from APIC controller. + /// @param reg register. + UInt32 APICController::Read(UInt32 reg) noexcept + { + MUST_PASS(this->fApic); + + UInt32 volatile* io_apic = (UInt32 volatile*)this->fApic; + io_apic[cIOAPICRegReg] = (reg & 0xFF); + + return io_apic[cIOAPICRegVal]; + } + + /// @brief Write to APIC controller. + /// @param reg register. + /// @param value value. + Void APICController::Write(UInt32 reg, UInt32 value) noexcept + { + MUST_PASS(this->fApic); + + UInt32 volatile* io_apic = (UInt32 volatile*)this->fApic; + + io_apic[cIOAPICRegReg] = (reg & 0xFF); + io_apic[cIOAPICRegVal] = value; + } +} // namespace Kernel::HAL diff --git a/dev/zka/HALKit/AMD64/HalAPICMgr.cxx b/dev/zka/HALKit/AMD64/HalAPICMgr.cxx deleted file mode 100644 index caa2ce0b..00000000 --- a/dev/zka/HALKit/AMD64/HalAPICMgr.cxx +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#include -#include - -namespace Kernel::HAL -{ - /// @brief Read from APIC controller. - /// @param reg register. - UInt32 APICController::Read(UInt32 reg) noexcept - { - MUST_PASS(this->fApic); - - UInt32 volatile* ioapic = (UInt32 volatile*)this->fApic; - ioapic[0] = (reg & 0xff); - - return ioapic[4]; - } - - /// @brief Write to APIC controller. - /// @param reg register. - /// @param value value. - Void APICController::Write(UInt32 reg, UInt32 value) noexcept - { - MUST_PASS(this->fApic); - - UInt32 volatile* ioapic = (UInt32 volatile*)this->fApic; - - ioapic[0] = (reg & 0xFF); - ioapic[4] = value; - } -} // namespace Kernel::HAL diff --git a/dev/zka/HALKit/AMD64/HalBMPMgr.cxx b/dev/zka/HALKit/AMD64/HalBMPMgr.cxx index b22e96ec..e577bd7e 100644 --- a/dev/zka/HALKit/AMD64/HalBMPMgr.cxx +++ b/dev/zka/HALKit/AMD64/HalBMPMgr.cxx @@ -17,9 +17,9 @@ #include #include -#define cBitMapMagIdx 0 -#define cBitMapSizeIdx 1 -#define cBitMapUsedIdx 2 +#define cBitMapMagIdx (0) +#define cBitMapSizeIdx (1) +#define cBitMapUsedIdx (2) namespace Kernel { diff --git a/dev/zka/HALKit/AMD64/Processor.hxx b/dev/zka/HALKit/AMD64/Processor.hxx index e35e1073..25ea105d 100644 --- a/dev/zka/HALKit/AMD64/Processor.hxx +++ b/dev/zka/HALKit/AMD64/Processor.hxx @@ -21,9 +21,17 @@ EXTERN_C { -#include +# include } +#include + +/// @brief Maximum entries of the interrupt descriptor table. +#define kKernelIdtSize (0x100) + +/// @brief interrupt for system call. +#define kKernelInterruptId (0x32) + #define IsActiveLow(FLG) (FLG & 2) #define IsLevelTriggered(FLG) (FLG & 8) @@ -291,9 +299,5 @@ EXTERN_C Kernel::Void idt_handle_pf(Kernel::UIntPtr rsp); EXTERN_C Kernel::Void hal_load_idt(Kernel::HAL::Register64 ptr); EXTERN_C Kernel::Void hal_load_gdt(Kernel::HAL::RegisterGDT ptr); -/// @brief Maximum size of the IDT. -#define kKernelIdtSize (0x100) -#define kKernelInterruptId 0x32 - inline Kernel::VoidPtr kKernelBitMpStart = nullptr; inline Kernel::UIntPtr kKernelBitMpSize = 0UL; -- cgit v1.2.3