diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-29 09:05:36 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-29 09:05:36 +0100 |
| commit | b7f2a078b4284c3adc253f40bc54e733d27b6bd6 (patch) | |
| tree | 9eb5c6c0501278bcf1615ba59e7bb25a63bd4f1b /Private/HALKit | |
| parent | 375fa68692447f6806264fc0339d26b691e2a1bb (diff) | |
HCoreKrnl: Start work on AHCI support. to add HCFS,EPM,GPT support to
the kernel.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/HALKit')
| -rw-r--r-- | Private/HALKit/AMD64/HalCoreInterruptHandler.cpp | 40 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp | 4 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalInstallTIB.asm | 3 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalKernelMain.cxx | 25 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/Processor.hpp | 2 |
5 files changed, 22 insertions, 52 deletions
diff --git a/Private/HALKit/AMD64/HalCoreInterruptHandler.cpp b/Private/HALKit/AMD64/HalCoreInterruptHandler.cpp index e568aa4d..c35d52cc 100644 --- a/Private/HALKit/AMD64/HalCoreInterruptHandler.cpp +++ b/Private/HALKit/AMD64/HalCoreInterruptHandler.cpp @@ -8,43 +8,9 @@ */ #include <ArchKit/ArchKit.hpp> -#include <KernelKit/ProcessManager.hpp> #include <NewKit/String.hpp> -static const char* kExceptionMessages[32] = { - "Division by zero", - "Debug Breakpoint", - "Non-maskable Interrupt", - "Breakpoint", - "Detected Overflow", - "Out-Of-Bounds", - "Invalid Opcode", - "No Coprocessor", - "Double Fault", - "Coprocessor Segment Overrun", - "Bad TSS", - "Segment Not Found", - "Stack Error", - "General Protection Fault", - "Page Fault", - "Invalid Interrupt", - "Coprocessor Fault", - "Alignment Check", - "Machine Check", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", -}; +/// BUGS = 1 /// @brief System call interrupt (like DOS and NT) #define kKernelSyscallInterrupt (0x21) @@ -53,10 +19,6 @@ EXTERN_C { HCore::Void rt_handle_interrupts(HCore::HAL::StackFramePtr stack) { HCore::kcout << "HCoreKrnl: Interrupting Hart...\r\n"; - if (stack->IntNum < 32) { - HCore::kcout << "HCoreKrnl: " << kExceptionMessages[stack->IntNum] << HCore::end_line(); - } - switch (stack->IntNum) { case kKernelSyscallInterrupt: { HCore::kcout << "HCoreKrnl: System call raised, checking.." diff --git a/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp b/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp index 24eee910..7d0178fe 100644 --- a/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp +++ b/Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp @@ -11,7 +11,7 @@ #include <HALKit/AMD64/Processor.hpp> #include <KernelKit/PermissionSelector.hxx> -typedef HCore::Void (*rt_syscall_proc)(HCore::Int32 id, HCore::HAL::StackFramePtr); +typedef HCore::Void (*rt_syscall_proc)(HCore::HAL::StackFramePtr); HCore::Array<rt_syscall_proc, kKernelMaxSystemCalls> kSyscalls; @@ -20,6 +20,6 @@ EXTERN_C void rt_syscall_handle(HCore::HAL::StackFramePtr stack) { if (!stack) return; if (stack->Rcx < kKernelMaxSystemCalls && kSyscalls[stack->Rcx] != 0) { - (kSyscalls[stack->Rcx].Leak().Leak())(stack->Rcx, stack); + (kSyscalls[stack->Rcx].Leak().Leak())(stack); } } diff --git a/Private/HALKit/AMD64/HalInstallTIB.asm b/Private/HALKit/AMD64/HalInstallTIB.asm index 260b496f..3391dc26 100644 --- a/Private/HALKit/AMD64/HalInstallTIB.asm +++ b/Private/HALKit/AMD64/HalInstallTIB.asm @@ -12,7 +12,8 @@ [global rt_install_tib] rt_install_tib: - mov rcx, gs + mov rcx, gs ;; TIB -> Thread Information Block + mov rdx, fs ;; PIB -> Process Information Block ret ;; //////////////////////////////////////////////////// ;; diff --git a/Private/HALKit/AMD64/HalKernelMain.cxx b/Private/HALKit/AMD64/HalKernelMain.cxx index df7ce91e..27c12509 100644 --- a/Private/HALKit/AMD64/HalKernelMain.cxx +++ b/Private/HALKit/AMD64/HalKernelMain.cxx @@ -13,11 +13,12 @@ #include <KernelKit/FileManager.hpp> #include <KernelKit/Framebuffer.hpp> #include <KernelKit/PEFCodeManager.hxx> -#include <KernelKit/Rsrc/Splash.hxx> #include <KernelKit/Rsrc/Util.hxx> #include <NewKit/Json.hpp> #include <NewKit/KernelHeap.hpp> #include <NewKit/UserHeap.hpp> +#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/Rsrc/Splash.rsrc> ///! @brief Disk contains HCore files. #define kInstalledMedia 0xDD @@ -94,27 +95,31 @@ EXTERN_C void RuntimeMain( KeDrawRsrc(MahroussLogic, MAHROUSSLOGIC_HEIGHT, MAHROUSSLOGIC_WIDTH, ((kHandoverHeader->f_GOP.f_Width - MAHROUSSLOGIC_WIDTH) / 2), ((kHandoverHeader->f_GOP.f_Height - MAHROUSSLOGIC_HEIGHT) / 2)); KeClearRsrc(); + /// START POST + Detail::_ke_power_on_self_test(); + HCore::ProcessManager::Shared().Leak().GetCurrent().Leak().Crash(); HCore::kcout << "HCoreKrnl: POST done, everything is OK...\r\n"; - if (HandoverHeader->f_Bootloader == kInstalledMedia) { - /// Mounts a NewFS block. - HCore::IFilesystemManager::Mount(new HCore::NewFilesystemManager()); + /// END POST + /// Mounts a NewFS block. + HCore::IFilesystemManager::Mount(new HCore::NewFilesystemManager()); + + /// We already have an install of HCore. + if (HandoverHeader->f_Bootloader == kInstalledMedia) { // Open file from first hard-drive. HCore::PEFLoader img("A:/System/HCoreServer.exe"); /// Run the server executive. HCore::Utils::execute_from_image(img); } else { - /** - ** This does the POST. - */ + // Open file from first hard-drive. + HCore::PEFLoader img("A:/System/HCoreInstallWizard.exe"); - /** - This mounts the NewFS drive. - */ + /// Run the server executive. + HCore::Utils::execute_from_image(img); } HCore::ke_stop(RUNTIME_CHECK_BOOTSTRAP); diff --git a/Private/HALKit/AMD64/Processor.hpp b/Private/HALKit/AMD64/Processor.hpp index 435847a8..93a9775a 100644 --- a/Private/HALKit/AMD64/Processor.hpp +++ b/Private/HALKit/AMD64/Processor.hpp @@ -82,6 +82,8 @@ typedef UIntPtr Reg; struct PACKED StackFrame { Reg IntNum, ErrCode; Reg Rdi, Rsi, Rbp, Rsp, Rbx, Rdx, Rcx, Rax; + Reg R8, R9, R10, R11, R12, R13, R14, R15; + Reg Gs, Fs; }; typedef StackFrame *StackFramePtr; |
