summaryrefslogtreecommitdiffhomepage
path: root/Kernel
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel')
-rw-r--r--Kernel/HALKit/AMD64/HalBoot.asm13
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx18
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx29
-rw-r--r--Kernel/Sources/KernelCheck.cxx14
-rw-r--r--Kernel/amd64-efi.make2
5 files changed, 21 insertions, 55 deletions
diff --git a/Kernel/HALKit/AMD64/HalBoot.asm b/Kernel/HALKit/AMD64/HalBoot.asm
index 7bda9635..aee837a0 100644
--- a/Kernel/HALKit/AMD64/HalBoot.asm
+++ b/Kernel/HALKit/AMD64/HalBoot.asm
@@ -20,16 +20,3 @@ section .ldr
HandoverMagic: dq kHandoverMagic
HandoverType: dw kTypeKernel
-HandoverArch: dw kArchAmd64
-;; This NewBootStart points to Main.
-HandoverStart: dq hal_init_platform
-
-section .start
-
-[global ke_startup_platform]
-
-ke_startup_platform:
- push rax
- jmp hal_init_platform
- pop rax
- ret \ No newline at end of file
diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx
index dd912d2b..5c1a4323 100644
--- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx
+++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx
@@ -183,8 +183,8 @@ namespace Kernel::HAL
struct PROCESS_CONTROL_BLOCK final
{
- PROCESS_HEADER_BLOCK* f_Header;
- HAL::StackFramePtr f_StackFrame;
+ PROCESS_HEADER_BLOCK* f_Header;
+ HAL::StackFramePtr f_StackFrame;
} fBlocks[cMaxPCBBlocks] = {0};
STATIC Void hal_switch_context(HAL::StackFramePtr stackFrame)
@@ -198,7 +198,7 @@ namespace Kernel::HAL
cFramePtr = stackFrame;
- fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_Header = &ProcessScheduler::The().Leak().TheCurrent().Leak();
+ fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_Header = &ProcessScheduler::The().Leak().TheCurrent().Leak();
fBlocks[ProcessScheduler::The().Leak().TheCurrent().Leak().ProcessId % cMaxPCBBlocks].f_StackFrame = stackFrame;
sem.Unlock();
@@ -234,15 +234,9 @@ namespace Kernel::HAL
auto acpi = ACPIFactoryInterface(rsdPtr);
kApicMadt = acpi.Find(kApicSignature).Leak().Leak();
- if (kApicMadt != nullptr)
- {
- kApicInfoBlock = (MadtType*)kApicMadt;
- }
- else
- {
- kcout << "newoskrnl: APIC is not present! it is a vital component to enable SMP.\r";
- ke_stop(RUNTIME_CHECK_FAILED);
- }
+ MUST_PASS(kApicMadt);
+
+ kApicInfoBlock = (MadtType*)kApicMadt;
}
} // namespace Kernel::HAL
diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx
index 3cefe1d3..bf63b388 100644
--- a/Kernel/HALKit/AMD64/HalKernelMain.cxx
+++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx
@@ -89,11 +89,16 @@ EXTERN_C void hal_init_platform(
void hal_real_init(void)
{
+ // get page size.
kKernelVirtualSize = kHandoverHeader->f_VirtualSize;
+
+ // get virtual address start.
kKernelVirtualStart = reinterpret_cast<Kernel::VoidPtr>(
- reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_VirtualStart) + cHeapStartOffset);
+ reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_VirtualStart));
- kKernelPhysicalStart = kHandoverHeader->f_PhysicalStart;
+ // get physical address start.
+ kKernelPhysicalStart = reinterpret_cast<Kernel::VoidPtr>(
+ reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_PhysicalStart));
kTextOffsetY += 10;
cg_write_text("LOADING INTERRUPTS...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
@@ -116,10 +121,7 @@ void hal_real_init(void)
CONST Kernel::HAL::IDTLoader cIDT;
cIDT.Load(idtBase);
- // Register the basic SCI functions.
-
- kTextOffsetY += 10;
- cg_write_text("LOADING SYSCALLS...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
+ // Register the basic system calls.
constexpr auto cVGAWrite = 0x10;
constexpr auto cTlsInterrupt = 0x11;
@@ -230,20 +232,7 @@ void hal_real_init(void)
kSyscalls[cRebootInterrupt].Leak().Leak()->fHooked = true;
kSyscalls[cLPCSanitizeMsg].Leak().Leak()->fHooked = true;
- kTextOffsetY += 10;
- cg_write_text("LOADING SMP...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
-
- for (Kernel::SizeT i = 0; i < kHandoverMaxCmdLine; i++)
- {
- if (Kernel::rt_string_cmp(kHandoverHeader->f_CommandLine[i], "/AutoFormat", Kernel::rt_string_len("/AutoFormat")) == 0)
- {
- cAutoFormatDisk.GetValue() = Yes;
- break;
- }
- }
-
- kTextOffsetY += 10;
- cg_write_text("LOADING SECURITY SUBSYSTEM...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00));
+ Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
}
diff --git a/Kernel/Sources/KernelCheck.cxx b/Kernel/Sources/KernelCheck.cxx
index b9843cd0..4752024d 100644
--- a/Kernel/Sources/KernelCheck.cxx
+++ b/Kernel/Sources/KernelCheck.cxx
@@ -19,7 +19,7 @@
#define CopyMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz)
#define MoveMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz)
-#define cWebsiteMacro "https://zka-tech.nl/hulp"
+#define cWebsiteMacro "https://zka.ma/help"
#include <BootKit/Vendor/Qr.hxx>
@@ -134,8 +134,10 @@ namespace Kernel
Void RecoveryFactory::Recover() noexcept
{
- PowerFactoryInterface powerInterface(kHandoverHeader->f_HardwareTables.f_VendorPtr);
- powerInterface.Shutdown();
+ while (true)
+ {
+ asm volatile ("cli; hlt");
+ }
}
@@ -143,12 +145,6 @@ namespace Kernel
{
if (!expr)
{
-#ifdef __DEBUG__
- kcout << "newoskrnl: FILE: " << file << "\r";
- kcout << "newoskrnl: LINE: " << line << "\r";
-
-#endif // __DEBUG__
-
ke_stop(RUNTIME_CHECK_FAILED); // Runtime Check failed
}
}
diff --git a/Kernel/amd64-efi.make b/Kernel/amd64-efi.make
index 52532223..55517b2f 100644
--- a/Kernel/amd64-efi.make
+++ b/Kernel/amd64-efi.make
@@ -35,7 +35,7 @@ COPY = cp
ASMFLAGS = -f win64
# Kernel subsystem is 17 and entrypoint is __ImageStart
-LDFLAGS = -e ke_startup_platform --subsystem=17 --image-base 0x10000000
+LDFLAGS = -e hal_init_platform --subsystem=17 --image-base 0x10000000
LDOBJ = Objects/*.obj
# This file is the kernel, responsible of task management and memory.