summaryrefslogtreecommitdiffhomepage
path: root/Kernel/HALKit
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-07-28 16:11:46 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-07-28 16:11:46 +0000
commitc4023005e029ae092dad2689564c490580dd5c28 (patch)
tree3080ba07a6b552bf3d7591574cf69b2a3c8fd0fd /Kernel/HALKit
parent8c8822fff78f9ff9cd640271da9b3634c4c2f97f (diff)
parent4db57a2d646b1538783a0675b38bada7a0f903ae (diff)
Merged in MHR-36 (pull request #17)
MHR-36
Diffstat (limited to 'Kernel/HALKit')
-rw-r--r--Kernel/HALKit/64x0/HalVirtualMemory.cxx4
-rw-r--r--Kernel/HALKit/64x0/ReadMe.md2
-rw-r--r--Kernel/HALKit/AMD64/CPUID.hxx2
-rw-r--r--Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx9
-rw-r--r--Kernel/HALKit/AMD64/HalAPIC.cxx36
-rw-r--r--Kernel/HALKit/AMD64/HalBoot.asm (renamed from Kernel/HALKit/AMD64/HalNewBoot.asm)2
-rw-r--r--Kernel/HALKit/AMD64/HalControlRegister.s2
-rw-r--r--Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx (renamed from Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp)12
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx (renamed from Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp)107
-rw-r--r--Kernel/HALKit/AMD64/HalDebugOutput.cxx13
-rw-r--r--Kernel/HALKit/AMD64/HalDebugPort.cxx2
-rw-r--r--Kernel/HALKit/AMD64/HalDescriptorLoader.cxx (renamed from Kernel/HALKit/AMD64/HalDescriptorLoader.cpp)11
-rw-r--r--Kernel/HALKit/AMD64/HalHart.cxx (renamed from Kernel/HALKit/AMD64/HalHart.cpp)2
-rw-r--r--Kernel/HALKit/AMD64/HalInstallTIB.asm24
-rw-r--r--Kernel/HALKit/AMD64/HalInterruptAPI.asm47
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx71
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMouse.cxx14
-rw-r--r--Kernel/HALKit/AMD64/HalPageAlloc.hxx (renamed from Kernel/HALKit/AMD64/HalPageAlloc.hpp)20
-rw-r--r--Kernel/HALKit/AMD64/HalProcessor.cxx (renamed from Kernel/HALKit/AMD64/HalProcessor.cpp)20
-rw-r--r--Kernel/HALKit/AMD64/HalSMPCoreManager.asm2
-rw-r--r--Kernel/HALKit/AMD64/HalScheduler.cxx (renamed from Kernel/HALKit/AMD64/HalSMPCore.cxx)8
-rw-r--r--Kernel/HALKit/AMD64/HalTimer.cxx14
-rw-r--r--Kernel/HALKit/AMD64/HalUtils.asm49
-rw-r--r--Kernel/HALKit/AMD64/Hypervisor.hpp3
-rw-r--r--Kernel/HALKit/AMD64/PCI/Database.cxx2
-rw-r--r--Kernel/HALKit/AMD64/PCI/Device.cxx14
-rw-r--r--Kernel/HALKit/AMD64/PCI/Dma.cxx2
-rw-r--r--Kernel/HALKit/AMD64/PCI/Express.cxx2
-rw-r--r--Kernel/HALKit/AMD64/PCI/IO.cxx2
-rw-r--r--Kernel/HALKit/AMD64/PCI/Iterator.cxx2
-rw-r--r--Kernel/HALKit/AMD64/PCI/PCI.cxx4
-rw-r--r--Kernel/HALKit/AMD64/Processor.hxx (renamed from Kernel/HALKit/AMD64/Processor.hpp)121
-rw-r--r--Kernel/HALKit/AMD64/Storage/AHCI.cxx4
-rw-r--r--Kernel/HALKit/AMD64/Storage/ATA-DMA.cxx4
-rw-r--r--Kernel/HALKit/AMD64/Storage/ATA-PIO.cxx4
-rw-r--r--Kernel/HALKit/ARM64/HalHart.cxx29
-rw-r--r--Kernel/HALKit/ARM64/HalKernelMain.cxx178
-rw-r--r--Kernel/HALKit/ARM64/HalPageAlloc.hxx (renamed from Kernel/HALKit/ARM64/HalPageAlloc.hpp)2
-rw-r--r--Kernel/HALKit/ARM64/HalScheduler.cxx31
-rw-r--r--Kernel/HALKit/ARM64/HalTimer.cxx13
-rw-r--r--Kernel/HALKit/ARM64/Processor.hxx7
-rw-r--r--Kernel/HALKit/ARM64/ReadMe.md2
-rw-r--r--Kernel/HALKit/ARM64/Storage/HalFlash.cxx2
-rw-r--r--Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp4
-rw-r--r--Kernel/HALKit/AXP/Processor.hpp2
-rw-r--r--Kernel/HALKit/POWER/HalContextSwitchPowerPC.s2
-rw-r--r--Kernel/HALKit/POWER/HalHardware.cxx4
-rw-r--r--Kernel/HALKit/POWER/HalHart.cxx4
-rw-r--r--Kernel/HALKit/POWER/HalSerialPort.cxx6
-rw-r--r--Kernel/HALKit/POWER/HalStartSequence.s2
-rw-r--r--Kernel/HALKit/POWER/HalThread.cxx4
-rw-r--r--Kernel/HALKit/POWER/HalVirtualMemory.cxx33
-rw-r--r--Kernel/HALKit/POWER/Hart.hxx8
-rw-r--r--Kernel/HALKit/POWER/MBCI/HalMBCIHost.cxx4
-rw-r--r--Kernel/HALKit/POWER/Processor.hpp55
-rw-r--r--Kernel/HALKit/POWER/Processor.hxx56
-rw-r--r--Kernel/HALKit/POWER/ppc-cpu.h130
-rw-r--r--Kernel/HALKit/POWER/ppc-mmu.h12
-rw-r--r--Kernel/HALKit/RISCV/Hart.hxx2
59 files changed, 798 insertions, 431 deletions
diff --git a/Kernel/HALKit/64x0/HalVirtualMemory.cxx b/Kernel/HALKit/64x0/HalVirtualMemory.cxx
index f62f888f..9aeb6b8e 100644
--- a/Kernel/HALKit/64x0/HalVirtualMemory.cxx
+++ b/Kernel/HALKit/64x0/HalVirtualMemory.cxx
@@ -1,10 +1,10 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
-#include <HALKit/POWER/Processor.hpp>
+#include <HALKit/POWER/Processor.hxx>
#include <KernelKit/DebugOutput.hpp>
using namespace Kernel;
diff --git a/Kernel/HALKit/64x0/ReadMe.md b/Kernel/HALKit/64x0/ReadMe.md
index a22d0385..2e72d5bf 100644
--- a/Kernel/HALKit/64x0/ReadMe.md
+++ b/Kernel/HALKit/64x0/ReadMe.md
@@ -1,4 +1,4 @@
64x0 Hardware Abstraction Layer
-- Supported CPU: Zeta Electronics Corporation 64x0
+- Supported CPU: ZKA Technologies 64x0
- Supported Firmware: CoreBoot \ No newline at end of file
diff --git a/Kernel/HALKit/AMD64/CPUID.hxx b/Kernel/HALKit/AMD64/CPUID.hxx
index 602b2466..5c05277e 100644
--- a/Kernel/HALKit/AMD64/CPUID.hxx
+++ b/Kernel/HALKit/AMD64/CPUID.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
File: CPUID.hxx
Purpose: CPUID flags.
diff --git a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
index ca6a7417..6f66ae5b 100644
--- a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
+++ b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
@@ -1,14 +1,14 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
#include <Modules/ACPI/ACPIFactoryInterface.hxx>
-#include <HALKit/AMD64/Processor.hpp>
+#include <HALKit/AMD64/Processor.hxx>
#include <NewKit/String.hpp>
#include <ArchKit/ArchKit.hpp>
-#include <KernelKit/KernelHeap.hpp>
+#include <KernelKit/Heap.hxx>
namespace Kernel
{
@@ -104,7 +104,8 @@ namespace Kernel
{
SDT& sdt = *reinterpret_cast<SDT*>(xsdt->AddressArr[index]);
- kcout << "ACPI: Revision: " << number(sdt.CreatorID) << endl;
+ kcout << "ACPI: Checksum: " << number(sdt.Checksum) << endl;
+ kcout << "ACPI: Revision: " << number(sdt.Revision) << endl;
for (short signature_index = 0; signature_index < cAcpiSignatureLength; ++signature_index)
{
diff --git a/Kernel/HALKit/AMD64/HalAPIC.cxx b/Kernel/HALKit/AMD64/HalAPIC.cxx
new file mode 100644
index 00000000..34ec7494
--- /dev/null
+++ b/Kernel/HALKit/AMD64/HalAPIC.cxx
@@ -0,0 +1,36 @@
+/* -------------------------------------------
+
+ Copyright ZKA Technologies
+
+------------------------------------------- */
+
+#include <Modules/ACPI/ACPIFactoryInterface.hxx>
+#include <HALKit/AMD64/Processor.hxx>
+
+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/Kernel/HALKit/AMD64/HalNewBoot.asm b/Kernel/HALKit/AMD64/HalBoot.asm
index 5f0342a3..ab8273a1 100644
--- a/Kernel/HALKit/AMD64/HalNewBoot.asm
+++ b/Kernel/HALKit/AMD64/HalBoot.asm
@@ -2,7 +2,7 @@
;; * ========================================================
;; *
;; * Kernel
-;; * Copyright Zeta Electronics Corporation, all rights reserved.
+;; * Copyright ZKA Technologies, all rights reserved.
;; *
;; * ========================================================
;; */
diff --git a/Kernel/HALKit/AMD64/HalControlRegister.s b/Kernel/HALKit/AMD64/HalControlRegister.s
index 20eda96f..34b3da90 100644
--- a/Kernel/HALKit/AMD64/HalControlRegister.s
+++ b/Kernel/HALKit/AMD64/HalControlRegister.s
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
index f41ee55e..29c0f3c7 100644
--- a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
+++ b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -14,7 +14,7 @@ EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp)
{
Kernel::kcout
<< "newoskrnl: General Protection Fault, caused by "
- << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName();
+ << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetProcessName();
Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash();
}
@@ -25,7 +25,7 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp)
{
Kernel::kcout
<< "newoskrnl: Segmentation Fault, caused by "
- << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName();
+ << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetProcessName();
Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash();
}
@@ -36,7 +36,7 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp)
{
Kernel::kcout
<< "newoskrnl: Math error, caused by "
- << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName();
+ << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetProcessName();
Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash();
}
@@ -47,7 +47,7 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp)
{
Kernel::kcout
<< "newoskrnl: Execution error, caused by "
- << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName();
+ << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetProcessName();
Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash();
}
@@ -58,7 +58,7 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp)
{
Kernel::kcout
<< "newoskrnl: Invalid interrupt, caused by "
- << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetName();
+ << Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetProcessName();
Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Crash();
}
diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx
index 94fe68ad..48d737fe 100644
--- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
+++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx
@@ -1,11 +1,11 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
#include <Modules/ACPI/ACPIFactoryInterface.hxx>
-#include <HALKit/AMD64/Processor.hpp>
+#include <HALKit/AMD64/Processor.hxx>
#include <NewKit/KernelCheck.hpp>
#include <ArchKit/ArchKit.hpp>
#include <KernelKit/Semaphore.hpp>
@@ -17,10 +17,14 @@
#define kAPIC_SIPI_Vector 0x00500
#define kAPIC_EIPI_Vector 0x00400
+#define kAPIC_BASE_MSR 0x1B
+#define kAPIC_BASE_MSR_BSP 0x100
+#define kAPIC_BASE_MSR_ENABLE 0x800
+
/// @brief assembly routine. internal use only.
EXTERN_C void _hal_enable_smp(void);
-/// @note: _hal_switch_context
+/// @note: _hal_switch_context is internal
///////////////////////////////////////////////////////////////////////////////////////
@@ -57,8 +61,8 @@ namespace Kernel::HAL
} Selector;
};
- STATIC voidPtr kApicMadt = nullptr;
- STATIC const char* kApicSignature = "APIC";
+ STATIC VoidPtr kApicMadt = nullptr;
+ STATIC const Char* kApicSignature = "APIC";
/// @brief Multiple APIC Descriptor Table.
struct MadtType final : public SDT
@@ -122,11 +126,7 @@ namespace Kernel::HAL
UInt32 fKind{0};
} kApicMadtAddresses[255] = {};
- STATIC SizeT kApicMadtAddressesCount = 0UL;
- STATIC UIntPtr cBaseAddressAPIC = 0xFEE00000;
-
- /// @brief this will help us schedule our cores.
- STATIC Boolean* cProgramInitialized = nullptr;
+ STATIC SizeT kApicMadtAddressesCount = 0UL;
enum
{
@@ -142,7 +142,7 @@ namespace Kernel::HAL
/// @return
Void hal_send_start_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress)
{
- Kernel::ke_dma_write(targetAddress, kAPIC_ICR_High, apicId << 24);
+ Kernel::ke_dma_write(targetAddress, kAPIC_ICR_High, (apicId << 24));
Kernel::ke_dma_write(targetAddress, kAPIC_ICR_Low, kAPIC_SIPI_Vector | vector);
}
@@ -159,25 +159,23 @@ namespace Kernel::HAL
Kernel::ke_dma_write(targetAddress, kAPIC_ICR_Low, kAPIC_EIPI_Vector | vector);
}
- STATIC HAL::StackFramePtr cFramePtr = nullptr;
- STATIC Int32 cSMPInterrupt = 0x40;
-
- EXTERN_C Void hal_apic_acknowledge_cont(Void)
- {
- kcout << "newoskrnl: stopping core...\r";
- ke_stop(RUNTIME_CHECK_BOOTSTRAP);
- }
+ STATIC HAL::StackFramePtr cFramePtr = nullptr;
+ STATIC Int32 cSMPInterrupt = 34;
+ /// @brief Current context getter.
+ /// @retval StackFramePtr the current context.
EXTERN_C StackFramePtr _hal_leak_current_context(Void)
{
return cFramePtr;
}
+ /// @internal
EXTERN_C Void hal_apic_acknowledge(Void)
{
- hal_apic_acknowledge_cont();
+ kcout << "newoskrnl: acknowledge APIC.\r";
}
+ /// @internal
EXTERN_C Void _hal_switch_context(HAL::StackFramePtr stackFrame)
{
hal_switch_context(stackFrame);
@@ -187,17 +185,37 @@ namespace Kernel::HAL
{
Semaphore sem;
- HardwareTimer timer(Seconds(5));
+ constexpr auto cSeconds = 1U;
+
+ HardwareTimer timer(Seconds(cSeconds));
sem.LockOrWait(&ProcessScheduler::The().Leak().TheCurrent().Leak(), &timer);
cFramePtr = stackFrame;
- /// yes the exception field contains the core id.
- hal_send_start_ipi(stackFrame->Rcx, cSMPInterrupt, cBaseAddressAPIC);
-
sem.Unlock();
}
+ STATIC auto cAPICAddress = 0x0FEC00000;
+
+ STATIC Void cpu_set_apic_base(UIntPtr apic)
+ {
+ UInt32 edx = 0;
+ UInt32 eax = (apic & 0xfffff0000) | kAPIC_BASE_MSR_ENABLE;
+
+ edx = (apic >> 32) & 0x0f;
+
+ hal_set_msr(kAPIC_BASE_MSR, eax, edx);
+ }
+
+ STATIC UIntPtr cpu_get_apic_base(Void)
+ {
+ UInt32 eax, edx;
+
+ hal_get_msr(kAPIC_BASE_MSR, &eax, &edx);
+
+ return (eax & 0xfffff000) | ((UIntPtr)(edx & 0x0f) << 32);
+ }
+
/// @brief Fetch and enable cores inside main CPU.
/// @param rsdPtr RSD PTR structure.
Void hal_system_get_cores(voidPtr rsdPtr)
@@ -209,47 +227,14 @@ namespace Kernel::HAL
{
MadtType* madt = reinterpret_cast<MadtType*>(kApicMadt);
- constexpr auto cMaxProbableCores = 4; // the amount of cores we want.
- constexpr auto cStartAt = 0; // start here to avoid boot core.
-
- for (SizeT coreAt = cStartAt; coreAt < cMaxProbableCores; ++coreAt)
- {
- if (madt->MadtRecords[coreAt].Flags < kThreadBoot) // if local apic.
- {
- MadtType::MadtAddress& madtRecord = madt->MadtRecords[coreAt];
-
- // then register as a core for scheduler.
- kcout << "newoskrnl: Register APIC.\r";
-
- kApicMadtAddresses[kApicMadtAddressesCount].fAddress = madtRecord.Address;
- kApicMadtAddresses[kApicMadtAddressesCount].fKind = madt->MadtRecords[coreAt].Flags;
+ cpu_set_apic_base(cpu_get_apic_base());
- ++kApicMadtAddressesCount;
- }
- }
+ // set SVR register to bit 8 to start recieve interrupts.
- ///////////////////////////////////////////////////////////////////////////
- /// Start local APIC now.
- ///////////////////////////////////////////////////////////////////////////
-
- auto flagsSet = Kernel::ke_dma_read(cBaseAddressAPIC, 0xF0); // SVR register.
-
- // enable APIC.
+ auto flagsSet = Kernel::ke_dma_read(cAPICAddress, 0xF0); // SVR register.
flagsSet |= 0x100;
- Kernel::ke_dma_write(cBaseAddressAPIC, 0xF0, flagsSet);
-
- /// Set sprurious interrupt vector.
- Kernel::ke_dma_write(cBaseAddressAPIC, 0xF0, 0x100 | 0xFF);
-
- // highest task priority. for our realtime kernel.
- Kernel::ke_dma_write(cBaseAddressAPIC, 0x21, 0);
-
- cProgramInitialized = new Boolean(true);
-
- constexpr auto cWhatCore = 1;
-
- hal_send_start_ipi(cWhatCore, cSMPInterrupt, cBaseAddressAPIC);
+ Kernel::ke_dma_write(cAPICAddress, 0xF0, flagsSet | 0x100);
}
else
{
diff --git a/Kernel/HALKit/AMD64/HalDebugOutput.cxx b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
index 3dd70dc6..36ae96b0 100644
--- a/Kernel/HALKit/AMD64/HalDebugOutput.cxx
+++ b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -27,7 +27,7 @@ namespace Kernel
/// @brief Init COM1.
/// @return
- bool serial_init() noexcept
+ bool hal_serial_init() noexcept
{
#ifdef __DEBUG__
if (kState == kStateReady || kState == kStateTransmit)
@@ -64,7 +64,7 @@ namespace Kernel
EXTERN_C void ke_io_write(const char* bytes)
{
#ifdef __DEBUG__
- Detail::serial_init();
+ Detail::hal_serial_init();
if (!bytes || Detail::kState != kStateReady)
return;
@@ -74,7 +74,10 @@ namespace Kernel
Detail::kState = kStateTransmit;
SizeT index = 0;
- SizeT len = rt_string_len(bytes, 256);
+ SizeT len = 0;
+
+ index = 0;
+ len = rt_string_len(bytes, 255);
while (index < len)
{
@@ -92,7 +95,7 @@ namespace Kernel
EXTERN_C void ke_io_read(const char* bytes)
{
#ifdef __DEBUG__
- Detail::serial_init();
+ Detail::hal_serial_init();
if (!bytes || Detail::kState != kStateReady)
return;
diff --git a/Kernel/HALKit/AMD64/HalDebugPort.cxx b/Kernel/HALKit/AMD64/HalDebugPort.cxx
index a29a8129..8a161cc7 100644
--- a/Kernel/HALKit/AMD64/HalDebugPort.cxx
+++ b/Kernel/HALKit/AMD64/HalDebugPort.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AMD64/HalDescriptorLoader.cpp b/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx
index 964b402a..7ded9259 100644
--- a/Kernel/HALKit/AMD64/HalDescriptorLoader.cpp
+++ b/Kernel/HALKit/AMD64/HalDescriptorLoader.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -61,13 +61,14 @@ namespace Kernel::HAL
{
MUST_PASS(baseIdt[i]);
- Detail::kInterruptVectorTable[i].Selector = kGdtCodeSelector;
+ Detail::kInterruptVectorTable[i].Selector = (i == kSyscallRoute) ? ((3 * 8) | 3) : 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].OffsetLow = ((UIntPtr)baseIdt[i] & __INT16_MAX__);
+ Detail::kInterruptVectorTable[i].OffsetMid = (((UIntPtr)baseIdt[i] >> 16) & __INT16_MAX__);
Detail::kInterruptVectorTable[i].OffsetHigh =
- (((UIntPtr)baseIdt[i] >> 32) & 0xFFFFFFFF);
+ (((UIntPtr)baseIdt[i] >> 32) & __INT32_MAX__);
+
Detail::kInterruptVectorTable[i].Zero = 0x0;
}
diff --git a/Kernel/HALKit/AMD64/HalHart.cpp b/Kernel/HALKit/AMD64/HalHart.cxx
index 2a12ec50..adbf148c 100644
--- a/Kernel/HALKit/AMD64/HalHart.cpp
+++ b/Kernel/HALKit/AMD64/HalHart.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AMD64/HalInstallTIB.asm b/Kernel/HALKit/AMD64/HalInstallTIB.asm
deleted file mode 100644
index aad5d6d0..00000000
--- a/Kernel/HALKit/AMD64/HalInstallTIB.asm
+++ /dev/null
@@ -1,24 +0,0 @@
-;; /*
-;; * ========================================================
-;; *
-;; * Kernel
-;; * Copyright Zeta Electronics Corporation, all rights reserved.
-;; *
-;; * ========================================================
-;; */
-
-[bits 64]
-
-[global rt_install_tib]
-
-section .text
-
-;; changed: rs, fs
-;; expected: rcx, rdx
-
-rt_install_tib:
- mov rcx, gs ;; TIB -> Thread Information Block
- mov rdx, fs ;; PIB -> Process Information Block
- ret
-
-;; //////////////////////////////////////////////////// ;;
diff --git a/Kernel/HALKit/AMD64/HalInterruptAPI.asm b/Kernel/HALKit/AMD64/HalInterruptAPI.asm
index 016c9cd8..c09d5a06 100644
--- a/Kernel/HALKit/AMD64/HalInterruptAPI.asm
+++ b/Kernel/HALKit/AMD64/HalInterruptAPI.asm
@@ -1,7 +1,7 @@
;; /*
;; * ---------------------------------------------------
;; *
-;; * Copyright Zeta Electronics Corporation, all rights reserved.
+;; * Copyright ZKA Technologies, all rights reserved.
;; *
;; * File: HalInterruptAPI.asm
;; * Purpose: Interrupt routing, redirect raw interrupts into their handlers.
@@ -121,53 +121,16 @@ IntNormal 31
[extern hal_apic_acknowledge]
-__NEW_INT_32:
-;; make this active, SMP works again.
-%if 0
+__NEW_INT_34:
push rax
- push rcx
- push rdx
- push rbx
- push rbp
- push rsi
- push rdi
- push r8
- push r9
- push r10
- push r11
- push r12
- push r13
- push r14
- push r15
-
- jmp hal_apic_acknowledge
-
- pop r15
- pop r14
- pop r13
- pop r12
- pop r11
- pop r10
- pop r9
- pop r8
- pop rdi
- pop rsi
- pop rbp
- pop rbx
- pop rdx
- pop rcx
+ call hal_apic_acknowledge
pop rax
- mov rax, 0
-
- ;; tell there local apic that we're done.
- mov [0xFEE00000 + 0xB0], rax ; LAPIC_EOI
-%endif
iretq
-IntNormal 33
+IntNormal 32
-IntNormal 34
+IntNormal 33
IntNormal 35
IntNormal 36
IntNormal 37
diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx
index 628314b5..1628e5e9 100644
--- a/Kernel/HALKit/AMD64/HalKernelMain.cxx
+++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -9,21 +9,26 @@
#include <FirmwareKit/Handover.hxx>
#include <KernelKit/FileManager.hpp>
#include <KernelKit/Framebuffer.hpp>
-#include <KernelKit/KernelHeap.hpp>
+#include <KernelKit/Heap.hxx>
#include <KernelKit/PEFCodeManager.hxx>
#include <KernelKit/ProcessScheduler.hxx>
-#include <KernelKit/UserHeap.hpp>
-#include <NewKit/Json.hpp>
+#include <KernelKit/ProcessHeap.hxx>
+#include <NewKit/Json.hxx>
#include <Modules/CoreCG/Accessibility.hxx>
#include <KernelKit/CodeManager.hpp>
#include <Modules/ACPI/ACPIFactoryInterface.hxx>
#include <NetworkKit/IPCEP.hxx>
+#include <CFKit/Property.hpp>
-#define KERNEL_INIT(X) X; \
+#define mInitKernel(X) \
+ X; \
Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
+Kernel::Property cKernelVersion;
+Kernel::Property cAutoFormatDisk;
+
/// @brief This symbol is the kernel main symbol.
EXTERN_C void KeMain();
@@ -32,7 +37,7 @@ EXTERN_C Kernel::VoidPtr kInterruptVectorTable[];
struct PACKED HeapAllocInfo final
{
Kernel::VoidPtr fThe;
- Kernel::Size fTheSz;
+ Kernel::Size fTheSz;
};
struct PACKED ProcessBlockInfo final
@@ -46,7 +51,7 @@ struct PACKED ProcessExitInfo final
STATIC constexpr auto cReasonLen = 512;
Kernel::Int64 fCode;
- Kernel::Char fReason[cReasonLen];
+ Kernel::Char fReason[cReasonLen];
};
namespace Kernel::HAL
@@ -121,9 +126,9 @@ EXTERN_C void hal_init_platform(
constexpr auto cCatalogCreate = 0x22;
constexpr auto cRebootInterrupt = 0x23;
constexpr auto cShutdownInterrupt = 0x24;
- constexpr auto cLPCSendMsg = 0x25;
- constexpr auto cLPCOpenMsg = 0x26;
- constexpr auto cLPCCloseMsg = 0x27;
+ constexpr auto cLPCSendMsg = 0x25;
+ constexpr auto cLPCOpenMsg = 0x26;
+ constexpr auto cLPCCloseMsg = 0x27;
constexpr auto cLPCSanitizeMsg = 0x28;
kSyscalls[cSerialAlertInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
@@ -142,8 +147,9 @@ EXTERN_C void hal_init_platform(
kSyscalls[cNewInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
// get HAC struct.
HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx);
-
- if (!rdxInf) return;
+
+ if (!rdxInf)
+ return;
// assign the fThe field with the pointer.
rdxInf->fThe = Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().New(rdxInf->fTheSz);
@@ -153,7 +159,8 @@ EXTERN_C void hal_init_platform(
// get HAC struct.
HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx);
- if (!rdxInf) return;
+ if (!rdxInf)
+ return;
// delete ptr with sz in mind.
Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Delete(rdxInf->fThe, rdxInf->fTheSz);
@@ -161,8 +168,9 @@ EXTERN_C void hal_init_platform(
kSyscalls[cTlsInstallInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
ProcessBlockInfo* rdxPb = reinterpret_cast<ProcessBlockInfo*>(rdx);
-
- if (!rdxPb) return;
+
+ if (!rdxPb)
+ return;
// install the fTIB and fPIB.
rt_install_tib(rdxPb->fTIB, rdxPb->fPIB);
@@ -170,8 +178,9 @@ EXTERN_C void hal_init_platform(
kSyscalls[cExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx);
-
- if (!rdxEi) return;
+
+ if (!rdxEi)
+ return;
Kernel::kcout << "newoskrnl: " << rdxEi->fReason << "\r";
Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Exit(rdxEi->fCode);
@@ -179,19 +188,20 @@ EXTERN_C void hal_init_platform(
kSyscalls[cLastExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx);
-
- if (!rdxEi) return;
- rdxEi->fCode = Kernel::rt_get_exit_code();
+ if (!rdxEi)
+ return;
+
+ rdxEi->fCode = Kernel::rt_get_exit_code();
};
kSyscalls[cRebootInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
- Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_RsdPtr);
+ Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr);
acpi.Reboot();
};
kSyscalls[cShutdownInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
- Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_RsdPtr);
+ Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr);
acpi.Shutdown();
};
@@ -206,7 +216,20 @@ EXTERN_C void hal_init_platform(
kSyscalls[cRebootInterrupt].Leak().Leak()->fHooked = true;
kSyscalls[cLPCSanitizeMsg].Leak().Leak()->fHooked = true;
- Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_RsdPtr);
+ // newoskrnl version 1.00
+ Kernel::StringView strVer(cMaxPropLen);
+ strVer += "\\Properties\\KernelVersion";
+
+ cKernelVersion.GetKey() = strVer;
+ cKernelVersion.GetValue() = __MAHROUSS__;
+
+ Kernel::StringView strAutoMount(cMaxPropLen);
+ strAutoMount += "\\Properties\\AutoMountFS?";
+
+ cAutoFormatDisk.GetKey() = strAutoMount;
+ cAutoFormatDisk.GetValue() = Yes;
+
+ Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
- KERNEL_INIT(KeMain());
+ mInitKernel(KeMain());
}
diff --git a/Kernel/HALKit/AMD64/HalKernelMouse.cxx b/Kernel/HALKit/AMD64/HalKernelMouse.cxx
index 9cad6d35..9b3467fa 100644
--- a/Kernel/HALKit/AMD64/HalKernelMouse.cxx
+++ b/Kernel/HALKit/AMD64/HalKernelMouse.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -14,16 +14,16 @@
EXTERN_C Kernel::Boolean _hal_draw_mouse();
EXTERN_C Kernel::Void _hal_init_mouse();
-STATIC Kernel::Int32 kPrevX = 10;
-STATIC Kernel::Int32 kPrevY = 10;
-STATIC Kernel::Int32 kX = 10;
-STATIC Kernel::Int32 kY = 10;
+STATIC Kernel::Int32 kPrevX = 10;
+STATIC Kernel::Int32 kPrevY = 10;
+STATIC Kernel::Int32 kX = 10;
+STATIC Kernel::Int32 kY = 10;
STATIC Kernel::Int32 kMouseCycle = 0;
STATIC Kernel::PS2MouseInterface kMousePS2;
-STATIC Kernel::Char kMousePacket[4] = {};
+STATIC Kernel::Char kMousePacket[4] = {};
STATIC Kernel::Boolean kMousePacketReady = false;
-STATIC GXInit();
+STATIC CGInit();
#define kPS2Leftbutton 0b00000001
#define kPS2Middlebutton 0b00000010
diff --git a/Kernel/HALKit/AMD64/HalPageAlloc.hpp b/Kernel/HALKit/AMD64/HalPageAlloc.hxx
index 55193686..6e05e58e 100644
--- a/Kernel/HALKit/AMD64/HalPageAlloc.hpp
+++ b/Kernel/HALKit/AMD64/HalPageAlloc.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -26,6 +26,10 @@
#define kPTESize (0x1000)
#endif // !kPTESize
+#ifndef kAlign
+#define kAlign __BIGGEST_ALIGNMENT__
+#endif // !kAlign
+
EXTERN_C void hal_flush_tlb();
EXTERN_C void hal_write_cr3(Kernel::UIntPtr pde);
EXTERN_C void hal_write_cr0(Kernel::UIntPtr bit);
@@ -38,16 +42,16 @@ namespace Kernel::HAL
{
struct PACKED PageTable64 final
{
- bool Present : 1;
- bool Rw : 1;
- bool User : 1;
- bool Wt : 1;
- bool Cache : 1;
- bool Accessed : 1;
+ bool Present : 1;
+ bool Rw : 1;
+ bool User : 1;
+ bool Wt : 1;
+ bool Cache : 1;
+ bool Accessed : 1;
Kernel::Int32 Reserved : 6;
Kernel::UInt64 PhysicalAddress : 36;
Kernel::Int32 Reserved1 : 15;
- bool ExecDisable : 1;
+ bool ExecDisable : 1;
};
namespace Detail
diff --git a/Kernel/HALKit/AMD64/HalProcessor.cpp b/Kernel/HALKit/AMD64/HalProcessor.cxx
index 01f3879a..2eb2d693 100644
--- a/Kernel/HALKit/AMD64/HalProcessor.cpp
+++ b/Kernel/HALKit/AMD64/HalProcessor.cxx
@@ -1,10 +1,10 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
-#include <HALKit/AMD64/Processor.hpp>
+#include <HALKit/AMD64/Processor.hxx>
/**
* @file Processor.cpp
@@ -13,7 +13,7 @@
namespace Kernel::HAL
{
- void Out8(UInt16 port, UInt8 value)
+ Void Out8(UInt16 port, UInt8 value)
{
asm volatile("outb %%al, %1"
:
@@ -21,7 +21,7 @@ namespace Kernel::HAL
: "memory");
}
- void Out16(UInt16 port, UInt16 value)
+ Void Out16(UInt16 port, UInt16 value)
{
asm volatile("outw %%ax, %1"
:
@@ -29,7 +29,7 @@ namespace Kernel::HAL
: "memory");
}
- void Out32(UInt16 port, UInt32 value)
+ Void Out32(UInt16 port, UInt32 value)
{
asm volatile("outl %%eax, %1"
:
@@ -70,27 +70,27 @@ namespace Kernel::HAL
return value;
}
- void rt_halt()
+ Void rt_halt()
{
asm volatile("hlt");
}
- void rt_cli()
+ Void rt_cli()
{
asm volatile("cli");
}
- void rt_sti()
+ Void rt_sti()
{
asm volatile("sti");
}
- void rt_cld()
+ Void rt_cld()
{
asm volatile("cld");
}
- void rt_std()
+ Void rt_std()
{
asm volatile("std");
}
diff --git a/Kernel/HALKit/AMD64/HalSMPCoreManager.asm b/Kernel/HALKit/AMD64/HalSMPCoreManager.asm
index 7b0926bb..7f6aa26a 100644
--- a/Kernel/HALKit/AMD64/HalSMPCoreManager.asm
+++ b/Kernel/HALKit/AMD64/HalSMPCoreManager.asm
@@ -2,7 +2,7 @@
;; * ========================================================
;; *
;; * Kernel
-;; * Copyright Zeta Electronics Corporation, all rights reserved.
+;; * Copyright ZKA Technologies, all rights reserved.
;; *
;; * ========================================================
;; */
diff --git a/Kernel/HALKit/AMD64/HalSMPCore.cxx b/Kernel/HALKit/AMD64/HalScheduler.cxx
index 4cb87542..791361b5 100644
--- a/Kernel/HALKit/AMD64/HalSMPCore.cxx
+++ b/Kernel/HALKit/AMD64/HalScheduler.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -12,8 +12,8 @@ Void ProcessHeader::SetEntrypoint(UIntPtr& imageStart) noexcept
if (imageStart == 0)
this->Crash();
- this->StackFrame->Rbp = imageStart;
- this->StackFrame->Rsp = this->StackFrame->Rbp;
+ this->StackFrame->BP = imageStart;
+ this->StackFrame->SP = this->StackFrame->BP;
}
namespace Kernel
@@ -22,7 +22,7 @@ namespace Kernel
{
if (!stackPtr)
return false;
- if (stackPtr->Rbp == 0 || stackPtr->Rsp == 0)
+ if (stackPtr->BP == 0 || stackPtr->SP == 0)
return false;
return true;
diff --git a/Kernel/HALKit/AMD64/HalTimer.cxx b/Kernel/HALKit/AMD64/HalTimer.cxx
index e69de29b..e893198f 100644
--- a/Kernel/HALKit/AMD64/HalTimer.cxx
+++ b/Kernel/HALKit/AMD64/HalTimer.cxx
@@ -0,0 +1,14 @@
+/* -------------------------------------------
+
+ Copyright ZKA Technologies
+
+ File: HalTimer.cxx
+ Purpose: HAL timer
+
+ Revision History:
+
+ 07/07/24: Added file (amlel)
+
+------------------------------------------- */
+
+#include <ArchKit/ArchKit.hpp> \ No newline at end of file
diff --git a/Kernel/HALKit/AMD64/HalUtils.asm b/Kernel/HALKit/AMD64/HalUtils.asm
new file mode 100644
index 00000000..6681a692
--- /dev/null
+++ b/Kernel/HALKit/AMD64/HalUtils.asm
@@ -0,0 +1,49 @@
+;; /*
+;; * ========================================================
+;; *
+;; * Kernel
+;; * Copyright ZKA Technologies, all rights reserved.
+;; *
+;; * ========================================================
+;; */
+
+[bits 64]
+
+[global rt_install_tib]
+
+section .text
+
+;; changed: rs, fs
+;; expected: rcx, rdx
+
+rt_install_tib:
+ mov rcx, gs ;; TIB -> Thread Information Block
+ mov rdx, fs ;; PIB -> Process Information Block
+ ret
+
+;; //////////////////////////////////////////////////// ;;
+
+[global rt_jump_user_mode]
+
+;; @used rcx, address to jump on.
+;; @note adjusted for long mode.
+rt_jump_user_mode:
+ cmp rcx, 0
+ je rt_jump_user_mode_failed
+
+ mov ax, (6 * 8) | 3 ; user data segment with RPL 3
+ mov ds, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax ; SS is handled by iret
+
+ mov rax, rsp
+ push (6 * 8) | 3
+ push rax
+ pushf
+ push (5 * 8) | 3 ; user code segment with RPL 3
+ push rcx
+ iretq
+ ;; we just failed to validate the rcx, fallback and return to previous pc.
+rt_jump_user_mode_failed:
+ ret \ No newline at end of file
diff --git a/Kernel/HALKit/AMD64/Hypervisor.hpp b/Kernel/HALKit/AMD64/Hypervisor.hpp
index 1ab69ef4..b5fe48c2 100644
--- a/Kernel/HALKit/AMD64/Hypervisor.hpp
+++ b/Kernel/HALKit/AMD64/Hypervisor.hpp
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -21,6 +21,5 @@ namespace Kernel
ENUM_STRING(ParallelsAlt, " lrpepyh vr ");
ENUM_STRING(Bhyve, "bhyve bhyve ");
ENUM_STRING(Qnx, " QNXQVMBSQG ");
-
END_STRING_ENUM()
} // namespace Kernel
diff --git a/Kernel/HALKit/AMD64/PCI/Database.cxx b/Kernel/HALKit/AMD64/PCI/Database.cxx
index 65ec307e..67ebc6df 100644
--- a/Kernel/HALKit/AMD64/PCI/Database.cxx
+++ b/Kernel/HALKit/AMD64/PCI/Database.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AMD64/PCI/Device.cxx b/Kernel/HALKit/AMD64/PCI/Device.cxx
index c1fdc401..bec401d9 100644
--- a/Kernel/HALKit/AMD64/PCI/Device.cxx
+++ b/Kernel/HALKit/AMD64/PCI/Device.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -10,11 +10,11 @@
Kernel::UInt NewOSPCIReadRaw(Kernel::UInt bar, Kernel::UShort bus, Kernel::UShort dev, Kernel::UShort fun)
{
Kernel::UInt target = 0x80000000 | ((Kernel::UInt)bus << 16) |
- ((Kernel::UInt)dev << 11) | ((Kernel::UInt)fun << 8) |
- (bar & 0xFC);
+ ((Kernel::UInt)dev << 11) | ((Kernel::UInt)fun << 8) |
+ (bar & 0xFC);
Kernel::HAL::Out32((Kernel::UShort)Kernel::PCI::PciConfigKind::ConfigAddress,
- target);
+ target);
return Kernel::HAL::In32((Kernel::UShort)Kernel::PCI::PciConfigKind::ConfigData);
}
@@ -22,11 +22,11 @@ Kernel::UInt NewOSPCIReadRaw(Kernel::UInt bar, Kernel::UShort bus, Kernel::UShor
void NewOSPCISetCfgTarget(Kernel::UInt bar, Kernel::UShort bus, Kernel::UShort dev, Kernel::UShort fun)
{
Kernel::UInt target = 0x80000000 | ((Kernel::UInt)bus << 16) |
- ((Kernel::UInt)dev << 11) | ((Kernel::UInt)fun << 8) |
- (bar & ~3);
+ ((Kernel::UInt)dev << 11) | ((Kernel::UInt)fun << 8) |
+ (bar & ~3);
Kernel::HAL::Out32((Kernel::UShort)Kernel::PCI::PciConfigKind::ConfigAddress,
- target);
+ target);
}
namespace Kernel::PCI
diff --git a/Kernel/HALKit/AMD64/PCI/Dma.cxx b/Kernel/HALKit/AMD64/PCI/Dma.cxx
index 3e6319e3..65bf7e72 100644
--- a/Kernel/HALKit/AMD64/PCI/Dma.cxx
+++ b/Kernel/HALKit/AMD64/PCI/Dma.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AMD64/PCI/Express.cxx b/Kernel/HALKit/AMD64/PCI/Express.cxx
index 2b88f312..cb999fe0 100644
--- a/Kernel/HALKit/AMD64/PCI/Express.cxx
+++ b/Kernel/HALKit/AMD64/PCI/Express.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AMD64/PCI/IO.cxx b/Kernel/HALKit/AMD64/PCI/IO.cxx
index 24ee05b3..8da2b21e 100644
--- a/Kernel/HALKit/AMD64/PCI/IO.cxx
+++ b/Kernel/HALKit/AMD64/PCI/IO.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AMD64/PCI/Iterator.cxx b/Kernel/HALKit/AMD64/PCI/Iterator.cxx
index 0f766111..df593f7a 100644
--- a/Kernel/HALKit/AMD64/PCI/Iterator.cxx
+++ b/Kernel/HALKit/AMD64/PCI/Iterator.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AMD64/PCI/PCI.cxx b/Kernel/HALKit/AMD64/PCI/PCI.cxx
index eaf7f20a..d15b1b9a 100644
--- a/Kernel/HALKit/AMD64/PCI/PCI.cxx
+++ b/Kernel/HALKit/AMD64/PCI/PCI.cxx
@@ -1,7 +1,7 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
-#include <KernelKit/PCI/PCI.hpp>
+#include <KernelKit/PCI/PCI.hxx>
diff --git a/Kernel/HALKit/AMD64/Processor.hpp b/Kernel/HALKit/AMD64/Processor.hxx
index 756c5770..92b91c70 100644
--- a/Kernel/HALKit/AMD64/Processor.hpp
+++ b/Kernel/HALKit/AMD64/Processor.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
File: Prcoessor.hxx
Purpose: AMD64 processor abstraction.
@@ -17,7 +17,12 @@
#include <NewKit/Defines.hpp>
#include <NewKit/Utils.hpp>
#include <FirmwareKit/Handover.hxx>
-#include <HALKit/AMD64/HalPageAlloc.hpp>
+#include <HALKit/AMD64/HalPageAlloc.hxx>
+
+EXTERN_C
+{
+#include <cpuid.h>
+}
#ifdef kCPUBackendName
#undef kCPUBackendName
@@ -25,6 +30,8 @@
#define kCPUBackendName "AMD64"
+#define kSyscallRoute 0x32
+
#define IsActiveLow(FLG) (FLG & 2)
#define IsLevelTriggered(FLG) (FLG & 8)
@@ -32,6 +39,7 @@
#define kTrapGate (0xEF)
#define kTaskGate (0b10001100)
#define kGdtCodeSelector (0x08)
+#define kGdtUserCodeSelector (0x10)
#define cHeapStartOffset (0x10000000)
namespace Kernel
@@ -71,16 +79,17 @@ namespace Kernel::HAL
{
UInt16 pml4_index = (virt_addr >> 39) & 0x1FF;
- if (!pde->Pte[pml4_index].Present)
+ if (pde && !pde->Pte[pml4_index].Present)
{
pde->Pte[pml4_index].Present = true;
- kcout << "PM is present now.\r";
pde->Pte[pml4_index].PhysicalAddress = phys_addr;
pde->Pte[pml4_index].Rw = flags & eFlagsRw;
pde->Pte[pml4_index].User = flags & eFlagsUser;
pde->Pte[pml4_index].ExecDisable = flags & eFlagsExecDisable;
+ kcout << "PTE is present now.\r";
+
return 0;
}
else
@@ -90,13 +99,13 @@ namespace Kernel::HAL
kcout << "PhysicalAddress: " << hex_number(pde->Pte[pml4_index].PhysicalAddress);
kcout << "\r";
- kcout << "User: " << (pde->Pte[pml4_index].User ? "YES" : "NO") << "\r";
- kcout << "RW: " << (pde->Pte[pml4_index].Rw ? "YES" : "NO") << "\r";
+ kcout << "User: " << (pde->Pte[pml4_index].User ? "true" : "false") << "\r";
+ kcout << "RW: " << (pde->Pte[pml4_index].Rw ? "true" : "false") << "\r";
- return 1;
+ return 0;
}
- return 0;
+ return 1;
}
/// @brief Map address to PDE.
@@ -104,7 +113,7 @@ namespace Kernel::HAL
/// @param phys_addr
/// @param virt_addr
/// @param flags
- inline void ke_unmap_address(PDE* pde, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags)
+ inline Void ke_unmap_address(PDE* pde, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags)
{
UInt16 pml4_index = (virt_addr >> 39) & 0x1FF;
@@ -152,10 +161,11 @@ namespace Kernel::HAL
typedef UIntPtr Reg;
+ /// @brief Stack frame (as retrieved from assembly.)
struct PACKED StackFrame final
{
Reg IntNum, Exception;
- Reg Rdi, Rsi, Rbp, Rsp, Rbx, Rdx, Rcx, Rax;
+ Reg A0, A2, BP, SP, A3, A4, A5, A6;
Reg R8, R9, R10, R11, R12, R13, R14, R15;
Reg Gs, Fs;
};
@@ -200,11 +210,12 @@ namespace Kernel::HAL
class SegmentDescriptorComparator final
{
public:
- bool IsValid(SegmentDescriptor& seg)
+ Bool IsValid(SegmentDescriptor& seg)
{
return seg.Base > seg.Limit;
}
- bool Equals(SegmentDescriptor& seg, SegmentDescriptor& segRight)
+
+ Bool Equals(SegmentDescriptor& seg, SegmentDescriptor& segRight)
{
return seg.Base == segRight.Base && seg.Limit == segRight.Limit;
}
@@ -215,29 +226,65 @@ namespace Kernel::HAL
class GDTLoader final
{
public:
- static void Load(RegisterGDT& gdt);
- static void Load(Ref<RegisterGDT>& gdt);
+ static Void Load(RegisterGDT& gdt);
+ static Void Load(Ref<RegisterGDT>& gdt);
};
class IDTLoader final
{
public:
- static void Load(Register64& idt);
- static void Load(Ref<Register64>& idt);
+ static Void Load(Register64& idt);
+ static Void Load(Ref<Register64>& idt);
};
Void hal_system_get_cores(VoidPtr rsdPtr);
Void hal_send_start_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress);
Void hal_send_end_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress);
- /// @brief Processor specific structures.
- namespace Detail
+ /// @brief Do a cpuid to check if MSR exists on CPU.
+ /// @retval true it does exists.
+ /// @retval false it doesn't.
+ inline Bool hal_has_msr() noexcept
+ {
+ static UInt32 eax, unused, edx; // eax, edx
+
+ __get_cpuid(1, &eax, &unused, &unused, &edx);
+
+ // edx returns the flag for MSR (which is 1 shifted to 5.)
+ return edx & (1 << 5);
+ }
+
+ /// @brief Get Model-specific register.
+ /// @param msr MSR
+ /// @param lo low byte
+ /// @param hi high byte
+ inline Void hal_get_msr(UInt32 msr, UInt32* lo, UInt32* hi) noexcept
+ {
+ if (!lo || !hi)
+ return;
+
+ asm volatile("rdmsr"
+ : "=a"(*lo), "=d"(*hi)
+ : "c"(msr));
+ }
+
+ /// @brief Set Model-specific register.
+ /// @param msr MSR
+ /// @param lo low byte
+ /// @param hi high byte
+ inline Void hal_set_msr(UInt32 msr, UInt32 lo, UInt32 hi) noexcept
{
- EXTERN_C void _ke_power_on_self_test(void);
+ asm volatile("wrmsr"
+ :
+ : "a"(lo), "d"(hi), "c"(msr));
+ }
+ /// @brief Processor specific namespace.
+ namespace Detail
+ {
/**
- @brief Global descriptor table entry, either null, code or data.
-*/
+ @brief Global descriptor table entry, either null, code or data.
+ */
struct PACKED NewOSGDTRecord final
{
@@ -259,15 +306,35 @@ namespace Kernel::HAL
NewOSGDTRecord UserData;
};
} // namespace Detail
+
+ class APICController
+ {
+ public:
+ explicit APICController(VoidPtr base)
+ : fApic(base)
+ {
+ }
+
+ ~APICController() = default;
+
+ NEWOS_COPY_DEFAULT(APICController);
+
+ public:
+ UInt32 Read(UInt32 reg) noexcept;
+ Void Write(UInt32 reg, UInt32 value) noexcept;
+
+ private:
+ VoidPtr fApic{nullptr};
+ };
} // namespace Kernel::HAL
-EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp);
-EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp);
-EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp);
-EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp);
+EXTERN_C Kernel::Void idt_handle_generic(Kernel::UIntPtr rsp);
+EXTERN_C Kernel::Void idt_handle_gpf(Kernel::UIntPtr rsp);
+EXTERN_C Kernel::Void idt_handle_math(Kernel::UIntPtr rsp);
+EXTERN_C Kernel::Void idt_handle_pf(Kernel::UIntPtr rsp);
-EXTERN_C void hal_load_idt(Kernel::HAL::Register64 ptr);
-EXTERN_C void hal_load_gdt(Kernel::HAL::RegisterGDT ptr);
+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
diff --git a/Kernel/HALKit/AMD64/Storage/AHCI.cxx b/Kernel/HALKit/AMD64/Storage/AHCI.cxx
index 51153417..7a83b836 100644
--- a/Kernel/HALKit/AMD64/Storage/AHCI.cxx
+++ b/Kernel/HALKit/AMD64/Storage/AHCI.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -11,7 +11,7 @@
* @version 0.1
* @date 2024-02-02
*
- * @copyright Copyright (c) Zeta Electronics Corporation
+ * @copyright Copyright (c) ZKA Technologies
*
*/
diff --git a/Kernel/HALKit/AMD64/Storage/ATA-DMA.cxx b/Kernel/HALKit/AMD64/Storage/ATA-DMA.cxx
index 33e6bc31..bcba23e1 100644
--- a/Kernel/HALKit/AMD64/Storage/ATA-DMA.cxx
+++ b/Kernel/HALKit/AMD64/Storage/ATA-DMA.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -11,7 +11,7 @@
* @version 0.1
* @date 2024-02-02
*
- * @copyright Copyright (c) Zeta Electronics Corporation
+ * @copyright Copyright (c) ZKA Technologies
*
*/
diff --git a/Kernel/HALKit/AMD64/Storage/ATA-PIO.cxx b/Kernel/HALKit/AMD64/Storage/ATA-PIO.cxx
index 1a8e78c3..fa64294d 100644
--- a/Kernel/HALKit/AMD64/Storage/ATA-PIO.cxx
+++ b/Kernel/HALKit/AMD64/Storage/ATA-PIO.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -11,7 +11,7 @@
* @version 0.1
* @date 2024-02-02
*
- * @copyright Copyright (c) Zeta Electronics Corporation
+ * @copyright Copyright (c) ZKA Technologies
*
*/
diff --git a/Kernel/HALKit/ARM64/HalHart.cxx b/Kernel/HALKit/ARM64/HalHart.cxx
new file mode 100644
index 00000000..d7a34505
--- /dev/null
+++ b/Kernel/HALKit/ARM64/HalHart.cxx
@@ -0,0 +1,29 @@
+/* -------------------------------------------
+
+ Copyright ZKA Technologies
+
+------------------------------------------- */
+
+#include <ArchKit/ArchKit.hpp>
+
+// bugs = 0
+
+namespace Kernel
+{
+ /// @brief wakes up thread.
+ /// wakes up thread from hang.
+ void rt_wakeup_thread(HAL::StackFrame* stack)
+ {
+ rt_do_context_switch(stack);
+ }
+
+ /// @brief makes the thread sleep on a loop.
+ /// hooks and hangs thread to prevent code from executing.
+ void rt_hang_thread(HAL::StackFrame* stack)
+ {
+ while (true)
+ {
+ /* nohing, code is spinning */
+ }
+ }
+} // namespace Kernel
diff --git a/Kernel/HALKit/ARM64/HalKernelMain.cxx b/Kernel/HALKit/ARM64/HalKernelMain.cxx
new file mode 100644
index 00000000..a2d215f6
--- /dev/null
+++ b/Kernel/HALKit/ARM64/HalKernelMain.cxx
@@ -0,0 +1,178 @@
+/* -------------------------------------------
+
+ Copyright ZKA Technologies
+
+------------------------------------------- */
+
+#include <ArchKit/ArchKit.hpp>
+#include <Modules/CoreCG/CoreCG.hxx>
+#include <FirmwareKit/Handover.hxx>
+#include <KernelKit/FileManager.hpp>
+#include <KernelKit/Framebuffer.hpp>
+#include <KernelKit/Heap.hxx>
+#include <KernelKit/PEFCodeManager.hxx>
+#include <KernelKit/ProcessScheduler.hxx>
+#include <KernelKit/ProcessHeap.hxx>
+#include <NewKit/Json.hxx>
+#include <Modules/CoreCG/Accessibility.hxx>
+#include <KernelKit/CodeManager.hpp>
+#include <Modules/ACPI/ACPIFactoryInterface.hxx>
+#include <NetworkKit/IPCEP.hxx>
+
+#define KERNEL_INIT(X) \
+ X; \
+ Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
+
+/// @brief This symbol is the kernel main symbol.
+EXTERN_C void KeMain();
+
+EXTERN_C Kernel::VoidPtr kInterruptVectorTable[];
+
+struct PACKED HeapAllocInfo final
+{
+ Kernel::VoidPtr fThe;
+ Kernel::Size fTheSz;
+};
+
+struct PACKED ProcessBlockInfo final
+{
+ ThreadInformationBlock* fTIB;
+ ThreadInformationBlock* fPIB;
+};
+
+struct PACKED ProcessExitInfo final
+{
+ STATIC constexpr auto cReasonLen = 512;
+
+ Kernel::Int64 fCode;
+ Kernel::Char fReason[cReasonLen];
+};
+
+EXTERN_C void hal_init_platform(
+ Kernel::HEL::HandoverInformationHeader* HandoverHeader)
+{
+ /* Setup globals. */
+
+ kHandoverHeader = HandoverHeader;
+
+ if (kHandoverHeader->f_Magic != kHandoverMagic &&
+ kHandoverHeader->f_Version != kHandoverVersion)
+ {
+ return;
+ }
+
+ kKernelVirtualSize = HandoverHeader->f_VirtualSize;
+ kKernelVirtualStart = reinterpret_cast<Kernel::VoidPtr>(
+ reinterpret_cast<Kernel::UIntPtr>(HandoverHeader->f_VirtualStart) + cHeapStartOffset);
+
+ kKernelPhysicalStart = HandoverHeader->f_PhysicalStart;
+
+ // Register the basic SCI functions.
+
+ constexpr auto cSerialAlertInterrupt = 0x10;
+ constexpr auto cTlsInterrupt = 0x11;
+ constexpr auto cTlsInstallInterrupt = 0x12;
+ constexpr auto cNewInterrupt = 0x13;
+ constexpr auto cDeleteInterrupt = 0x14;
+ constexpr auto cExitInterrupt = 0x15;
+ constexpr auto cLastExitInterrupt = 0x16;
+ constexpr auto cCatalogOpen = 0x17;
+ constexpr auto cForkRead = 0x18;
+ constexpr auto cForkWrite = 0x19;
+ constexpr auto cCatalogClose = 0x20;
+ constexpr auto cCatalogRemove = 0x21;
+ constexpr auto cCatalogCreate = 0x22;
+ constexpr auto cRebootInterrupt = 0x23;
+ constexpr auto cShutdownInterrupt = 0x24;
+ constexpr auto cLPCSendMsg = 0x25;
+ constexpr auto cLPCOpenMsg = 0x26;
+ constexpr auto cLPCCloseMsg = 0x27;
+ constexpr auto cLPCSanitizeMsg = 0x28;
+
+ kSyscalls[cSerialAlertInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ const char* msg = (const char*)rdx;
+ Kernel::kcout << "serial: " << msg << "\r";
+ };
+
+ kSyscalls[cTlsInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ tls_check_syscall_impl(rdx);
+ };
+
+ kSyscalls[cLPCSanitizeMsg].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ Kernel::ipc_sanitize_packet(reinterpret_cast<Kernel::IPCEPMessageHeader*>(rdx));
+ };
+
+ kSyscalls[cNewInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ // get HAC struct.
+ HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx);
+
+ if (!rdxInf)
+ return;
+
+ // assign the fThe field with the pointer.
+ rdxInf->fThe = Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().New(rdxInf->fTheSz);
+ };
+
+ kSyscalls[cDeleteInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ // get HAC struct.
+ HeapAllocInfo* rdxInf = reinterpret_cast<HeapAllocInfo*>(rdx);
+
+ if (!rdxInf)
+ return;
+
+ // delete ptr with sz in mind.
+ Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Delete(rdxInf->fThe, rdxInf->fTheSz);
+ };
+
+ kSyscalls[cTlsInstallInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ ProcessBlockInfo* rdxPb = reinterpret_cast<ProcessBlockInfo*>(rdx);
+
+ if (!rdxPb)
+ return;
+
+ // install the fTIB and fPIB.
+ rt_install_tib(rdxPb->fTIB, rdxPb->fPIB);
+ };
+
+ kSyscalls[cExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx);
+
+ if (!rdxEi)
+ return;
+
+ Kernel::kcout << "newoskrnl: " << rdxEi->fReason << "\r";
+ Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().Exit(rdxEi->fCode);
+ };
+
+ kSyscalls[cLastExitInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ ProcessExitInfo* rdxEi = reinterpret_cast<ProcessExitInfo*>(rdx);
+
+ if (!rdxEi)
+ return;
+
+ rdxEi->fCode = Kernel::rt_get_exit_code();
+ };
+
+ kSyscalls[cRebootInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr);
+ acpi.Reboot();
+ };
+
+ kSyscalls[cShutdownInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
+ Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr);
+ acpi.Shutdown();
+ };
+
+ kSyscalls[cSerialAlertInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cTlsInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cTlsInstallInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cDeleteInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cNewInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cExitInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cLastExitInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cShutdownInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cRebootInterrupt].Leak().Leak()->fHooked = true;
+ kSyscalls[cLPCSanitizeMsg].Leak().Leak()->fHooked = true;
+
+ KERNEL_INIT(KeMain());
+}
diff --git a/Kernel/HALKit/ARM64/HalPageAlloc.hpp b/Kernel/HALKit/ARM64/HalPageAlloc.hxx
index 8286b5cd..7e34dc75 100644
--- a/Kernel/HALKit/ARM64/HalPageAlloc.hpp
+++ b/Kernel/HALKit/ARM64/HalPageAlloc.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/ARM64/HalScheduler.cxx b/Kernel/HALKit/ARM64/HalScheduler.cxx
new file mode 100644
index 00000000..08703435
--- /dev/null
+++ b/Kernel/HALKit/ARM64/HalScheduler.cxx
@@ -0,0 +1,31 @@
+/* -------------------------------------------
+
+ Copyright ZKA Technologies
+
+------------------------------------------- */
+
+#include <KernelKit/ProcessScheduler.hxx>
+
+using namespace Kernel;
+
+Void ProcessHeader::SetEntrypoint(UIntPtr& imageStart) noexcept
+{
+ if (imageStart == 0)
+ this->Crash();
+
+ this->StackFrame->BP = imageStart;
+ this->StackFrame->SP = this->StackFrame->BP;
+}
+
+namespace Kernel
+{
+ bool rt_check_stack(HAL::StackFramePtr stackPtr)
+ {
+ if (!stackPtr)
+ return false;
+ if (stackPtr->BP == 0 || stackPtr->SP == 0)
+ return false;
+
+ return true;
+ }
+} // namespace Kernel
diff --git a/Kernel/HALKit/ARM64/HalTimer.cxx b/Kernel/HALKit/ARM64/HalTimer.cxx
index aa39adef..63e924c3 100644
--- a/Kernel/HALKit/ARM64/HalTimer.cxx
+++ b/Kernel/HALKit/ARM64/HalTimer.cxx
@@ -1,7 +1,16 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
+
+ File: HalTimer.cxx
+ Purpose: HAL timer
+
+ Revision History:
+
+ 07/07/24: Added file (amlel)
------------------------------------------- */
-#include <NewKit/Defines.hpp>
+#include <ArchKit/ArchKit.hpp>
+
+struct TimerInfoStruct;
diff --git a/Kernel/HALKit/ARM64/Processor.hxx b/Kernel/HALKit/ARM64/Processor.hxx
index 631ecdf0..63c73972 100644
--- a/Kernel/HALKit/ARM64/Processor.hxx
+++ b/Kernel/HALKit/ARM64/Processor.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
@@ -36,10 +36,11 @@ namespace Kernel::HAL
typedef UIntPtr Reg;
typedef Register64 Register;
+ /// @note let's keep the same name as AMD64 HAL.
struct PACKED StackFrame final
{
Reg IntNum, Exception;
- Reg Rdi, Rsi, Rbp, Rsp, Rbx, Rdx, Rcx, Rax;
+ Reg A0, A2, BP, SP, A3, A4, A5, A6;
Reg R8, R9, R10, R11, R12, R13, R14, R15;
Reg Gs, Fs;
};
@@ -52,4 +53,4 @@ inline Kernel::UIntPtr kKernelVirtualSize = 0UL;
inline Kernel::VoidPtr kKernelPhysicalStart = nullptr;
-#include <HALKit/ARM64/HalPageAlloc.hpp>
+#include <HALKit/ARM64/HalPageAlloc.hxx>
diff --git a/Kernel/HALKit/ARM64/ReadMe.md b/Kernel/HALKit/ARM64/ReadMe.md
index d4d35a0b..c51229f2 100644
--- a/Kernel/HALKit/ARM64/ReadMe.md
+++ b/Kernel/HALKit/ARM64/ReadMe.md
@@ -1,3 +1,3 @@
# ARM64 Hardware Abstraction Layer
-- Supported Firmware: CoreBoot \ No newline at end of file
+- Supported Firmware: CoreBoot/EDK/OpenMobileBoot
diff --git a/Kernel/HALKit/ARM64/Storage/HalFlash.cxx b/Kernel/HALKit/ARM64/Storage/HalFlash.cxx
index 20c2836d..ca2d4883 100644
--- a/Kernel/HALKit/ARM64/Storage/HalFlash.cxx
+++ b/Kernel/HALKit/ARM64/Storage/HalFlash.cxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp b/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp
index 4469eee9..579af6b5 100644
--- a/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp
+++ b/Kernel/HALKit/AXP/CoreSyscallHandlerDEC.cpp
@@ -1,11 +1,11 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
#include <ArchKit/ArchKit.hpp>
-#include <HALKit/AXP/Processor.hpp>
+#include <HALKit/AXP/Processor.hxx>
/// @brief Internal call for syscall, to work with C++.
/// @param stack
diff --git a/Kernel/HALKit/AXP/Processor.hpp b/Kernel/HALKit/AXP/Processor.hpp
index a3799ae7..a244ff91 100644
--- a/Kernel/HALKit/AXP/Processor.hpp
+++ b/Kernel/HALKit/AXP/Processor.hpp
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/POWER/HalContextSwitchPowerPC.s b/Kernel/HALKit/POWER/HalContextSwitchPowerPC.s
index 14d805db..e14efb6b 100644
--- a/Kernel/HALKit/POWER/HalContextSwitchPowerPC.s
+++ b/Kernel/HALKit/POWER/HalContextSwitchPowerPC.s
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/POWER/HalHardware.cxx b/Kernel/HALKit/POWER/HalHardware.cxx
index 15407eb3..a057355e 100644
--- a/Kernel/HALKit/POWER/HalHardware.cxx
+++ b/Kernel/HALKit/POWER/HalHardware.cxx
@@ -1,10 +1,10 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
-#include <HALKit/POWER/Processor.hpp>
+#include <HALKit/POWER/Processor.hxx>
#include <KernelKit/DebugOutput.hpp>
namespace Kernel
diff --git a/Kernel/HALKit/POWER/HalHart.cxx b/Kernel/HALKit/POWER/HalHart.cxx
index 614828cb..5ff12218 100644
--- a/Kernel/HALKit/POWER/HalHart.cxx
+++ b/Kernel/HALKit/POWER/HalHart.cxx
@@ -1,10 +1,10 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
-#include <HALKit/POWER/Processor.hpp>
+#include <HALKit/POWER/Processor.hxx>
#include <KernelKit/DebugOutput.hpp>
#include <HALKit/POWER/Hart.hxx>
diff --git a/Kernel/HALKit/POWER/HalSerialPort.cxx b/Kernel/HALKit/POWER/HalSerialPort.cxx
index abddd291..86b43bb7 100644
--- a/Kernel/HALKit/POWER/HalSerialPort.cxx
+++ b/Kernel/HALKit/POWER/HalSerialPort.cxx
@@ -1,10 +1,10 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
-#include <HALKit/POWER/Processor.hpp>
+#include <HALKit/POWER/Processor.hxx>
#include <KernelKit/DebugOutput.hpp>
using namespace Kernel;
@@ -17,7 +17,7 @@ void ke_io_write(const Char* bytes)
return;
SizeT index = 0;
- SizeT len = rt_string_len(bytes, 256);
+ SizeT len = rt_string_len(bytes, 255);
while (index < len)
{
diff --git a/Kernel/HALKit/POWER/HalStartSequence.s b/Kernel/HALKit/POWER/HalStartSequence.s
index 07cec350..a2741103 100644
--- a/Kernel/HALKit/POWER/HalStartSequence.s
+++ b/Kernel/HALKit/POWER/HalStartSequence.s
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
diff --git a/Kernel/HALKit/POWER/HalThread.cxx b/Kernel/HALKit/POWER/HalThread.cxx
index 18d84d4f..b3be23c4 100644
--- a/Kernel/HALKit/POWER/HalThread.cxx
+++ b/Kernel/HALKit/POWER/HalThread.cxx
@@ -1,10 +1,10 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
-#include <HALKit/POWER/Processor.hpp>
+#include <HALKit/POWER/Processor.hxx>
#include <KernelKit/DebugOutput.hpp>
EXTERN_C Kernel::HAL::StackFramePtr rt_get_current_context()
diff --git a/Kernel/HALKit/POWER/HalVirtualMemory.cxx b/Kernel/HALKit/POWER/HalVirtualMemory.cxx
index eb04a43d..039bf509 100644
--- a/Kernel/HALKit/POWER/HalVirtualMemory.cxx
+++ b/Kernel/HALKit/POWER/HalVirtualMemory.cxx
@@ -1,26 +1,20 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
#include <HALKit/POWER/ppc-cpu.h>
#include <HALKit/POWER/ppc-mmu.h>
-#include <HALKit/POWER/Processor.hpp>
+#include <HALKit/POWER/Processor.hxx>
#include <KernelKit/DebugOutput.hpp>
-/// @note refer to our SoC documentation.
+/// @note refer to the SoC documentation.
using namespace Kernel;
-/// @brief Write directly to the specific TLB.
-/// @param mas0
-/// @param mas1
-/// @param mas2
-/// @param mas3
-/// @param mas7
-static void hal_write_tlb(uint32_t mas0, uint32_t mas1, uint32_t mas2, uint32_t mas3, uint32_t mas7)
+Void hal_write_tlb(UInt32 mas0, UInt32 mas1, UInt32 mas2, UInt32 mas3, UInt32 mas7)
{
mtspr(MAS0, mas0);
mtspr(MAS1, mas1);
@@ -31,23 +25,26 @@ static void hal_write_tlb(uint32_t mas0, uint32_t mas1, uint32_t mas2, uint32_t
hal_flush_tlb();
}
-void hal_set_tlb(uint8_t tlb, uint32_t epn, uint64_t rpn, uint8_t perms, uint8_t wimge, uint8_t ts, uint8_t esel, uint8_t tsize, uint8_t iprot)
+Bool hal_set_tlb(UInt8 tlb, UInt32 epn, UInt64 rpn, UInt8 perms, UInt8 wimge, UInt8 ts, UInt8 esel, UInt8 tsize, UInt8 iprot)
{
if ((mfspr(SPRN_MMUCFG) & MMUCFG_MAVN) == MMUCFG_MAVN_V1 && (tsize & 1))
{
// this mmu-version does not allow odd tsize values
- return;
+ return false;
}
- uint32_t mas0 = FSL_BOOKE_MAS0(tlb, esel, 0);
- uint32_t mas1 = FSL_BOOKE_MAS1(1, iprot, 0, ts, tsize);
- uint32_t mas2 = FSL_BOOKE_MAS2(epn, wimge);
- uint32_t mas3 = FSL_BOOKE_MAS3(rpn, 0, perms);
- uint32_t mas7 = FSL_BOOKE_MAS7(rpn);
+
+ UInt32 mas0 = FSL_BOOKE_MAS0(tlb, esel, 0);
+ UInt32 mas1 = FSL_BOOKE_MAS1(1, iprot, 0, ts, tsize);
+ UInt32 mas2 = FSL_BOOKE_MAS2(epn, wimge);
+ UInt32 mas3 = FSL_BOOKE_MAS3(rpn, 0, perms);
+ UInt32 mas7 = FSL_BOOKE_MAS7(rpn);
hal_write_tlb(mas0, mas1, mas2, mas3, mas7);
+
+ return true;
}
-/// @brief Flush system TLB.
+/// @brief Flush TLB
EXTERN_C void hal_flush_tlb()
{
asm volatile("isync;tlbwe;msync;isync");
diff --git a/Kernel/HALKit/POWER/Hart.hxx b/Kernel/HALKit/POWER/Hart.hxx
index 8f466098..e887ce4a 100644
--- a/Kernel/HALKit/POWER/Hart.hxx
+++ b/Kernel/HALKit/POWER/Hart.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
File: Hart.hxx
Purpose: POWER hardware threads.
@@ -22,9 +22,9 @@ typedef Kernel::Int32 PPCHartType;
typedef struct HalHardwareThread
{
Kernel::UIntPtr fStartAddress;
- Kernel::UInt8 fPrivleged : 1;
- Kernel::UInt32 fPageFlags;
- PPCHartType fIdentNumber;
+ Kernel::UInt8 fPrivleged : 1;
+ Kernel::UInt32 fPageFlags;
+ PPCHartType fIdentNumber;
} HalHardwareThread;
/// @brief Set PC to specific hart.
diff --git a/Kernel/HALKit/POWER/MBCI/HalMBCIHost.cxx b/Kernel/HALKit/POWER/MBCI/HalMBCIHost.cxx
index 8a24506a..93cf86ae 100644
--- a/Kernel/HALKit/POWER/MBCI/HalMBCIHost.cxx
+++ b/Kernel/HALKit/POWER/MBCI/HalMBCIHost.cxx
@@ -1,8 +1,8 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
------------------------------------------- */
-#include <HALKit/POWER/Processor.hpp>
+#include <HALKit/POWER/Processor.hxx>
#include <KernelKit/DebugOutput.hpp>
diff --git a/Kernel/HALKit/POWER/Processor.hpp b/Kernel/HALKit/POWER/Processor.hpp
deleted file mode 100644
index 5ff7eef3..00000000
--- a/Kernel/HALKit/POWER/Processor.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -------------------------------------------
-
- Copyright Zeta Electronics Corporation
-
- Purpose: POWER processor header.
-
-------------------------------------------- */
-
-#pragma once
-
-#include <NewKit/Defines.hpp>
-#include <NewKit/Utils.hpp>
-
-#define kHalPPCAlignment __attribute__((aligned(4)))
-
-namespace Kernel::HAL
-{
- typedef UIntPtr Reg;
-
- struct kHalPPCAlignment StackFrame
- {
- Reg R0;
- Reg R1;
- Reg R2;
- Reg R3;
- Reg R4;
- Reg R5;
- Reg R6;
- Reg R7;
- Reg R8;
- Reg PC;
- Reg SP;
- };
-
- typedef StackFrame* StackFramePtr;
-
- inline void rt_halt()
- {
- while (1)
- {
- asm volatile("mr 0, 0"); // no oop.
- }
- }
-
- inline void rt_cli()
- {
- asm volatile("mr 0, 0"); // no oop
- }
-} // namespace Kernel::HAL
-
-EXTERN_C void int_handle_math(Kernel::UIntPtr sp);
-EXTERN_C void int_handle_pf(Kernel::UIntPtr sp);
-
-/// @brief Flush system TLB.
-EXTERN_C void hal_flush_tlb();
diff --git a/Kernel/HALKit/POWER/Processor.hxx b/Kernel/HALKit/POWER/Processor.hxx
new file mode 100644
index 00000000..b2186aa7
--- /dev/null
+++ b/Kernel/HALKit/POWER/Processor.hxx
@@ -0,0 +1,56 @@
+/* -------------------------------------------
+
+ Copyright ZKA Technologies
+
+ Purpose: POWER processor header.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NewKit/Defines.hpp>
+#include <NewKit/Utils.hpp>
+
+#define NoOp() asm volatile("mr 0, 0")
+#define kHalPPCAlignment __attribute__((aligned(4)))
+
+namespace Kernel::HAL
+{
+ typedef UIntPtr Reg;
+
+ /// @brief Stack frame (as retrieved from assembly.)
+ struct PACKED StackFrame final
+ {
+ Reg IntNum, Exception;
+ Reg A0, A2, BP, SP, A3, A4, A5, A6;
+ Reg R8, R9, R10, R11, R12, R13, R14, R15;
+ Reg Gs, Fs;
+ };
+
+ typedef StackFrame* StackFramePtr;
+
+ inline void rt_halt()
+ {
+ while (true)
+ {
+ NoOp(); // no oop.
+ }
+ }
+
+ inline void rt_cli()
+ {
+ NoOp(); // no oop
+ }
+} // namespace Kernel::HAL
+
+EXTERN_C Kernel::Void int_handle_math(Kernel::UIntPtr sp);
+EXTERN_C Kernel::Void int_handle_pf(Kernel::UIntPtr sp);
+
+/// @brief Set TLB.
+Kernel::Bool hal_set_tlb(Kernel::UInt8 tlb, Kernel::UInt32 epn, Kernel::UInt64 rpn, Kernel::UInt8 perms, Kernel::UInt8 wimge, Kernel::UInt8 ts, Kernel::UInt8 esel, Kernel::UInt8 tsize, Kernel::UInt8 iprot);
+
+/// @brief Write TLB.
+Kernel::Void hal_write_tlb(Kernel::UInt32 mas0, Kernel::UInt32 mas1, Kernel::UInt32 mas2, Kernel::UInt32 mas3, Kernel::UInt32 mas7);
+
+/// @brief Flush TLB.
+EXTERN_C Kernel::Void hal_flush_tlb();
diff --git a/Kernel/HALKit/POWER/ppc-cpu.h b/Kernel/HALKit/POWER/ppc-cpu.h
index 3855b85c..46979e5f 100644
--- a/Kernel/HALKit/POWER/ppc-cpu.h
+++ b/Kernel/HALKit/POWER/ppc-cpu.h
@@ -141,36 +141,36 @@ struct pt_regs
#define SPRN_DBCR 0x3F2 /* Debug Control Regsiter */
#define DBCR_EDM 0x80000000
#define DBCR_IDM 0x40000000
-#define DBCR_RST(x) (((x)&0x3) << 28)
+#define DBCR_RST(x) (((x) & 0x3) << 28)
#define DBCR_RST_NONE 0
#define DBCR_RST_CORE 1
#define DBCR_RST_CHIP 2
#define DBCR_RST_SYSTEM 3
-#define DBCR_IC 0x08000000 /* Instruction Completion Debug Evnt */
-#define DBCR_BT 0x04000000 /* Branch Taken Debug Event */
-#define DBCR_EDE 0x02000000 /* Exception Debug Event */
-#define DBCR_TDE 0x01000000 /* TRAP Debug Event */
-#define DBCR_FER 0x00F80000 /* First Events Remaining Mask */
-#define DBCR_FT 0x00040000 /* Freeze Timers on Debug Event */
-#define DBCR_IA1 0x00020000 /* Instr. Addr. Compare 1 Enable */
-#define DBCR_IA2 0x00010000 /* Instr. Addr. Compare 2 Enable */
-#define DBCR_D1R 0x00008000 /* Data Addr. Compare 1 Read Enable */
-#define DBCR_D1W 0x00004000 /* Data Addr. Compare 1 Write Enable */
-#define DBCR_D1S(x) (((x)&0x3) << 12) /* Data Adrr. Compare 1 Size */
+#define DBCR_IC 0x08000000 /* Instruction Completion Debug Evnt */
+#define DBCR_BT 0x04000000 /* Branch Taken Debug Event */
+#define DBCR_EDE 0x02000000 /* Exception Debug Event */
+#define DBCR_TDE 0x01000000 /* TRAP Debug Event */
+#define DBCR_FER 0x00F80000 /* First Events Remaining Mask */
+#define DBCR_FT 0x00040000 /* Freeze Timers on Debug Event */
+#define DBCR_IA1 0x00020000 /* Instr. Addr. Compare 1 Enable */
+#define DBCR_IA2 0x00010000 /* Instr. Addr. Compare 2 Enable */
+#define DBCR_D1R 0x00008000 /* Data Addr. Compare 1 Read Enable */
+#define DBCR_D1W 0x00004000 /* Data Addr. Compare 1 Write Enable */
+#define DBCR_D1S(x) (((x) & 0x3) << 12) /* Data Adrr. Compare 1 Size */
#define DAC_BYTE 0
#define DAC_HALF 1
#define DAC_WORD 2
#define DAC_QUAD 3
-#define DBCR_D2R 0x00000800 /* Data Addr. Compare 2 Read Enable */
-#define DBCR_D2W 0x00000400 /* Data Addr. Compare 2 Write Enable */
-#define DBCR_D2S(x) (((x)&0x3) << 8) /* Data Addr. Compare 2 Size */
-#define DBCR_SBT 0x00000040 /* Second Branch Taken Debug Event */
-#define DBCR_SED 0x00000020 /* Second Exception Debug Event */
-#define DBCR_STD 0x00000010 /* Second Trap Debug Event */
-#define DBCR_SIA 0x00000008 /* Second IAC Enable */
-#define DBCR_SDA 0x00000004 /* Second DAC Enable */
-#define DBCR_JOI 0x00000002 /* JTAG Serial Outbound Int. Enable */
-#define DBCR_JII 0x00000001 /* JTAG Serial Inbound Int. Enable */
+#define DBCR_D2R 0x00000800 /* Data Addr. Compare 2 Read Enable */
+#define DBCR_D2W 0x00000400 /* Data Addr. Compare 2 Write Enable */
+#define DBCR_D2S(x) (((x) & 0x3) << 8) /* Data Addr. Compare 2 Size */
+#define DBCR_SBT 0x00000040 /* Second Branch Taken Debug Event */
+#define DBCR_SED 0x00000020 /* Second Exception Debug Event */
+#define DBCR_STD 0x00000010 /* Second Trap Debug Event */
+#define DBCR_SIA 0x00000008 /* Second IAC Enable */
+#define DBCR_SDA 0x00000004 /* Second DAC Enable */
+#define DBCR_JOI 0x00000002 /* JTAG Serial Outbound Int. Enable */
+#define DBCR_JII 0x00000001 /* JTAG Serial Inbound Int. Enable */
#ifndef CONFIG_BOOKE
#define SPRN_DBCR0 0x3F2 /* Debug Control Register 0 */
#else
@@ -395,27 +395,27 @@ struct pt_regs
#define TCR_WP(x) (((64 - x) & 0x3) << 30) | \
(((64 - x) & 0x3c) << 15) /* WDT Period 2^x clocks*/
#else
-#define TCR_WP(x) (((x)&0x3) << 30) /* WDT Period */
-#define WP_2_17 0 /* 2^17 clocks */
-#define WP_2_21 1 /* 2^21 clocks */
-#define WP_2_25 2 /* 2^25 clocks */
-#define WP_2_29 3 /* 2^29 clocks */
-#endif /* CONFIG_E500 */
-#define TCR_WRC(x) (((x)&0x3) << 28) /* WDT Reset Control */
-#define WRC_NONE 0 /* No reset will occur */
-#define WRC_CORE 1 /* Core reset will occur */
-#define WRC_CHIP 2 /* Chip reset will occur */
-#define WRC_SYSTEM 3 /* System reset will occur */
-#define TCR_WIE 0x08000000 /* WDT Interrupt Enable */
-#define TCR_PIE 0x04000000 /* PIT Interrupt Enable */
-#define TCR_FP(x) (((x)&0x3) << 24) /* FIT Period */
-#define FP_2_9 0 /* 2^9 clocks */
-#define FP_2_13 1 /* 2^13 clocks */
-#define FP_2_17 2 /* 2^17 clocks */
-#define FP_2_21 3 /* 2^21 clocks */
-#define TCR_FIE 0x00800000 /* FIT Interrupt Enable */
-#define TCR_ARE 0x00400000 /* Auto Reload Enable */
-#define SPRN_THRM1 0x3FC /* Thermal Management Register 1 */
+#define TCR_WP(x) (((x) & 0x3) << 30) /* WDT Period */
+#define WP_2_17 0 /* 2^17 clocks */
+#define WP_2_21 1 /* 2^21 clocks */
+#define WP_2_25 2 /* 2^25 clocks */
+#define WP_2_29 3 /* 2^29 clocks */
+#endif /* CONFIG_E500 */
+#define TCR_WRC(x) (((x) & 0x3) << 28) /* WDT Reset Control */
+#define WRC_NONE 0 /* No reset will occur */
+#define WRC_CORE 1 /* Core reset will occur */
+#define WRC_CHIP 2 /* Chip reset will occur */
+#define WRC_SYSTEM 3 /* System reset will occur */
+#define TCR_WIE 0x08000000 /* WDT Interrupt Enable */
+#define TCR_PIE 0x04000000 /* PIT Interrupt Enable */
+#define TCR_FP(x) (((x) & 0x3) << 24) /* FIT Period */
+#define FP_2_9 0 /* 2^9 clocks */
+#define FP_2_13 1 /* 2^13 clocks */
+#define FP_2_17 2 /* 2^17 clocks */
+#define FP_2_21 3 /* 2^21 clocks */
+#define TCR_FIE 0x00800000 /* FIT Interrupt Enable */
+#define TCR_ARE 0x00400000 /* Auto Reload Enable */
+#define SPRN_THRM1 0x3FC /* Thermal Management Register 1 */
#define THRM1_TIN (1 << 0)
#define THRM1_TIV (1 << 1)
#define THRM1_THRES (0x7f << 2)
@@ -429,26 +429,26 @@ struct pt_regs
#ifndef CONFIG_BOOKE
#define SPRN_TSR 0x3D8 /* Timer Status Register */
#else
-#define SPRN_TSR 0x150 /* Book E Timer Status Register */
-#endif /* CONFIG_BOOKE */
-#define TSR_ENW 0x80000000 /* Enable Next Watchdog */
-#define TSR_WIS 0x40000000 /* WDT Interrupt Status */
-#define TSR_WRS(x) (((x)&0x3) << 28) /* WDT Reset Status */
-#define WRS_NONE 0 /* No WDT reset occurred */
-#define WRS_CORE 1 /* WDT forced core reset */
-#define WRS_CHIP 2 /* WDT forced chip reset */
-#define WRS_SYSTEM 3 /* WDT forced system reset */
-#define TSR_PIS 0x08000000 /* PIT Interrupt Status */
-#define TSR_FIS 0x04000000 /* FIT Interrupt Status */
-#define SPRN_UMMCR0 0x3A8 /* User Monitor Mode Control Register 0 */
-#define SPRN_UMMCR1 0x3AC /* User Monitor Mode Control Register 0 */
-#define SPRN_UPMC1 0x3A9 /* User Performance Counter Register 1 */
-#define SPRN_UPMC2 0x3AA /* User Performance Counter Register 2 */
-#define SPRN_UPMC3 0x3AD /* User Performance Counter Register 3 */
-#define SPRN_UPMC4 0x3AE /* User Performance Counter Register 4 */
-#define SPRN_USIA 0x3AB /* User Sampled Instruction Address Register */
-#define SPRN_XER 0x001 /* Fixed Point Exception Register */
-#define SPRN_ZPR 0x3B0 /* Zone Protection Register */
+#define SPRN_TSR 0x150 /* Book E Timer Status Register */
+#endif /* CONFIG_BOOKE */
+#define TSR_ENW 0x80000000 /* Enable Next Watchdog */
+#define TSR_WIS 0x40000000 /* WDT Interrupt Status */
+#define TSR_WRS(x) (((x) & 0x3) << 28) /* WDT Reset Status */
+#define WRS_NONE 0 /* No WDT reset occurred */
+#define WRS_CORE 1 /* WDT forced core reset */
+#define WRS_CHIP 2 /* WDT forced chip reset */
+#define WRS_SYSTEM 3 /* WDT forced system reset */
+#define TSR_PIS 0x08000000 /* PIT Interrupt Status */
+#define TSR_FIS 0x04000000 /* FIT Interrupt Status */
+#define SPRN_UMMCR0 0x3A8 /* User Monitor Mode Control Register 0 */
+#define SPRN_UMMCR1 0x3AC /* User Monitor Mode Control Register 0 */
+#define SPRN_UPMC1 0x3A9 /* User Performance Counter Register 1 */
+#define SPRN_UPMC2 0x3AA /* User Performance Counter Register 2 */
+#define SPRN_UPMC3 0x3AD /* User Performance Counter Register 3 */
+#define SPRN_UPMC4 0x3AE /* User Performance Counter Register 4 */
+#define SPRN_USIA 0x3AB /* User Sampled Instruction Address Register */
+#define SPRN_XER 0x001 /* Fixed Point Exception Register */
+#define SPRN_ZPR 0x3B0 /* Zone Protection Register */
/* Book E definitions */
#define SPRN_DECAR 0x036 /* Decrementer Auto Reload Register */
@@ -853,7 +853,7 @@ struct pt_regs
#define IOCR_PTD 0x00000400
#define IOCR_ARE 0x00000080
#define IOCR_DRC 0x00000020
-#define IOCR_RDM(x) (((x)&0x3) << 3)
+#define IOCR_RDM(x) (((x) & 0x3) << 3)
#define IOCR_TCS 0x00000004
#define IOCR_SCS 0x00000002
#define IOCR_SPC 0x00000001
@@ -1252,7 +1252,7 @@ int fsl_qoriq_dsp_core_to_cluster(unsigned int core);
#if defined(CONFIG_MPC83xx)
#define CPU_TYPE_ENTRY(x) \
{ \
-#x, SPR_##x \
+ #x, SPR_##x \
}
#endif
#endif
diff --git a/Kernel/HALKit/POWER/ppc-mmu.h b/Kernel/HALKit/POWER/ppc-mmu.h
index 8546b0fb..8e4b3595 100644
--- a/Kernel/HALKit/POWER/ppc-mmu.h
+++ b/Kernel/HALKit/POWER/ppc-mmu.h
@@ -411,7 +411,7 @@ extern void print_bats(void);
#define MAS0_TLBSEL(x) (((x) << 28) & MAS0_TLBSEL_MSK)
#define MAS0_ESEL_MSK 0x0FFF0000
#define MAS0_ESEL(x) (((x) << 16) & MAS0_ESEL_MSK)
-#define MAS0_NV(x) ((x)&0x00000FFF)
+#define MAS0_NV(x) ((x) & 0x00000FFF)
#define MAS1_VALID 0x80000000
#define MAS1_IPROT 0x40000000
@@ -468,9 +468,9 @@ extern void print_bats(void);
(((ts) << 12) & MAS1_TS) | \
(MAS1_TSIZE(tsize)))
#define FSL_BOOKE_MAS2(epn, wimge) \
- (((epn)&MAS3_RPN) | (wimge))
+ (((epn) & MAS3_RPN) | (wimge))
#define FSL_BOOKE_MAS3(rpn, user, perms) \
- (((rpn)&MAS3_RPN) | (user) | (perms))
+ (((rpn) & MAS3_RPN) | (user) | (perms))
#define FSL_BOOKE_MAS7(rpn) \
(((uint64_t)(rpn)) >> 32)
@@ -638,10 +638,10 @@ extern int num_tlb_entries;
/* Some handy macros */
-#define EPN(e) ((e)&0xfffffc00)
+#define EPN(e) ((e) & 0xfffffc00)
#define TLB0(epn, sz) ((EPN((epn)) | (sz) | TLB_VALID))
-#define TLB1(rpn, erpn) (((rpn)&0xfffffc00) | (erpn))
-#define TLB2(a) ((a)&0x00000fbf)
+#define TLB1(rpn, erpn) (((rpn) & 0xfffffc00) | (erpn))
+#define TLB2(a) ((a) & 0x00000fbf)
#define tlbtab_start \
mflr r1; \
diff --git a/Kernel/HALKit/RISCV/Hart.hxx b/Kernel/HALKit/RISCV/Hart.hxx
index 92cc286e..56d4be92 100644
--- a/Kernel/HALKit/RISCV/Hart.hxx
+++ b/Kernel/HALKit/RISCV/Hart.hxx
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Zeta Electronics Corporation
+ Copyright ZKA Technologies
File: Hart.hxx
Purpose: RISC-V hardware threads.