summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/kernel-ahci-dev.yml3
-rw-r--r--.github/workflows/kernel-ahci.yml2
-rw-r--r--dev/kernel/ArchKit/ArchKit.h2
-rw-r--r--dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc16
-rw-r--r--dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc2
-rw-r--r--dev/kernel/HALKit/ARM64/HalKernelMain.cc4
-rw-r--r--dev/kernel/SignalKit/SignalGen.h43
-rw-r--r--dev/kernel/SignalKit/Signals.h24
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc4
-rw-r--r--dev/libDDK/libDDK.json (renamed from dev/libDDK/ddk.json)2
-rwxr-xr-xkernel_ci_x64.sh9
11 files changed, 72 insertions, 39 deletions
diff --git a/.github/workflows/kernel-ahci-dev.yml b/.github/workflows/kernel-ahci-dev.yml
index a1a47fa3..ed6252c9 100644
--- a/.github/workflows/kernel-ahci-dev.yml
+++ b/.github/workflows/kernel-ahci-dev.yml
@@ -14,5 +14,4 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Install Packages
- run: sudo apt update && sudo apt install mingw-w64 qemu-utils nasm
-
+ run: sudo apt update && sudo apt install mingw-w64 qemu-utils nasm && ./kernel_ci_x64.sh
diff --git a/.github/workflows/kernel-ahci.yml b/.github/workflows/kernel-ahci.yml
index 17a68a30..17870517 100644
--- a/.github/workflows/kernel-ahci.yml
+++ b/.github/workflows/kernel-ahci.yml
@@ -14,5 +14,5 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Install Packages
- run: sudo apt update && sudo apt install mingw-w64 qemu-utils nasm
+ run: sudo apt update && sudo apt install mingw-w64 qemu-utils nasm && ./kernel_ci_x64.sh
diff --git a/dev/kernel/ArchKit/ArchKit.h b/dev/kernel/ArchKit/ArchKit.h
index bc3447fc..2042bded 100644
--- a/dev/kernel/ArchKit/ArchKit.h
+++ b/dev/kernel/ArchKit/ArchKit.h
@@ -69,6 +69,7 @@ namespace HAL {
typedef Kernel::Void (*rt_syscall_proc)(Kernel::VoidPtr);
+/// @brief System Call Dispatch.
struct HAL_DISPATCH_ENTRY final {
Kernel::UInt64 fHash;
Kernel::Bool fHooked;
@@ -79,6 +80,7 @@ struct HAL_DISPATCH_ENTRY final {
typedef Kernel::Void (*rt_kerncall_proc)(Kernel::SizeT, Kernel::VoidPtr, Kernel::SizeT);
+/// @brief Kernel Call Dispatch.
struct HAL_KERNEL_DISPATCH_ENTRY final {
Kernel::UInt64 fHash;
Kernel::Bool fHooked;
diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc
index b837497e..7408639c 100644
--- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc
+++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc
@@ -8,7 +8,7 @@
#include <KernelKit/ProcessScheduler.h>
#include <KernelKit/UserMgr.h>
#include <NeKit/KString.h>
-#include <SignalKit/Signals.h>
+#include <SignalKit/SignalGen.h>
EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip);
@@ -80,8 +80,9 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) {
hal_idt_send_eoi(8);
process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Leak().Signal.SignalID = sig_generate_unique<SIGKILL>();
+ ;
+ process.Leak().Signal.Status = process.Leak().Status;
}
/// @brief Handle any generic fault.
@@ -95,8 +96,9 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) {
Kernel::kout << "Kernel: Generic Process Fault.\r";
process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
- process.Leak().Signal.Status = process.Leak().Status;
+ process.Leak().Signal.SignalID = sig_generate_unique<SIGSEG>();
+ ;
+ process.Leak().Signal.Status = process.Leak().Status;
Kernel::kout << "Kernel: SIGKILL status.\r";
}
@@ -107,7 +109,7 @@ EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip) {
hal_idt_send_eoi(3);
process.Leak().Signal.SignalArg = rip;
- process.Leak().Signal.SignalID = SIGTRAP;
+ process.Leak().Signal.SignalID = sig_generate_unique<SIGTRAP>();
process.Leak().Signal.Status = process.Leak().Status;
@@ -123,7 +125,7 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) {
hal_idt_send_eoi(6);
process.Leak().Signal.SignalArg = rsp;
- process.Leak().Signal.SignalID = SIGKILL;
+ process.Leak().Signal.SignalID = sig_generate_unique<SIGKILL>();
process.Leak().Signal.Status = process.Leak().Status;
}
diff --git a/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc b/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc
index 0c26f4cb..dd875c63 100644
--- a/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc
+++ b/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc
@@ -8,7 +8,7 @@
#include <KernelKit/ProcessScheduler.h>
#include <KernelKit/UserMgr.h>
#include <NeKit/KString.h>
-#include <SignalKit/Signals.h>
+#include <SignalKit/SignalGen.h>
EXTERN_C Kernel::Void int_handle_breakpoint(Kernel::UIntPtr rip);
EXTERN_C BOOL mp_handle_gic_interrupt_el0(Void);
diff --git a/dev/kernel/HALKit/ARM64/HalKernelMain.cc b/dev/kernel/HALKit/ARM64/HalKernelMain.cc
index 20bd3d8a..d7663f4e 100644
--- a/dev/kernel/HALKit/ARM64/HalKernelMain.cc
+++ b/dev/kernel/HALKit/ARM64/HalKernelMain.cc
@@ -37,6 +37,8 @@ EXTERN_C void hal_init_platform(Kernel::HEL::BootInfoHeader* handover_hdr) {
FB::fb_clear_video();
+ kBitMapCursor = 0UL;
+
#ifdef __NE_ARM64_EFI__
fw_init_efi((EfiSystemTable*) handover_hdr->f_FirmwareCustomTables[1]);
@@ -74,4 +76,4 @@ EXTERN_C void hal_init_platform(Kernel::HEL::BootInfoHeader* handover_hdr) {
while (YES)
;
}
-#endif \ No newline at end of file
+#endif
diff --git a/dev/kernel/SignalKit/SignalGen.h b/dev/kernel/SignalKit/SignalGen.h
new file mode 100644
index 00000000..e1684acb
--- /dev/null
+++ b/dev/kernel/SignalKit/SignalGen.h
@@ -0,0 +1,43 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NeKit/Defines.h>
+
+#define SIGKILL 1
+#define SIGPAUS 2
+#define SIGEXEC 3
+#define SIGTRAP 4
+#define SIGABRT 5
+#define SIGCONT 6
+#define SIGSEG 7
+
+#define SIGBREK 660
+#define SIGATCH 661
+#define SIGDTCH 662
+
+/// @author Amlal El Mahrouss
+/// @brief Signal Generation API.
+
+namespace Kernel {
+typedef UInt32 rt_signal_kind;
+
+/// @brief Standard signal seed for general purpose usage.
+inline static constexpr auto kBasicSignalSeed = 0x0895034f;
+
+/// @brief Generate signal from **Sig**
+template <rt_signal_kind Sig, SizeT Seed = kBasicSignalSeed>
+inline rt_signal_kind sig_generate_unique() {
+ static_assert(Sig > 0, "Signal is zero (invalid)");
+ return Sig ^ Seed;
+}
+
+/// @brief Validate signal from **sig**
+constexpr BOOL sig_validate_unique(rt_signal_kind sig) {
+ return sig > 0;
+}
+} // namespace Kernel
diff --git a/dev/kernel/SignalKit/Signals.h b/dev/kernel/SignalKit/Signals.h
deleted file mode 100644
index 142ed3ab..00000000
--- a/dev/kernel/SignalKit/Signals.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -------------------------------------------
-
- Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
-
-------------------------------------------- */
-
-#pragma once
-
-#include <NeKit/Defines.h>
-
-#define SIGKILL 0
-#define SIGPAUS 1
-#define SIGEXEC 2
-#define SIGTRAP 3
-#define SIGABRT 4
-#define SIGCONT 5
-
-#define SIGBREK 666
-#define SIGATCH 661
-#define SIGDTCH 662
-
-namespace Kernel {
-typedef UInt32 SignalKind;
-} \ No newline at end of file
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc
index 8a3152f0..15da4431 100644
--- a/dev/kernel/src/UserProcessScheduler.cc
+++ b/dev/kernel/src/UserProcessScheduler.cc
@@ -21,7 +21,7 @@
#include <KernelKit/ProcessScheduler.h>
#include <NeKit/KString.h>
#include <NeKit/Utils.h>
-#include <SignalKit/Signals.h>
+#include <SignalKit/SignalGen.h>
///! BUGS: 0
@@ -593,7 +593,7 @@ Bool UserProcessHelper::CanBeScheduled(const USER_PROCESS& process) {
// real time processes shouldn't wait that much.
if (process.Affinity == AffinityKind::kRealTime) return Yes;
- if (process.Signal.SignalID == SIGTRAP) {
+ if (process.Signal.SignalID == sig_generate_unique<SIGTRAP>()) {
return No;
}
diff --git a/dev/libDDK/ddk.json b/dev/libDDK/libDDK.json
index ffc05f5f..113dd585 100644
--- a/dev/libDDK/ddk.json
+++ b/dev/libDDK/libDDK.json
@@ -3,7 +3,7 @@
"compiler_std": "c++20",
"headers_path": ["../", "./"],
"sources_path": ["src/*.c", "src/*.cc", "src/*.S"],
- "output_name": "ddk.sys",
+ "output_name": "libDDK.dll",
"compiler_flags": [
"-ffreestanding",
"-shared",
diff --git a/kernel_ci_x64.sh b/kernel_ci_x64.sh
new file mode 100755
index 00000000..e052b4f2
--- /dev/null
+++ b/kernel_ci_x64.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+export AHCI_SUPPORT=1
+export ATA_PIO_SUPPORT=
+export ATA_DMA_SUPPORT=
+export DEBUG_SUPPORT=1
+
+cd dev/kernel
+make -f amd64-desktop.make all