summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-29 09:05:36 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-29 09:05:36 +0100
commitb7f2a078b4284c3adc253f40bc54e733d27b6bd6 (patch)
tree9eb5c6c0501278bcf1615ba59e7bb25a63bd4f1b /Private/HALKit
parent375fa68692447f6806264fc0339d26b691e2a1bb (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.cpp40
-rw-r--r--Private/HALKit/AMD64/HalCoreSyscallHandlerAMD64.cpp4
-rw-r--r--Private/HALKit/AMD64/HalInstallTIB.asm3
-rw-r--r--Private/HALKit/AMD64/HalKernelMain.cxx25
-rw-r--r--Private/HALKit/AMD64/Processor.hpp2
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;