From e70c1c53237ff773a0e802642db04fe58a6deb22 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 25 Aug 2025 14:28:57 +0200 Subject: fix: MsgKit: use `struct LIBMSG_EXPR` instead of `LIBMSG_EXPR` for C programs. Signed-off-by: Amlal El Mahrouss --- dev/libMsg/MsgKit/Server.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/libMsg/MsgKit/Server.h b/dev/libMsg/MsgKit/Server.h index 4fa73ccc..022aa425 100644 --- a/dev/libMsg/MsgKit/Server.h +++ b/dev/libMsg/MsgKit/Server.h @@ -33,7 +33,7 @@ struct LIBMSG_EXPR final { }; /// @brief Function type for LibMSG lisp. -typedef Void (*libmsg_func_t)(LIBMSG_EXPR* self, VoidPtr arg, SizeT arg_size); +typedef Void (*libmsg_func_t)(struct LIBMSG_EXPR* self, VoidPtr arg, SizeT arg_size); IMPORT_C Void libmsg_init_library(libmsg_func_t* funcs, SizeT cnt); IMPORT_C UInt32 libmsg_close_library(Void); -- cgit v1.2.3 From 5ab0e37e4c606db6e5c10b0fe2d65b4e611e9503 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 26 Aug 2025 09:51:23 +0200 Subject: refactor: cleanup code. feat: set `UTime` to zero as well inside `UserProcessTeam.cc` Signed-off-by: Amlal El Mahrouss --- dev/kernel/KernelKit/KernelTaskScheduler.h | 2 +- dev/kernel/KernelKit/UserProcessScheduler.h | 6 +++--- dev/kernel/src/UserProcessScheduler.cc | 3 ++- dev/kernel/src/UserProcessTeam.cc | 1 + 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/dev/kernel/KernelKit/KernelTaskScheduler.h b/dev/kernel/KernelKit/KernelTaskScheduler.h index 527eec5e..ce0ff30d 100644 --- a/dev/kernel/KernelKit/KernelTaskScheduler.h +++ b/dev/kernel/KernelKit/KernelTaskScheduler.h @@ -41,6 +41,6 @@ class KernelTaskHelper final { STATIC Bool Switch(HAL::StackFramePtr frame_ptr, ProcessID new_kid); STATIC Bool CanBeScheduled(const KERNEL_TASK& process); STATIC ErrorOr TheCurrentKID(); - STATIC SizeT StartScheduling(); + STATIC SizeT StartScheduling(); }; } // namespace Kernel \ No newline at end of file diff --git a/dev/kernel/KernelKit/UserProcessScheduler.h b/dev/kernel/KernelKit/UserProcessScheduler.h index a7ef13a9..e5b81f76 100644 --- a/dev/kernel/KernelKit/UserProcessScheduler.h +++ b/dev/kernel/KernelKit/UserProcessScheduler.h @@ -79,8 +79,8 @@ class USER_PROCESS final { ProcessTime RTime{0}; //! @brief Process run time. ProcessTime UTime{0}; //! #brief Process used time. - ProcessID ProcessId{kSchedInvalidPID}; - Int32 Kind{kExecutableKind}; + ProcessID ProcessId{kSchedInvalidPID}; + Int32 Kind{kExecutableKind}; public: /***********************************************************************************/ @@ -229,7 +229,7 @@ class UserProcessHelper final { STATIC Bool Switch(HAL::StackFramePtr frame_ptr, ProcessID new_pid); STATIC Bool CanBeScheduled(const USER_PROCESS& process); STATIC ErrorOr TheCurrentPID(); - STATIC SizeT StartScheduling(); + STATIC SizeT StartScheduling(); }; } // namespace Kernel diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 19e509ed..8a3152f0 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -574,7 +574,8 @@ Ref& UserProcessScheduler::TheCurrentProcess() { /// @brief Current proccess id getter. /// @return USER_PROCESS ID integer. ErrorOr UserProcessHelper::TheCurrentPID() { - if (!UserProcessScheduler::The().TheCurrentProcess()) return ErrorOr{-kErrorProcessFault}; + if (!UserProcessScheduler::The().TheCurrentProcess()) + return ErrorOr{-kErrorProcessFault}; kout << "UserProcessHelper::TheCurrentPID: Leaking ProcessId...\r"; return ErrorOr{UserProcessScheduler::The().TheCurrentProcess().Leak().ProcessId}; diff --git a/dev/kernel/src/UserProcessTeam.cc b/dev/kernel/src/UserProcessTeam.cc index 73ba7285..23536242 100644 --- a/dev/kernel/src/UserProcessTeam.cc +++ b/dev/kernel/src/UserProcessTeam.cc @@ -18,6 +18,7 @@ UserProcessTeam::UserProcessTeam() { this->mProcessList[i] = USER_PROCESS(); this->mProcessList[i].PTime = 0; this->mProcessList[i].RTime = 0; + this->mProcessList[i].UTime = 0; this->mProcessList[i].Status = ProcessStatusKind::kKilled; this->mProcessList[i].ParentTeam = this; } -- cgit v1.2.3 From 2fe8c419e2724a7009d39e4adeb05de7569d5d11 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 27 Aug 2025 16:56:41 +0200 Subject: feat: docs/tex: Update OpenHeFS specs. feat: HAL/amd64: Harden AP files. Signed-off-by: Amlal El Mahrouss --- dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 2 ++ dev/kernel/HALKit/POWER/HalApplicationProcessor.cc | 9 ++++++++- docs/tex/hefs.tex | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 64f146f3..df5386e4 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -4,6 +4,7 @@ ------------------------------------------- */ +/// Different than the MADT, might be confusing to some. #define APIC_MAG "APIC" #define APIC_ICR_LOW 0x300 @@ -145,6 +146,7 @@ Bool mp_is_smp(Void) noexcept { Void mp_init_cores(VoidPtr vendor_ptr) noexcept { if (!vendor_ptr) return; + if (!kHandoverHeader) return; if (!kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled) { kSMPAware = NO; diff --git a/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc b/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc index daa26e53..c2703af6 100644 --- a/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/POWER/HalApplicationProcessor.cc @@ -8,6 +8,8 @@ #include #include +/// @note This part of the HAL needs an owner. + namespace Kernel::Detail { STATIC void mp_hang_fn(void) { while (YES) @@ -21,6 +23,9 @@ namespace Kernel { void mp_wakeup_thread(HAL::StackFramePtr stack) { if (!stack) return; + MUST_PASS(stack->R15 > 0); + MUST_PASS(stack->IP > 0); + hal_set_pc_to_hart(reinterpret_cast(stack->R15), reinterpret_cast(stack->IP)); } @@ -30,7 +35,9 @@ void mp_wakeup_thread(HAL::StackFramePtr stack) { void mp_hang_thread(HAL::StackFramePtr stack) { if (!stack) return; + MUST_PASS(stack->R15 > 0); + hal_set_pc_to_hart(reinterpret_cast(stack->R15), reinterpret_cast(Kernel::Detail::mp_hang_fn)); } -} // namespace Kernel \ No newline at end of file +} // namespace Kernel diff --git a/docs/tex/hefs.tex b/docs/tex/hefs.tex index 1656e5a9..c35bca53 100644 --- a/docs/tex/hefs.tex +++ b/docs/tex/hefs.tex @@ -93,7 +93,7 @@ The High-throughput Extended File System (HeFS) is a custom filesystem tailored \section{Structures}\label{sec:structures} \subsection{HEFS\_BOOT\_NODE}\label{subsec:hefs_boot_node} -Acts as the superblock. +Acts as the superblock of the filesystem, provides necessary information about the disk and the filesystem itself. \begin{itemize} \item \texttt{fMagic}, \texttt{fVolName}, \texttt{fVersion}, \texttt{fChecksum} -- cgit v1.2.3 From 69265679315389a82387e963cc69a2b7343356b5 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 27 Aug 2025 22:46:42 +0200 Subject: feat: FirmwareKit/NeBoot: Fix BootNet header structure layout Signed-off-by: Amlal El Mahrouss --- dev/kernel/FirmwareKit/NeBoot/BootNet.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dev/kernel/FirmwareKit/NeBoot/BootNet.h b/dev/kernel/FirmwareKit/NeBoot/BootNet.h index 3ed11363..250d0bc8 100644 --- a/dev/kernel/FirmwareKit/NeBoot/BootNet.h +++ b/dev/kernel/FirmwareKit/NeBoot/BootNet.h @@ -13,11 +13,13 @@ #define kBootNetVersion (0x001) #define kBootNetNameLen (256U) +struct _BOOTNET_INTERNET_HEADER; + /// @brief Netboot Internet Header /// Consists of 4 magic characters, and a set of fields describing the current patch that's being /// sent (if m_preflight = 0) /// @note Can be used to patch ROMs too (if ImpliesProgram = 1) -typedef struct BOOTNET_INTERNET_HEADER { +typedef struct _BOOTNET_INTERNET_HEADER { Kernel::Char NB1; /// magic char 1 'O' Kernel::Char NB2; /// magic char 2 'N' Kernel::Char NB3; /// magic char 3 'E' @@ -29,4 +31,6 @@ typedef struct BOOTNET_INTERNET_HEADER { Kernel::Boolean ImpliesProgram : 1; /// does it imply reprogramming? Kernel::Boolean Preflight : 1; /// is it a preflight packet. Kernel::Char Data[1]; /// non preflight packet has a patch blob for a **PatchTarget** -} BOOTNET_INTERNET_HEADER; +} PACKED BOOTNET_INTERNET_HEADER; + +using BOOT_INTERNET_HEADER_PTR = BOOT_INTERNET_HEADER; -- cgit v1.2.3 From cd87ca26b1d8f4472543f8ea64c1b9bebd9bcc33 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 27 Aug 2025 22:51:16 +0200 Subject: fix: FirmwareKit/BootNet: Fix BootNet alias. Signed-off-by: Amlal El Mahrouss --- dev/kernel/FirmwareKit/NeBoot/BootNet.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dev/kernel/FirmwareKit/NeBoot/BootNet.h b/dev/kernel/FirmwareKit/NeBoot/BootNet.h index 250d0bc8..ad8f07c5 100644 --- a/dev/kernel/FirmwareKit/NeBoot/BootNet.h +++ b/dev/kernel/FirmwareKit/NeBoot/BootNet.h @@ -24,13 +24,18 @@ typedef struct _BOOTNET_INTERNET_HEADER { Kernel::Char NB2; /// magic char 2 'N' Kernel::Char NB3; /// magic char 3 'E' Kernel::Char NB4; /// magic char 4 'T' + Kernel::UInt16 Version; + Kernel::Char Name[kBootNetNameLen]; /// example: Modjo + Kernel::Int32 Length; /// the patch length. Kernel::Char Target[kBootNetNameLen]; /// the target file. + Kernel::Boolean ImpliesProgram : 1; /// does it imply reprogramming? + Kernel::Boolean Preflight : 1; /// is it a preflight packet. Kernel::Char Data[1]; /// non preflight packet has a patch blob for a **PatchTarget** } PACKED BOOTNET_INTERNET_HEADER; -using BOOT_INTERNET_HEADER_PTR = BOOT_INTERNET_HEADER; +using BOOTNET_INTERNET_HEADER_PTR = BOOTNET_INTERNET_HEADER*; -- cgit v1.2.3 From 2a85aaf252725ec5b3b70a5baf99cfacee6b120a Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 28 Aug 2025 08:48:05 +0200 Subject: feat: CODEOWNERS: /public/ is own by Amlal, /tools/ is owned by 0xf00sec Signed-off-by: Amlal El Mahrouss --- CODEOWNERS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 37576176..76953c39 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -4,4 +4,6 @@ /dev/libDDK/ @amlel-el-mahrouss /dev/libMsg/ @0xf00sec /dev/libSystem/ @0xf00sec -# some other parts (tools, frameworks) need ownership too. \ No newline at end of file +# some other parts (tools, frameworks) need ownership too. +/public/ @amlel-el-mahrouss +/tools/ @0xf00sec \ No newline at end of file -- cgit v1.2.3