diff options
| -rw-r--r-- | dev/Boot/amd64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/Boot/src/BootThread.cc | 6 | ||||
| -rw-r--r-- | dev/Boot/src/HEL/AMD64/BootEFI.cc | 2 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/HalKernelMain.cc | 23 | ||||
| -rw-r--r-- | dev/Kernel/src/KernelMain.cc | 107 |
5 files changed, 22 insertions, 118 deletions
diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make index 2a67f2f2..c1564b77 100644 --- a/dev/Boot/amd64-desktop.make +++ b/dev/Boot/amd64-desktop.make @@ -113,7 +113,7 @@ compile-amd64: .PHONY: run-efi-amd64-ahci run-efi-amd64-ahci: - $(EMU) $(EMU_FLAGS) -hda $(IMG) -s -S -trace ahci_* -boot menu=on + $(EMU) $(EMU_FLAGS) -d int -hda $(IMG) -s -S -trace ahci_* -boot menu=on .PHONY: run-efi-amd64-ata-pio run-efi-amd64-ata-pio: diff --git a/dev/Boot/src/BootThread.cc b/dev/Boot/src/BootThread.cc index 93ebd9ac..8b136ba3 100644 --- a/dev/Boot/src/BootThread.cc +++ b/dev/Boot/src/BootThread.cc @@ -63,12 +63,6 @@ namespace Boot } #endif // __NE_AMD64__ || __NE_ARM64__ - if (opt_header_ptr->mSubsystem != kNeKernelSubsystem) - { - writer.Write("BootZ: Not a NeKernel Subsystem executable.\r"); - return; - } - writer.Write("BootZ: PE32+ executable detected (NeKernel Subsystem).\r"); auto numSecs = header_ptr->mNumberOfSections; diff --git a/dev/Boot/src/HEL/AMD64/BootEFI.cc b/dev/Boot/src/HEL/AMD64/BootEFI.cc index 84a4a777..1f518418 100644 --- a/dev/Boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/Boot/src/HEL/AMD64/BootEFI.cc @@ -218,7 +218,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle, syschk_thread->Start(handover_hdr, NO); } -#ifndef __AHCI__ +#if defined(__ATA_PIO__) Boot::BDiskFormatFactory<BootDeviceATA> partition_factory; if (syschk_thread->Start(handover_hdr, NO) != kEfiOk) 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) diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc deleted file mode 100644 index 643e15bb..00000000 --- a/dev/Kernel/src/KernelMain.cc +++ /dev/null @@ -1,107 +0,0 @@ -/* ------------------------------------------- - - Copyright Amlal EL Mahrouss - - File: Main.cxx - Purpose: Main entrypoint of kernel. - -------------------------------------------- */ - -#include <KernelKit/PE.h> -#include <ArchKit/ArchKit.h> -#include <CompilerKit/Detail.h> -#include <FirmwareKit/Handover.h> -#include <KernelKit/FileMgr.h> -#include <KernelKit/MemoryMgr.h> -#include <KernelKit/PEF.h> -#include <KernelKit/PEFCodeMgr.h> -#include <KernelKit/UserProcessScheduler.h> -#include <KernelKit/MemoryMgr.h> -#include <NewKit/Json.h> -#include <NewKit/KString.h> -#include <NewKit/Utils.h> -#include <KernelKit/CodeMgr.h> -#include <CFKit/Property.h> -#include <KernelKit/Timer.h> - -/* ------------------------------------------- - - Revision History: - - 04/03/25: Add /user/ directory. - - ------------------------------------------- */ - -#ifdef __NE_AUTO_FORMAT__ -namespace NeOS::Detail -{ - /// @brief Filesystem auto formatter, additional checks are also done by the class. - class NeFilesystemInstaller final - { - private: - NeFileSystemParser* mNeFS{nullptr}; - NeFileSystemJournal mJournal; - - public: - /// @brief wizard constructor. - explicit NeFilesystemInstaller() - { - mNeFS = new NeFileSystemParser(); - - if (mNeFS) - { - const SizeT kFolderCount = 14; - const Char* kFolderStr[kFolderCount] = { - "/", "/boot/", "/sys/", "/media/", "/etc/", - "/usr/", "/lib/", "/mnt/", "/sbin/", "/n/", "/dev/", "/run/", "/root/", "/user/"}; - - for (SizeT dir_index = 0UL; dir_index < kFolderCount; ++dir_index) - { - auto catalog_folder = mNeFS->GetCatalog(kFolderStr[dir_index]); - - if (catalog_folder) - { - delete catalog_folder; - catalog_folder = nullptr; - - continue; - } - - catalog_folder = mNeFS->CreateCatalog(kFolderStr[dir_index], 0, - kNeFSCatalogKindDir); - - if (!catalog_folder) - continue; - - delete catalog_folder; - catalog_folder = nullptr; - } - - if (!mJournal.GetJournal(mNeFS)) - mJournal.CreateJournal(mNeFS); - - mJournal.CommitJournal(mNeFS, "['FS': 'NeFS', 'Type': 'AutoFormat']", "FormatLog.json"); - mJournal.ReleaseJournal(); - } - } - - ~NeFilesystemInstaller() - { - if (mNeFS) - delete mNeFS; - - mNeFS = nullptr; - } - - NE_COPY_DEFAULT(NeFilesystemInstaller); - }; -} // namespace NeOS::Detail -#endif // ifdef __NE_AUTO_FORMAT__ - -/// @brief Kernel entrypoint. -/// @param Void -/// @return Void -EXTERN_C NeOS::Void rtl_kernel_main(NeOS::SizeT argc, char** argv, char** envp, NeOS::SizeT envp_len) -{ - NeOS::NeFS::fs_init_nefs(); -} |
