summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
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
parent2a34afdf04a5ec24d091469fa50a09882c898881 (diff)
dev, boot, kernel: improvements, and fixing the VEPM formatter.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
-rw-r--r--dev/kernel/FSKit/NeFS.h2
-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
-rw-r--r--dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc2
-rw-r--r--dev/kernel/HALKit/ARM64/HalKernelPanic.cc4
-rw-r--r--dev/kernel/HALKit/POWER/AP.h4
-rw-r--r--dev/kernel/HALKit/POWER/HalAP.cc40
-rw-r--r--dev/kernel/HALKit/POWER/HalApplicationProcessor.cc41
-rw-r--r--dev/kernel/HALKit/POWER/HalHardwareThread.cc (renamed from dev/kernel/HALKit/POWER/HalThread.cc)0
-rw-r--r--dev/kernel/HALKit/RISCV/AP.h4
-rw-r--r--dev/kernel/HALKit/RISCV/HalAP.cc40
-rw-r--r--dev/kernel/HALKit/RISCV/HalApplicationProcessor.cc45
-rw-r--r--dev/kernel/src/ACPIFactoryInterface.cc16
-rw-r--r--dev/kernel/src/BitMapMgr.cc18
-rw-r--r--dev/kernel/src/CxxAbi-AMD64.cc6
-rw-r--r--dev/kernel/src/CxxAbi-ARM64.cc4
-rw-r--r--dev/kernel/src/FS/NeFS.cc52
-rw-r--r--dev/kernel/src/IndexableProperty.cc2
-rw-r--r--dev/kernel/src/MemoryMgr.cc6
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc8
24 files changed, 197 insertions, 183 deletions
diff --git a/dev/kernel/FSKit/NeFS.h b/dev/kernel/FSKit/NeFS.h
index b6f92bc9..6b1849ff 100644
--- a/dev/kernel/FSKit/NeFS.h
+++ b/dev/kernel/FSKit/NeFS.h
@@ -432,7 +432,7 @@ namespace Kernel
if (!parser->CreateFork(new_fork))
return NO;
- (void)(kout << "XML commit: " << xml_data << " to fork: " << journal_name << kendl);
+ (Void)(kout << "XML commit: " << xml_data << " to fork: " << journal_name << kendl);
auto ret = parser->WriteCatalog(new_fork.CatalogName, YES, xml_data, rt_string_len(xml_data), new_fork.ForkName);
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;
}
diff --git a/dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc b/dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc
index 1553b2ed..7d985a44 100644
--- a/dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/ARM64/HalApplicationProcessor.cc
@@ -93,7 +93,7 @@ namespace Kernel
const UInt16 kInterruptScheduler = 0x20;
- (void)(kout << "Handling interrupt for AP: " << interrupt << kendl);
+ (Void)(kout << "Handling interrupt for AP: " << interrupt << kendl);
switch (interrupt)
{
diff --git a/dev/kernel/HALKit/ARM64/HalKernelPanic.cc b/dev/kernel/HALKit/ARM64/HalKernelPanic.cc
index 1c88ccc6..ad966991 100644
--- a/dev/kernel/HALKit/ARM64/HalKernelPanic.cc
+++ b/dev/kernel/HALKit/ARM64/HalKernelPanic.cc
@@ -71,8 +71,8 @@ namespace Kernel
{
if (!expr)
{
- (void)(kout << "FAILED: FILE: " << file << kendl);
- (void)(kout << "FAILED: LINE: " << line << kendl);
+ (Void)(kout << "FAILED: FILE: " << file << kendl);
+ (Void)(kout << "FAILED: LINE: " << line << kendl);
ke_panic(RUNTIME_CHECK_FAILED, file); // Runtime Check failed
}
diff --git a/dev/kernel/HALKit/POWER/AP.h b/dev/kernel/HALKit/POWER/AP.h
index c990b950..4558804b 100644
--- a/dev/kernel/HALKit/POWER/AP.h
+++ b/dev/kernel/HALKit/POWER/AP.h
@@ -26,7 +26,9 @@ namespace Kernel
typedef struct HAL_HARDWARE_THREAD
{
Kernel::UIntPtr fStartAddress;
- Kernel::UInt8 fPrivleged : 1;
+ Kernel::UIntPtr fStackPtr;
+ Kernel::UIntPtr fFramePtr;
+ Kernel::UInt8 fPrivileged : 1;
Kernel::UInt32 fPageMemoryFlags;
hal_ap_kind fIdentNumber;
} HAL_HARDWARE_THREAD;
diff --git a/dev/kernel/HALKit/POWER/HalAP.cc b/dev/kernel/HALKit/POWER/HalAP.cc
deleted file mode 100644
index 781b34a6..00000000
--- a/dev/kernel/HALKit/POWER/HalAP.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -------------------------------------------
-
- Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
-
-------------------------------------------- */
-
-#include <HALKit/POWER/Processor.h>
-#include <KernelKit/DebugOutput.h>
-#include <HALKit/POWER/AP.h>
-
-using namespace Kernel;
-
-namespace Kernel::Detail
-{
- STATIC void mp_hang_fn(void)
- {
- while (YES)
- ;
- }
-} // namespace Kernel::Detail
-
-/// @brief wakes up thread.
-/// wakes up thread from hang.
-void mp_wakeup_thread(HAL::StackFramePtr stack)
-{
- if (!stack)
- return;
-
- hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(stack->BP));
-}
-
-/// @brief makes thread sleep.
-/// hooks and hangs thread to prevent code from executing.
-void mp_hang_thread(HAL::StackFramePtr stack)
-{
- if (!stack)
- return;
-
- hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(Kernel::Detail::mp_hang_fn));
-}
diff --git a/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc b/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc
new file mode 100644
index 00000000..ca2153e3
--- /dev/null
+++ b/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc
@@ -0,0 +1,41 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <HALKit/POWER/Processor.h>
+#include <KernelKit/DebugOutput.h>
+#include <HALKit/POWER/AP.h>
+
+namespace Kernel::Detail
+{
+ STATIC void mp_hang_fn(void)
+ {
+ while (YES)
+ ;
+ }
+} // namespace Kernel::Detail
+
+namespace Kernel
+{
+ /// @brief wakes up thread.
+ /// wakes up thread from hang.
+ void mp_wakeup_thread(HAL::StackFramePtr stack)
+ {
+ if (!stack)
+ return;
+
+ hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(stack->BP));
+ }
+
+ /// @brief makes thread sleep.
+ /// hooks and hangs thread to prevent code from executing.
+ void mp_hang_thread(HAL::StackFramePtr stack)
+ {
+ if (!stack)
+ return;
+
+ hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(Kernel::Detail::mp_hang_fn));
+ }
+} // namespace Kernel \ No newline at end of file
diff --git a/dev/kernel/HALKit/POWER/HalThread.cc b/dev/kernel/HALKit/POWER/HalHardwareThread.cc
index 40bb7d8a..40bb7d8a 100644
--- a/dev/kernel/HALKit/POWER/HalThread.cc
+++ b/dev/kernel/HALKit/POWER/HalHardwareThread.cc
diff --git a/dev/kernel/HALKit/RISCV/AP.h b/dev/kernel/HALKit/RISCV/AP.h
index 0a8546e9..e55e3462 100644
--- a/dev/kernel/HALKit/RISCV/AP.h
+++ b/dev/kernel/HALKit/RISCV/AP.h
@@ -22,7 +22,9 @@ namespace Kernel
typedef struct HAL_HARDWARE_THREAD
{
Kernel::UIntPtr fStartAddress;
- Kernel::UInt8 fPrivleged : 1;
+ Kernel::UIntPtr fStackPtr;
+ Kernel::UIntPtr fFramePtr;
+ Kernel::UInt8 fPrivileged : 1;
Kernel::UInt32 fPageMemoryFlags;
hal_ap_kind fIdentNumber;
} HAL_HARDWARE_THREAD;
diff --git a/dev/kernel/HALKit/RISCV/HalAP.cc b/dev/kernel/HALKit/RISCV/HalAP.cc
deleted file mode 100644
index 72a3cf13..00000000
--- a/dev/kernel/HALKit/RISCV/HalAP.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -------------------------------------------
-
- Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
-
-------------------------------------------- */
-
-#include <HALKit/RISCV/Processor.h>
-#include <KernelKit/DebugOutput.h>
-#include <HALKit/RISCV/AP.h>
-
-using namespace Kernel;
-
-namespace Kernel::Detail
-{
- STATIC void mp_hang_fn(void)
- {
- while (YES)
- ;
- }
-} // namespace Kernel::Detail
-
-/// @brief wakes up thread.
-/// wakes up thread from hang.
-void mp_wakeup_thread(HAL::StackFramePtr stack)
-{
- if (!stack)
- return;
-
- hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(stack->BP));
-}
-
-/// @brief makes thread sleep.
-/// hooks and hangs thread to prevent code from executing.
-void mp_hang_thread(HAL::StackFramePtr stack)
-{
- if (!stack)
- return;
-
- hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(Kernel::Detail::mp_hang_fn));
-}
diff --git a/dev/kernel/HALKit/RISCV/HalApplicationProcessor.cc b/dev/kernel/HALKit/RISCV/HalApplicationProcessor.cc
new file mode 100644
index 00000000..1967a649
--- /dev/null
+++ b/dev/kernel/HALKit/RISCV/HalApplicationProcessor.cc
@@ -0,0 +1,45 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#include <HALKit/RISCV/Processor.h>
+#include <KernelKit/DebugOutput.h>
+#include <HALKit/RISCV/AP.h>
+
+using namespace Kernel;
+
+namespace Kernel
+{
+ namespace Detail
+ {
+ STATIC void mp_hang_fn(void)
+ {
+ while (YES)
+ ;
+ }
+
+ } // namespace Detail
+
+ /// @brief wakes up thread.
+ /// wakes up thread from hang.
+ void mp_wakeup_thread(HAL::StackFramePtr stack)
+ {
+ if (!stack)
+ return;
+
+ hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(stack->BP));
+ }
+
+ /// @brief makes thread sleep.
+ /// hooks and hangs thread to prevent code from executing.
+ void mp_hang_thread(HAL::StackFramePtr stack)
+ {
+ if (!stack)
+ return;
+
+ hal_set_pc_to_hart(reinterpret_cast<HAL_HARDWARE_THREAD*>(stack->R15), reinterpret_cast<VoidPtr>(Kernel::Detail::mp_hang_fn));
+ }
+
+} // namespace Kernel
diff --git a/dev/kernel/src/ACPIFactoryInterface.cc b/dev/kernel/src/ACPIFactoryInterface.cc
index b85d6ab3..9a3c30d0 100644
--- a/dev/kernel/src/ACPIFactoryInterface.cc
+++ b/dev/kernel/src/ACPIFactoryInterface.cc
@@ -43,10 +43,10 @@ namespace Kernel
this->fEntries = num;
- (void)(kout << "ACPI: Number of entries: " << number(this->fEntries) << kendl);
- (void)(kout << "ACPI: Revision: " << number(xsdt->Revision) << kendl);
- (void)(kout << "ACPI: Signature: " << xsdt->Signature << kendl);
- (void)(kout << "ACPI: Address of XSDT: " << hex_number((UIntPtr)xsdt) << kendl);
+ (Void)(kout << "ACPI: Number of entries: " << number(this->fEntries) << kendl);
+ (Void)(kout << "ACPI: Revision: " << number(xsdt->Revision) << kendl);
+ (Void)(kout << "ACPI: Signature: " << xsdt->Signature << kendl);
+ (Void)(kout << "ACPI: Address of XSDT: " << hex_number((UIntPtr)xsdt) << kendl);
const short cAcpiSignatureLength = 4;
@@ -54,8 +54,8 @@ namespace Kernel
{
SDT* sdt = reinterpret_cast<SDT*>(xsdt->AddressArr[index]);
- (void)(kout << "ACPI: Checksum: " << number(sdt->Checksum) << kendl);
- (void)(kout << "ACPI: Revision: " << number(sdt->Revision) << kendl);
+ (Void)(kout << "ACPI: Checksum: " << number(sdt->Checksum) << kendl);
+ (Void)(kout << "ACPI: Revision: " << number(sdt->Revision) << kendl);
for (short signature_index = 0; signature_index < cAcpiSignatureLength; ++signature_index)
{
@@ -64,8 +64,8 @@ namespace Kernel
if (signature_index == (cAcpiSignatureLength - 1))
{
- (void)(kout << "ACPI: SDT Signature: " << sdt->Signature << kendl);
- (void)(kout << "ACPI: SDT OEM ID: " << sdt->OemId << kendl);
+ (Void)(kout << "ACPI: SDT Signature: " << sdt->Signature << kendl);
+ (Void)(kout << "ACPI: SDT OEM ID: " << sdt->OemId << kendl);
return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(xsdt->AddressArr[index]));
}
}
diff --git a/dev/kernel/src/BitMapMgr.cc b/dev/kernel/src/BitMapMgr.cc
index 1a1e2c0d..83efe4eb 100644
--- a/dev/kernel/src/BitMapMgr.cc
+++ b/dev/kernel/src/BitMapMgr.cc
@@ -161,18 +161,18 @@ namespace Kernel
{
if (!this->IsBitMap(ptr_bit_set))
{
- (void)(kout << "Not a BitMap: " << hex_number((UIntPtr)ptr_bit_set) << kendl);
+ (Void)(kout << "Not a BitMap: " << hex_number((UIntPtr)ptr_bit_set) << kendl);
return;
}
- (void)(kout << "Magic: " << hex_number(ptr_bit_set[kBitMapMagIdx]) << kendl);
- (void)(kout << "Is Allocated? " << (ptr_bit_set[kBitMapUsedIdx] ? "YES" : "NO") << kendl);
- (void)(kout << "Size of BitMap (B): " << number(ptr_bit_set[kBitMapSizeIdx]) << kendl);
- (void)(kout << "Size of BitMap (KIB): " << number(KIB(ptr_bit_set[kBitMapSizeIdx])) << kendl);
- (void)(kout << "Size of BitMap (MIB): " << number(MIB(ptr_bit_set[kBitMapSizeIdx])) << kendl);
- (void)(kout << "Size of BitMap (GIB): " << number(GIB(ptr_bit_set[kBitMapSizeIdx])) << kendl);
- (void)(kout << "Size of BitMap (TIB): " << number(TIB(ptr_bit_set[kBitMapSizeIdx])) << kendl);
- (void)(kout << "BitMap Address: " << hex_number((UIntPtr)ptr_bit_set) << kendl);
+ (Void)(kout << "Magic: " << hex_number(ptr_bit_set[kBitMapMagIdx]) << kendl);
+ (Void)(kout << "Is Allocated? " << (ptr_bit_set[kBitMapUsedIdx] ? "YES" : "NO") << kendl);
+ (Void)(kout << "Size of BitMap (B): " << number(ptr_bit_set[kBitMapSizeIdx]) << kendl);
+ (Void)(kout << "Size of BitMap (KIB): " << number(KIB(ptr_bit_set[kBitMapSizeIdx])) << kendl);
+ (Void)(kout << "Size of BitMap (MIB): " << number(MIB(ptr_bit_set[kBitMapSizeIdx])) << kendl);
+ (Void)(kout << "Size of BitMap (GIB): " << number(GIB(ptr_bit_set[kBitMapSizeIdx])) << kendl);
+ (Void)(kout << "Size of BitMap (TIB): " << number(TIB(ptr_bit_set[kBitMapSizeIdx])) << kendl);
+ (Void)(kout << "BitMap Address: " << hex_number((UIntPtr)ptr_bit_set) << kendl);
}
};
} // namespace Detail
diff --git a/dev/kernel/src/CxxAbi-AMD64.cc b/dev/kernel/src/CxxAbi-AMD64.cc
index 6bf5d009..950e0c02 100644
--- a/dev/kernel/src/CxxAbi-AMD64.cc
+++ b/dev/kernel/src/CxxAbi-AMD64.cc
@@ -19,13 +19,13 @@ Kernel::UIntPtr __dso_handle;
EXTERN_C Kernel::Void __cxa_pure_virtual(void* self)
{
- (void)(Kernel::kout << "object: " << Kernel::number(reinterpret_cast<Kernel::UIntPtr>(self)));
- (void)(Kernel::kout << ", has unimplemented virtual functions.\r");
+ (Kernel::Void)(Kernel::kout << "object: " << Kernel::number(reinterpret_cast<Kernel::UIntPtr>(self)));
+ (Kernel::Void)(Kernel::kout << ", has unimplemented virtual functions.\r");
}
EXTERN_C void ___chkstk_ms(void)
{
- (void)(Kernel::kout << "Stack smashing detected!\r");
+ (Kernel::Void)(Kernel::kout << "Stack smashing detected!\r");
dbg_break_point();
}
diff --git a/dev/kernel/src/CxxAbi-ARM64.cc b/dev/kernel/src/CxxAbi-ARM64.cc
index 34dab83a..b3db3815 100644
--- a/dev/kernel/src/CxxAbi-ARM64.cc
+++ b/dev/kernel/src/CxxAbi-ARM64.cc
@@ -83,8 +83,8 @@ namespace cxxabiv1
EXTERN_C Kernel::Void _purecall(void* self)
{
- kout << "object: " << Kernel::number(reinterpret_cast<Kernel::UIntPtr>(self));
- kout << ", has unimplemented virtual functions.\r";
+ (Kernel::Void)(Kernel::kout << "object: " << Kernel::number(reinterpret_cast<Kernel::UIntPtr>(self)));
+ (Kernel::Void)(Kernel::kout << ", has unimplemented virtual functions.\r");
}
EXTERN_C Kernel::Void _Init_thread_footer(Kernel::Int* thread_obj)
diff --git a/dev/kernel/src/FS/NeFS.cc b/dev/kernel/src/FS/NeFS.cc
index e8e3804c..8ebd551f 100644
--- a/dev/kernel/src/FS/NeFS.cc
+++ b/dev/kernel/src/FS/NeFS.cc
@@ -73,7 +73,7 @@ _Output BOOL NeFileSystemParser::CreateFork(_Input NEFS_FORK_STRUCT& the_fork)
Lba lba = catalog->DataFork;
- (void)(kout << "Fork LBA: " << hex_number(lba) << kendl);
+ (Void)(kout << "Fork LBA: " << hex_number(lba) << kendl);
if (lba < kNeFSCatalogStartAddress)
return NO;
@@ -94,7 +94,7 @@ _Output BOOL NeFileSystemParser::CreateFork(_Input NEFS_FORK_STRUCT& the_fork)
drv.fInput(drv.fPacket);
- (void)(kout << "Next fork: " << hex_number(cur_fork.NextSibling) << kendl);
+ (Void)(kout << "Next fork: " << hex_number(cur_fork.NextSibling) << kendl);
if (cur_fork.Flags & kNeFSFlagCreated)
{
@@ -144,10 +144,10 @@ _Output BOOL NeFileSystemParser::CreateFork(_Input NEFS_FORK_STRUCT& the_fork)
fs_ifs_write(&kMountpoint, drv, MountpointInterface::kDriveIndexA);
/// log what we have now.
- (void)(kout << "Fork offset is at: " << hex_number(the_fork.DataOffset)
+ (Void)(kout << "Fork offset is at: " << hex_number(the_fork.DataOffset)
<< kendl);
- (void)(kout << "Wrote fork metadata at: " << hex_number(lba) << kendl);
+ (Void)(kout << "Wrote fork metadata at: " << hex_number(lba) << kendl);
return YES;
}
@@ -461,7 +461,7 @@ _Output Bool NeFileSystemParser::FormatGPT(_Input _Output DriveTrait* drive, _In
NE_UNUSED(flags);
NE_UNUSED(part_name);
- (void)(kout << "FormatGPT: Not implemented yet.\r");
+ (Void)(kout << "FormatGPT: Not implemented yet.\r");
return NO;
}
@@ -600,14 +600,14 @@ bool NeFileSystemParser::FormatEPM(_Input _Output DriveTrait* drive, _Input cons
drive->fOutput(drive->fPacket);
- (void)(kout << "drive kind: " << drive->fProtocol() << kendl);
+ (Void)(kout << "drive kind: " << drive->fProtocol() << kendl);
- (void)(kout << "partition name: " << part_block->PartitionName << kendl);
- (void)(kout << "start: " << hex_number(part_block->StartCatalog) << kendl);
- (void)(kout << "number of catalogs: " << hex_number(part_block->CatalogCount) << kendl);
- (void)(kout << "free catalog: " << hex_number(part_block->FreeCatalog) << kendl);
- (void)(kout << "free sectors: " << hex_number(part_block->FreeSectors) << kendl);
- (void)(kout << "sector size: " << hex_number(part_block->SectorSize) << kendl);
+ (Void)(kout << "partition name: " << part_block->PartitionName << kendl);
+ (Void)(kout << "start: " << hex_number(part_block->StartCatalog) << kendl);
+ (Void)(kout << "number of catalogs: " << hex_number(part_block->CatalogCount) << kendl);
+ (Void)(kout << "free catalog: " << hex_number(part_block->FreeCatalog) << kendl);
+ (Void)(kout << "free sectors: " << hex_number(part_block->FreeSectors) << kendl);
+ (Void)(kout << "sector size: " << hex_number(part_block->SectorSize) << kendl);
// write the root catalog.
this->CreateCatalog(kNeFSRoot, 0, kNeFSCatalogKindDir);
@@ -666,7 +666,7 @@ bool NeFileSystemParser::WriteCatalog(_Input const Char* catalog_name, Bool is_r
NEFS_FORK_STRUCT* fork_data_input = new NEFS_FORK_STRUCT();
NEFS_FORK_STRUCT prev_fork{};
- (void)(kout << hex_number(startFork) << kendl);
+ (Void)(kout << hex_number(startFork) << kendl);
// sanity check of the fork position as the condition to run the loop.
while (startFork >= kNeFSCatalogStartAddress)
@@ -677,13 +677,13 @@ bool NeFileSystemParser::WriteCatalog(_Input const Char* catalog_name, Bool is_r
drive.fInput(drive.fPacket);
- (void)(kout << hex_number(fork_data_input->DataSize) << kendl);
- (void)(kout << hex_number(size_of_data) << kendl);
- (void)(kout << hex_number(fork_data_input->Flags) << kendl);
- (void)(kout << fork_name << kendl);
- (void)(kout << fork_data_input->ForkName << kendl);
- (void)(kout << fork_data_input->CatalogName << kendl);
- (void)(kout << catalog_name << kendl);
+ (Void)(kout << hex_number(fork_data_input->DataSize) << kendl);
+ (Void)(kout << hex_number(size_of_data) << kendl);
+ (Void)(kout << hex_number(fork_data_input->Flags) << kendl);
+ (Void)(kout << fork_name << kendl);
+ (Void)(kout << fork_data_input->ForkName << kendl);
+ (Void)(kout << fork_data_input->CatalogName << kendl);
+ (Void)(kout << catalog_name << kendl);
if ((fork_data_input->Flags & kNeFSFlagCreated) &&
KStringBuilder::Equals(fork_data_input->ForkName, fork_name) &&
@@ -698,11 +698,11 @@ bool NeFileSystemParser::WriteCatalog(_Input const Char* catalog_name, Bool is_r
drive.fPacket.fPacketSize = size_of_data;
drive.fPacket.fPacketLba = fork_data_input->DataOffset;
- (void)(kout << "data offset: " << hex_number(fork_data_input->DataOffset) << kendl);
+ (Void)(kout << "data offset: " << hex_number(fork_data_input->DataOffset) << kendl);
drive.fOutput(drive.fPacket);
- (void)(kout << "wrote data at offset: " << hex_number(fork_data_input->DataOffset) << kendl);
+ (Void)(kout << "wrote data at offset: " << hex_number(fork_data_input->DataOffset) << kendl);
delete fork_data_input;
delete[] buf;
@@ -841,8 +841,8 @@ kNeFSSearchThroughCatalogList:
goto NeFSContinueSearch;
}
- (void)(kout << "Found available catalog at: " << hex_number(start_catalog_lba) << kendl);
- (void)(kout << "Found available catalog at: " << temporary_catalog.Name << kendl);
+ (Void)(kout << "Found available catalog at: " << hex_number(start_catalog_lba) << kendl);
+ (Void)(kout << "Found available catalog at: " << temporary_catalog.Name << kendl);
NEFS_CATALOG_STRUCT* catalog_ptr = new NEFS_CATALOG_STRUCT();
rt_copy_memory(&temporary_catalog, catalog_ptr, sizeof(NEFS_CATALOG_STRUCT));
@@ -998,8 +998,8 @@ VoidPtr NeFileSystemParser::ReadCatalog(_Input _Output NEFS_CATALOG_STRUCT* cata
fs_fork_data = fs_buf;
- (void)(kout << "ForkName: " << fs_fork_data->ForkName << kendl);
- (void)(kout << "CatalogName: " << fs_fork_data->CatalogName << kendl);
+ (Void)(kout << "ForkName: " << fs_fork_data->ForkName << kendl);
+ (Void)(kout << "CatalogName: " << fs_fork_data->CatalogName << kendl);
if (KStringBuilder::Equals(forkName, fs_fork_data->ForkName) &&
KStringBuilder::Equals(catalog->Name, fs_fork_data->CatalogName))
diff --git a/dev/kernel/src/IndexableProperty.cc b/dev/kernel/src/IndexableProperty.cc
index d586398d..05440ee9 100644
--- a/dev/kernel/src/IndexableProperty.cc
+++ b/dev/kernel/src/IndexableProperty.cc
@@ -50,7 +50,7 @@ namespace Kernel
indexer.AddFlag(kIndexerClaimed);
rt_copy_memory((VoidPtr)indexer.Leak().Path, (VoidPtr)filename, filenameLen);
- (void)(kout << "FSKit: Indexed new file: " << filename << kendl);
+ (Void)(kout << "FSKit: Indexed new file: " << filename << kendl);
}
}
} // namespace Indexer
diff --git a/dev/kernel/src/MemoryMgr.cc b/dev/kernel/src/MemoryMgr.cc
index eff54435..2f70d85f 100644
--- a/dev/kernel/src/MemoryMgr.cc
+++ b/dev/kernel/src/MemoryMgr.cc
@@ -150,7 +150,7 @@ namespace Kernel
auto result = reinterpret_cast<VoidPtr>(heap_info_ptr->fOffset);
- (void)(kout << "Registered heap address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << kendl);
+ (Void)(kout << "Registered heap address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << kendl);
return result;
}
@@ -172,7 +172,7 @@ namespace Kernel
heap_info_ptr->fPage = true;
- (void)(kout << "Registered page address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << kendl);
+ (Void)(kout << "Registered page address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << kendl);
return kErrorSuccess;
}
@@ -239,7 +239,7 @@ namespace Kernel
heap_info_ptr->fMagic = 0;
heap_info_ptr->fPad = 0;
- (void)(kout << "Address has been successfully freed: " << hex_number((UIntPtr)heap_info_ptr) << kendl);
+ (Void)(kout << "Address has been successfully freed: " << hex_number((UIntPtr)heap_info_ptr) << kendl);
PTEWrapper page_wrapper(No, No, No, reinterpret_cast<UIntPtr>(heap_info_ptr) - sizeof(Detail::MM_INFORMATION_BLOCK));
Ref<PTEWrapper> pte_address{page_wrapper};
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index fb33e447..d6be0f5f 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -60,7 +60,7 @@ namespace Kernel
if (this->Status != ProcessStatusKind::kRunning)
return;
- (void)(kout << this->Name << ": crashed, error id: " << number(-kErrorProcessFault) << kendl);
+ (Void)(kout << this->Name << ": crashed, error id: " << number(-kErrorProcessFault) << kendl);
this->Exit(-kErrorProcessFault);
}
@@ -439,7 +439,7 @@ namespace Kernel
break;
}
default: {
- (void)(kout << "Unknown process kind: " << hex_number(process.Kind) << kendl);
+ (Void)(kout << "Unknown process kind: " << hex_number(process.Kind) << kendl);
break;
}
}
@@ -468,8 +468,8 @@ namespace Kernel
process.Status = ProcessStatusKind::kStarting;
process.PTime = (UIntPtr)AffinityKind::kStandard;
- (void)(kout << "PID: " << number(process.ProcessId) << kendl);
- (void)(kout << "Name: " << process.Name << kendl);
+ (Void)(kout << "PID: " << number(process.ProcessId) << kendl);
+ (Void)(kout << "Name: " << process.Name << kendl);
return pid;
}