summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-28 09:26:40 +0200
committerGitHub <noreply@github.com>2025-08-28 09:26:40 +0200
commit36f7cf9ca4eb917ffd09fdfa6abf04ee10f3dc7e (patch)
tree1e388b162ba5d583bc39c9b23d71fd49224d1847
parent97f0b0d062f93040fb43ac5c882c40691c58ff7a (diff)
parent2a85aaf252725ec5b3b70a5baf99cfacee6b120a (diff)
Merge pull request #59 from nekernel-org/dev
v0.0.4e2 — Boulder
-rw-r--r--CODEOWNERS4
-rw-r--r--dev/kernel/FirmwareKit/NeBoot/BootNet.h13
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc2
-rw-r--r--dev/kernel/HALKit/POWER/HalApplicationProcessor.cc9
-rw-r--r--dev/kernel/KernelKit/KernelTaskScheduler.h2
-rw-r--r--dev/kernel/KernelKit/UserProcessScheduler.h6
-rw-r--r--dev/kernel/src/UserProcessScheduler.cc3
-rw-r--r--dev/kernel/src/UserProcessTeam.cc1
-rw-r--r--dev/libMsg/MsgKit/Server.h2
-rw-r--r--docs/tex/hefs.tex2
10 files changed, 33 insertions, 11 deletions
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
diff --git a/dev/kernel/FirmwareKit/NeBoot/BootNet.h b/dev/kernel/FirmwareKit/NeBoot/BootNet.h
index 3ed11363..ad8f07c5 100644
--- a/dev/kernel/FirmwareKit/NeBoot/BootNet.h
+++ b/dev/kernel/FirmwareKit/NeBoot/BootNet.h
@@ -13,20 +13,29 @@
#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'
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**
-} BOOTNET_INTERNET_HEADER;
+} PACKED BOOTNET_INTERNET_HEADER;
+
+using BOOTNET_INTERNET_HEADER_PTR = BOOTNET_INTERNET_HEADER*;
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 <HALKit/POWER/Processor.h>
#include <KernelKit/DebugOutput.h>
+/// @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<HAL_HARDWARE_THREAD*>(stack->R15),
reinterpret_cast<VoidPtr>(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<HAL_HARDWARE_THREAD*>(stack->R15),
reinterpret_cast<VoidPtr>(Kernel::Detail::mp_hang_fn));
}
-} // namespace Kernel \ No newline at end of file
+} // namespace Kernel
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<ProcessID> 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<ProcessID> 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<USER_PROCESS>& UserProcessScheduler::TheCurrentProcess() {
/// @brief Current proccess id getter.
/// @return USER_PROCESS ID integer.
ErrorOr<ProcessID> UserProcessHelper::TheCurrentPID() {
- if (!UserProcessScheduler::The().TheCurrentProcess()) return ErrorOr<ProcessID>{-kErrorProcessFault};
+ if (!UserProcessScheduler::The().TheCurrentProcess())
+ return ErrorOr<ProcessID>{-kErrorProcessFault};
kout << "UserProcessHelper::TheCurrentPID: Leaking ProcessId...\r";
return ErrorOr<ProcessID>{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;
}
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);
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}