diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-17 06:23:47 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-17 06:23:47 +0100 |
| commit | 157210ca5a42d6a4eed7463eeacf5f4acf5f0cc0 (patch) | |
| tree | 4f265733c911662a37e89fe474344d91a89c232b /dev/Kernel/HALKit | |
| parent | a20b5a830293fac7bf6681676c96e17810fdd1ad (diff) | |
ADD: Lift manadatory subsystem id on PE32+ kernel image, benchmarking
code too (Still WIP)
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/HALKit')
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/HalKernelMain.cc | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/dev/Kernel/HALKit/AMD64/HalKernelMain.cc b/dev/Kernel/HALKit/AMD64/HalKernelMain.cc index bdc09bcf..f62b77cd 100644 --- a/dev/Kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/Kernel/HALKit/AMD64/HalKernelMain.cc @@ -4,6 +4,8 @@ ------------------------------------------- */ +#include "FSKit/NeFS.h" +#include "NewKit/Defines.h" #include <ArchKit/ArchKit.h> #include <KernelKit/UserProcessScheduler.h> #include <KernelKit/HardwareThreadScheduler.h> @@ -20,8 +22,6 @@ EXTERN_C NeOS::Char mp_user_switch_proc_stack_begin[]; EXTERN_C NeOS::rtl_ctor_kind __CTOR_LIST__[]; EXTERN_C NeOS::VoidPtr __DTOR_LIST__; -EXTERN_C NeOS::Void rtl_kernel_main(NeOS::SizeT argc, char** argv, char** envp, NeOS::SizeT envp_len); - STATIC NeOS::Void hal_init_cxx_ctors() { for (NeOS::SizeT i = 0U; i < NeOS::UserProcessScheduler::The().CurrentTeam().AsArray().Count(); ++i) @@ -39,10 +39,23 @@ STATIC NeOS::Void hal_init_cxx_ctors() } } +STATIC NeOS::UInt64 hal_rdtsc_fn() +{ + NeOS::UInt32 lo, hi; + __asm__ volatile("rdtsc" + : "=a"(lo), "=d"(hi)); + + return ((NeOS::UInt64)hi << 32) | lo; +} + +STATIC NeOS::UInt64 kStart, kEnd; + /// @brief Kernel init procedure. EXTERN_C void hal_init_platform( NeOS::HEL::BootInfoHeader* handover_hdr) { + kStart = hal_rdtsc_fn(); + kHandoverHeader = handover_hdr; if (kHandoverHeader->f_Magic != kHandoverMagic && @@ -93,7 +106,7 @@ EXTERN_C void hal_init_platform( EXTERN_C NeOS::Void hal_real_init(NeOS::Void) noexcept { - rtl_kernel_main(0, nullptr, nullptr, 0); + NeOS::NeFS::fs_init_nefs(); NeOS::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); @@ -103,6 +116,10 @@ EXTERN_C NeOS::Void hal_real_init(NeOS::Void) noexcept NeOS::HAL::IDTLoader idt_loader; + kEnd = hal_rdtsc_fn(); + + kout << "Cycles Spent: " << NeOS::number(kEnd - kStart) << kendl; + idt_loader.Load(idt_reg); while (YES) |
