summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit/AMD64
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-04-25 08:37:12 +0200
committerAmlal <amlal@nekernel.org>2025-04-25 08:37:12 +0200
commit97f5407670a796ba41e107175f8242abba0c81cc (patch)
tree931e6e6dc703485129769b71f4dafa5e0bfcbb2a /dev/kernel/HALKit/AMD64
parent2a34afdf04a5ec24d091469fa50a09882c898881 (diff)
dev, boot, kernel: improvements, and fixing the VEPM formatter.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit/AMD64')
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc52
-rw-r--r--dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc2
-rw-r--r--dev/kernel/HALKit/AMD64/HalKernelPanic.cc10
-rw-r--r--dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc16
-rw-r--r--dev/kernel/HALKit/AMD64/PCI/DMA.cc4
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc2
6 files changed, 45 insertions, 41 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
index 1f865057..fc50380a 100644
--- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -36,15 +36,17 @@
namespace Kernel::HAL
{
- struct PROCESS_APIC_MADT;
- struct PROCESS_CONTROL_BLOCK;
+ struct HAL_APIC_MADT;
+ struct HAL_HARDWARE_THREAD;
- struct PROCESS_CONTROL_BLOCK final
+ struct HAL_HARDWARE_THREAD final
{
- HAL::StackFramePtr mFrame;
+ HAL::StackFramePtr mFramePtr;
+ ProcessID mProcessID{0};
+ UInt8 mCoreID{0};
};
- STATIC PROCESS_APIC_MADT* kMADTBlock = nullptr;
+ STATIC HAL_APIC_MADT* kMADTBlock = nullptr;
STATIC Bool kSMPAware = false;
STATIC Int64 kSMPCount = 0;
@@ -55,7 +57,7 @@ namespace Kernel::HAL
STATIC VoidPtr kRawMADT = nullptr;
/// @brief Multiple APIC Descriptor Table.
- struct PROCESS_APIC_MADT final SDT_OBJECT
+ struct HAL_APIC_MADT final SDT_OBJECT
{
UInt32 Address; // Madt address
UInt8 Flags; // Madt flags
@@ -65,8 +67,8 @@ namespace Kernel::HAL
UInt8 Type;
UInt8 Len;
- union {
- struct
+ union APIC {
+ struct IOAPIC
{
UInt8 IoID;
UInt8 Zero;
@@ -74,7 +76,7 @@ namespace Kernel::HAL
UInt32 GISBase;
} IOAPIC;
- struct
+ struct LAPIC_NMI
{
UInt8 Source;
UInt8 IRQSource;
@@ -82,27 +84,27 @@ namespace Kernel::HAL
UInt16 Flags;
} LApicNMI;
- struct
+ struct LAPIC
{
UInt8 ProcessorID;
UInt16 Flags;
UInt8 LINT;
} LAPIC;
- struct
+ struct LAPIC_OVERRIDE
{
UInt16 Reserved;
UInt64 Address;
} LApicOverride;
- struct
+ struct LAPIC_X2
{
UInt16 Reserved;
UInt32 x2APICID;
UInt32 Flags;
UInt32 AcpiID;
- } LApic;
- };
+ } LocalApicX2;
+ } Apic;
} List[1]; // Records List
};
@@ -145,12 +147,13 @@ namespace Kernel::HAL
}
}
- STATIC PROCESS_CONTROL_BLOCK kProcessBlocks[kSchedProcessLimitPerTeam] = {0};
+ STATIC HAL_HARDWARE_THREAD kHWThread[kSchedProcessLimitPerTeam] = {{}};
EXTERN_C HAL::StackFramePtr mp_get_current_context(Int64 pid)
{
const auto process_index = pid % kSchedProcessLimitPerTeam;
- return kProcessBlocks[process_index].mFrame;
+
+ return kHWThread[process_index].mFramePtr;
}
EXTERN_C BOOL mp_register_process(HAL::StackFramePtr stack_frame, ProcessID pid)
@@ -159,11 +162,12 @@ namespace Kernel::HAL
const auto process_index = pid % kSchedProcessLimitPerTeam;
- kProcessBlocks[process_index].mFrame = stack_frame;
+ kHWThread[process_index].mFramePtr = stack_frame;
+ kHWThread[process_index].mProcessID = pid;
- auto first_id = kAPICLocales[0];
+ kHWThread[process_index].mCoreID = kAPICLocales[0];
- hal_send_sipi(kApicBaseAddress, first_id, (UInt8)(((UIntPtr)stack_frame->BP) >> 12));
+ hal_send_sipi(kApicBaseAddress, kHWThread[process_index].mCoreID, (UInt8)(((UIntPtr)stack_frame->BP) >> 12));
return YES;
}
@@ -205,7 +209,7 @@ namespace Kernel::HAL
auto hw_and_pow_int = PowerFactoryInterface(vendor_ptr);
kRawMADT = hw_and_pow_int.Find(kAPIC_Signature).Leak().Leak();
- kMADTBlock = reinterpret_cast<PROCESS_APIC_MADT*>(kRawMADT);
+ kMADTBlock = reinterpret_cast<HAL_APIC_MADT*>(kRawMADT);
kSMPAware = NO;
if (kMADTBlock)
@@ -229,11 +233,11 @@ namespace Kernel::HAL
switch (kMADTBlock->List[index].Type)
{
case 0x00: {
- if (kMADTBlock->List[kSMPCount].LAPIC.ProcessorID < 1)
+ if (kMADTBlock->List[kSMPCount].Apic.LAPIC.ProcessorID < 1)
break;
- kAPICLocales[kSMPCount] = kMADTBlock->List[kSMPCount].LAPIC.ProcessorID;
- (void)(kout << "SMP: APIC ID: " << number(kAPICLocales[kSMPCount]) << kendl);
+ kAPICLocales[kSMPCount] = kMADTBlock->List[kSMPCount].Apic.LAPIC.ProcessorID;
+ (Void)(kout << "SMP: APIC ID: " << number(kAPICLocales[kSMPCount]) << kendl);
++kSMPCount;
break;
@@ -245,7 +249,7 @@ namespace Kernel::HAL
++index;
}
- (void)(kout << "SMP: Number of APs: " << number(kSMPCount) << kendl);
+ (Void)(kout << "SMP: Number of APs: " << number(kSMPCount) << kendl);
// Kernel is now SMP aware.
// That means that the scheduler is now available (on MP Kernels)
diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
index 7dce21d1..4c873554 100644
--- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
@@ -148,7 +148,7 @@ EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip)
kIsScheduling = NO;
- (void)(Kernel::kout << "Kernel: Process RIP: " << Kernel::hex_number(rip) << Kernel::kendl);
+ (Void)(Kernel::kout << "Kernel: Process RIP: " << Kernel::hex_number(rip) << Kernel::kendl);
Kernel::kout << "Kernel: SIGTRAP\r";
process.Leak().Signal.SignalArg = rip;
diff --git a/dev/kernel/HALKit/AMD64/HalKernelPanic.cc b/dev/kernel/HALKit/AMD64/HalKernelPanic.cc
index 2641f058..9c8a235a 100644
--- a/dev/kernel/HALKit/AMD64/HalKernelPanic.cc
+++ b/dev/kernel/HALKit/AMD64/HalKernelPanic.cc
@@ -33,9 +33,9 @@ namespace Kernel
/***********************************************************************************/
Void ke_panic(const Kernel::Int32& id, const Char* message)
{
- (void)(kout << "Kernel_Panic_MSG: " << message << kendl);
- (void)(kout << "Kernel_Panic_ID: " << hex_number(id) << kendl);
- (void)(kout << "Kernel_Panic_CR2: " << hex_number((UIntPtr)hal_read_cr2()) << kendl);
+ (Void)(kout << "Kernel_Panic_MSG: " << message << kendl);
+ (Void)(kout << "Kernel_Panic_ID: " << hex_number(id) << kendl);
+ (Void)(kout << "Kernel_Panic_CR2: " << hex_number((UIntPtr)hal_read_cr2()) << kendl);
RecoveryFactory::Recover();
}
@@ -52,8 +52,8 @@ namespace Kernel
{
if (!expr)
{
- (void)(kout << "Kernel_Panic_File: " << file << kendl);
- (void)(kout << "Kernel_Panic_Line: " << line << kendl);
+ (Void)(kout << "Kernel_Panic_File: " << file << kendl);
+ (Void)(kout << "Kernel_Panic_Line: " << line << kendl);
ke_panic(RUNTIME_CHECK_FAILED, file); // Runtime Check failed
}
diff --git a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
index c6c24be1..08caed82 100644
--- a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
@@ -41,14 +41,14 @@ namespace Kernel::HAL
/***********************************************************************************/
STATIC Void mmi_page_status(Detail::PTE* pte)
{
- (void)(kout << (pte->Present ? "Present" : "Not Present") << kendl);
- (void)(kout << (pte->Wr ? "W/R" : "Not W/R") << kendl);
- (void)(kout << (pte->Nx ? "NX" : "Not NX") << kendl);
- (void)(kout << (pte->User ? "User" : "Not User") << kendl);
- (void)(kout << (pte->Pcd ? "Not Cached" : "Cached") << kendl);
- (void)(kout << (pte->Accessed ? "Accessed" : "Not Accessed") << kendl);
- (void)(kout << hex_number(pte->PhysicalAddress) << kendl);
- (void)(kout << (pte->ProtectionKey ? "Protected" : "Not Protected/PKU Disabled") << kendl);
+ (Void)(kout << (pte->Present ? "Present" : "Not Present") << kendl);
+ (Void)(kout << (pte->Wr ? "W/R" : "Not W/R") << kendl);
+ (Void)(kout << (pte->Nx ? "NX" : "Not NX") << kendl);
+ (Void)(kout << (pte->User ? "User" : "Not User") << kendl);
+ (Void)(kout << (pte->Pcd ? "Not Cached" : "Cached") << kendl);
+ (Void)(kout << (pte->Accessed ? "Accessed" : "Not Accessed") << kendl);
+ (Void)(kout << hex_number(pte->PhysicalAddress) << kendl);
+ (Void)(kout << (pte->ProtectionKey ? "Protected" : "Not Protected/PKU Disabled") << kendl);
}
/***********************************************************************************/
diff --git a/dev/kernel/HALKit/AMD64/PCI/DMA.cc b/dev/kernel/HALKit/AMD64/PCI/DMA.cc
index 4a63625e..b16039d4 100644
--- a/dev/kernel/HALKit/AMD64/PCI/DMA.cc
+++ b/dev/kernel/HALKit/AMD64/PCI/DMA.cc
@@ -38,7 +38,7 @@ namespace Kernel
if (!this->fAddress)
return false;
- (void)(kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast<UIntPtr>(this->fAddress) + offset) << kendl);
+ (Void)(kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast<UIntPtr>(this->fAddress) + offset) << kendl);
ke_dma_write<UInt32>(reinterpret_cast<UIntPtr>(this->fAddress), offset, bit);
@@ -52,7 +52,7 @@ namespace Kernel
if (!this->fAddress)
return ~0;
- (void)(kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast<UIntPtr>(this->fAddress) + offset) << kendl);
+ (Void)(kout << "[DMAWrapper::Write] Writing at address: " << hex_number(reinterpret_cast<UIntPtr>(this->fAddress) + offset) << kendl);
return (UIntPtr)ke_dma_read<UInt32>(reinterpret_cast<UIntPtr>(this->fAddress), offset);
}
diff --git a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
index 257dd5c8..cd25ab7f 100644
--- a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
@@ -108,7 +108,7 @@ ATAInit_Retry:
kATADiskModel[40] = '\0';
- (void)(kout << "Drive Model: " << kATADiskModel << kendl);
+ (Void)(kout << "Drive Model: " << kATADiskModel << kendl);
return true;
}