From 81144dd05a7c01701c3bf7b04e345dccfef2bf82 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 5 Feb 2024 11:12:42 +0100 Subject: HCR-11: Kernel: Improvements and more. Bootloader: Now works on real hardware (previous commit.) Signed-off-by: Amlal El Mahrouss --- Private/KernelKit/FileManager.hpp | 12 +++++++++--- Private/KernelKit/PEF.hpp | 4 ++-- Private/KernelKit/SMPManager.hpp | 8 +++++++- Private/KernelKit/ThreadLocalStorage.hxx | 12 ++++++------ 4 files changed, 24 insertions(+), 12 deletions(-) (limited to 'Private/KernelKit') diff --git a/Private/KernelKit/FileManager.hpp b/Private/KernelKit/FileManager.hpp index a52daa7d..d31cdf68 100644 --- a/Private/KernelKit/FileManager.hpp +++ b/Private/KernelKit/FileManager.hpp @@ -162,7 +162,7 @@ class NewFilesystemManager final : public IFilesystemManager { template class FileStream final { public: - explicit FileStream(const Encoding *path); + explicit FileStream(const Encoding *path, const Encoding *restrict_type); ~FileStream(); public: @@ -224,12 +224,18 @@ class FileStream final { const Char *fMime{"application-type/*"}; }; +#define kRestrictRW "r+" +#define kRestrictRWB "r+b" +#define kRestrictR "r" +#define kRestrictRB "rb" + using FileStreamUTF8 = FileStream; using FileStreamUTF16 = FileStream; template -FileStream::FileStream(const Encoding *path) - : fFile(Class::GetMounted()->Open(path, "r+")) {} +FileStream::FileStream(const Encoding *path, + const Encoding *restrict_type) + : fFile(Class::GetMounted()->Open(path, restrict_type)) {} template FileStream::~FileStream() = default; diff --git a/Private/KernelKit/PEF.hpp b/Private/KernelKit/PEF.hpp index 1add45f8..2ffc057f 100644 --- a/Private/KernelKit/PEF.hpp +++ b/Private/KernelKit/PEF.hpp @@ -37,8 +37,8 @@ enum { kPefArchIntel86S, kPefArchAMD64, kPefArchRISCV, - kPefArch64x0, /* 64x000. */ - kPefArch32x0, + kPefArch64x0, /* 64x0. ISA */ + kPefArch32x0, /* 32x0. ISA */ kPefArchCount = (kPefArch32x0 - kPefArchIntel86S) + 1, kPefArchInvalid = 0xFF, }; diff --git a/Private/KernelKit/SMPManager.hpp b/Private/KernelKit/SMPManager.hpp index 0a71a165..8cbe3259 100644 --- a/Private/KernelKit/SMPManager.hpp +++ b/Private/KernelKit/SMPManager.hpp @@ -14,6 +14,8 @@ #include #include +#include "NewKit/Defines.hpp" + #define kMaxHarts 8 namespace HCore { @@ -25,6 +27,8 @@ enum ThreadKind { kFallback, // fallback thread, cannot be used by user if not clear or used by // kernel. kBoot, // The core we booted from, the mama. + kInvalidThread, + kThreadCount, }; /// @@ -100,7 +104,9 @@ class SMPManager final { private: Array m_ThreadList; - ThreadID m_CurrentThread; + ThreadID m_CurrentThread{0}; + SizeT m_UsedThreads{0}; + SizeT m_MaxThreads{0}; }; // @brief wakes up thread. diff --git a/Private/KernelKit/ThreadLocalStorage.hxx b/Private/KernelKit/ThreadLocalStorage.hxx index 5db78ca3..e7c55ee7 100644 --- a/Private/KernelKit/ThreadLocalStorage.hxx +++ b/Private/KernelKit/ThreadLocalStorage.hxx @@ -27,16 +27,16 @@ bool hcore_tls_delete_ptr(T *ptr); template T *hcore_tls_new_class(Args &&...args); -typedef char rt_cookie_type[3]; +typedef HCore::Char rt_cookie_type[3]; /// @brief Thread Information Block for Local Storage. /// Located in GS on AMD64, Virtual Address 0x10000 (64x0, 32x0, ARM64) struct ThreadInformationBlock final { - HCore::Char Name[255]; // Module Name - HCore::UIntPtr StartCode; // Start Address - HCore::UIntPtr StartData; // Allocation Heap - HCore::UIntPtr StartStack; // Stack Pointer. - HCore::Int32 Arch; // Architecture and/or platform. + HCore::Char Name[kNameLen]; // Module Name + HCore::UIntPtr StartCode; // Start Address + HCore::UIntPtr StartData; // Allocation Heap + HCore::UIntPtr StartStack; // Stack Pointer. + HCore::Int32 Arch; // Architecture and/or platform. rt_cookie_type Cookie; // Not shown in public header, this is the way we tell // something went wrong. }; -- cgit v1.2.3