summaryrefslogtreecommitdiffhomepage
path: root/Kernel/HALKit
diff options
context:
space:
mode:
authorAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-08 14:19:42 +0200
committerAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-08 14:19:42 +0200
commitdf8393cebbae61ed7686be17a28d80c657f49b7e (patch)
tree96a67cbbe80a69f2b3c59a94a517741b6583a88b /Kernel/HALKit
parent209ebb8caa774c8d73ead8e0eba3bd65d138930f (diff)
[IMP] Code cleanup and improvements of the bootloader, still trying to
figure what is going wrong on the kernel's DLL. Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Kernel/HALKit')
-rw-r--r--Kernel/HALKit/AMD64/HalBoot.asm13
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cxx18
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx29
3 files changed, 15 insertions, 45 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);
}