From 11034c004ee7b232e53d69e9f1ae9000f008285f Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sun, 31 Aug 2025 09:47:51 +0200 Subject: feat: kernel: Revamped `SignalKit` framework. DDK revamp. ci: testing improvements. Signed-off-by: Amlal El Mahrouss --- dev/kernel/SignalKit/SignalGen.h | 43 ++++++++++++++++++++++++++++++++++++++++ dev/kernel/SignalKit/Signals.h | 24 ---------------------- 2 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 dev/kernel/SignalKit/SignalGen.h delete mode 100644 dev/kernel/SignalKit/Signals.h (limited to 'dev/kernel/SignalKit') 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 + +#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 +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 - -#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 -- cgit v1.2.3 From 12fe96873ad4a2f1d3c7c3d9f84bc8eb367fb2f0 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 1 Sep 2025 08:43:46 +0200 Subject: feat: Signal System improvements. Signed-off-by: Amlal El Mahrouss --- dev/boot/BootKit/BitManip.h | 2 +- dev/kernel/SignalKit/SignalGen.h | 39 ++++++++++++++++++++++++--------------- dev/misc/BenchKit/HWChronometer.h | 2 +- 3 files changed, 26 insertions(+), 17 deletions(-) (limited to 'dev/kernel/SignalKit') diff --git a/dev/boot/BootKit/BitManip.h b/dev/boot/BootKit/BitManip.h index b1c72bfb..196953b3 100644 --- a/dev/boot/BootKit/BitManip.h +++ b/dev/boot/BootKit/BitManip.h @@ -8,7 +8,7 @@ #define __BITMANIP_H__ /// File: BitManip.h -/// Purpose: Bit manipulation helpers, based on coreboot-dev. +/// Purpose: Bit manipulation helpers, based on neboot-dev. #define bk_set_bit(X, O) X = (1 << O) | X #define bk_clear_bit(X, O) X = ~(1 << O) & X diff --git a/dev/kernel/SignalKit/SignalGen.h b/dev/kernel/SignalKit/SignalGen.h index e1684acb..ad127830 100644 --- a/dev/kernel/SignalKit/SignalGen.h +++ b/dev/kernel/SignalKit/SignalGen.h @@ -8,36 +8,45 @@ #include -#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 +#define SIGKILL 1 /* kill */ +#define SIGPAUS 2 /* pause */ +#define SIGEXEC 3 /* execute */ +#define SIGTRAP 4 /* trap */ +#define SIGABRT 5 /* abort */ +#define SIGCONT 6 /* continue */ +#define SIGSEG 7 /* process fault */ +#define SIGBREK 8 +#define SIGATCH 9 +#define SIGDTCH 10 /// @author Amlal El Mahrouss /// @brief Signal Generation API. namespace Kernel { -typedef UInt32 rt_signal_kind; +typedef SizeT rt_signal_kind; /// @brief Standard signal seed for general purpose usage. -inline static constexpr auto kBasicSignalSeed = 0x0895034f; +inline static constexpr auto kUserSignalSeed = 0x0895034fUL; + +/// @brief Special signal seed for kernel usage. +inline static constexpr auto kKernelSignalSeed = 0x0895034f9fUL; /// @brief Generate signal from **Sig** -template +template inline rt_signal_kind sig_generate_unique() { static_assert(Sig > 0, "Signal is zero (invalid)"); return Sig ^ Seed; } +/// @brief Checks if the signal matches the seed (user_seed or kernel_seed) +template +inline BOOL sig_matches_seed(const rt_signal_kind& sig) { + static_assert(sig > 0, "Signal is zero (invalid)"); + return (sig & Seed) > 0; +} + /// @brief Validate signal from **sig** -constexpr BOOL sig_validate_unique(rt_signal_kind sig) { +inline BOOL sig_validate_unique(rt_signal_kind sig) { return sig > 0; } } // namespace Kernel diff --git a/dev/misc/BenchKit/HWChronometer.h b/dev/misc/BenchKit/HWChronometer.h index 80e1d84a..e232db7e 100644 --- a/dev/misc/BenchKit/HWChronometer.h +++ b/dev/misc/BenchKit/HWChronometer.h @@ -42,7 +42,7 @@ struct HWChronoTraits final { template class HWChrono BENCHKIT_INTERFACE { public: - HWChrono() = default; + HWChrono() = default; virtual ~HWChrono() override = default; NE_COPY_DEFAULT(HWChrono) -- cgit v1.2.3 From 0eb89d981f802f9bc91c0d3000bb93e633234744 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 1 Sep 2025 08:46:37 +0200 Subject: SignalKit: Signals shall be `user` level by default. Signed-off-by: Amlal El Mahrouss --- dev/kernel/SignalKit/SignalGen.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'dev/kernel/SignalKit') diff --git a/dev/kernel/SignalKit/SignalGen.h b/dev/kernel/SignalKit/SignalGen.h index ad127830..9d2c0534 100644 --- a/dev/kernel/SignalKit/SignalGen.h +++ b/dev/kernel/SignalKit/SignalGen.h @@ -32,7 +32,7 @@ inline static constexpr auto kUserSignalSeed = 0x0895034fUL; inline static constexpr auto kKernelSignalSeed = 0x0895034f9fUL; /// @brief Generate signal from **Sig** -template +template inline rt_signal_kind sig_generate_unique() { static_assert(Sig > 0, "Signal is zero (invalid)"); return Sig ^ Seed; @@ -42,7 +42,7 @@ inline rt_signal_kind sig_generate_unique() { template inline BOOL sig_matches_seed(const rt_signal_kind& sig) { static_assert(sig > 0, "Signal is zero (invalid)"); - return (sig & Seed) > 0; + return (sig & 0xFF000000) == (Seed & 0xFF000000); } /// @brief Validate signal from **sig** -- cgit v1.2.3 From 1661e5d91d8e7984f916e3ccf78311b4b8c00940 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 1 Sep 2025 08:49:46 +0200 Subject: fix: fix build on amd64. Signed-off-by: Amlal El Mahrouss --- dev/kernel/SignalKit/SignalGen.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'dev/kernel/SignalKit') diff --git a/dev/kernel/SignalKit/SignalGen.h b/dev/kernel/SignalKit/SignalGen.h index 9d2c0534..4be9452a 100644 --- a/dev/kernel/SignalKit/SignalGen.h +++ b/dev/kernel/SignalKit/SignalGen.h @@ -39,9 +39,8 @@ inline rt_signal_kind sig_generate_unique() { } /// @brief Checks if the signal matches the seed (user_seed or kernel_seed) -template -inline BOOL sig_matches_seed(const rt_signal_kind& sig) { - static_assert(sig > 0, "Signal is zero (invalid)"); +template +inline BOOL sig_matches_seed(rt_signal_kind sig) { return (sig & 0xFF000000) == (Seed & 0xFF000000); } -- cgit v1.2.3