From 2f921f57ec48cc8c98882d7150a08c354b60bb72 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 13 Jun 2024 09:41:32 +0200 Subject: MHR-31: initial commit. Signed-off-by: Amlal El Mahrouss --- Kernel/FSKit/NewFS.hxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Kernel/FSKit') diff --git a/Kernel/FSKit/NewFS.hxx b/Kernel/FSKit/NewFS.hxx index df4e7ea4..c400ff30 100644 --- a/Kernel/FSKit/NewFS.hxx +++ b/Kernel/FSKit/NewFS.hxx @@ -68,10 +68,10 @@ default. #define kNewFSCatalogKindDevice (9) #define kNewFSCatalogKindLock (10) -#define kNewFSSeparator '/' +#define kNewFSSeparator '\\' #define kNewFSUpDir ".." -#define kNewFSRoot "/" +#define kNewFSRoot "\\" #define kNewFSLF '\r' #define kNewFSEOF (-1) -- cgit v1.2.3 From a7091202dab1d4a3fcfa15ecb0f1f0b2c28d0957 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Fri, 14 Jun 2024 23:46:50 +0200 Subject: MHR-31: Working on SMP for ARM64, implementing HAL for ARM64 based Zeta machines. Signed-off-by: Amlal EL Mahrouss --- Kernel/FSKit/FAT32.hxx | 12 ++++++++++++ Kernel/FSKit/IndexableProperty.hxx | 3 ++- Kernel/HALKit/ARM64/Hart.hxx | 13 +++++++++++++ Kernel/HALKit/ARM64/MBCI/.keepme | 0 Kernel/HALKit/POWER/Hart.hxx | 6 ++++++ Kernel/HALKit/RISCV/Hart.hxx | 6 ++++++ 6 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 Kernel/FSKit/FAT32.hxx create mode 100644 Kernel/HALKit/ARM64/MBCI/.keepme (limited to 'Kernel/FSKit') diff --git a/Kernel/FSKit/FAT32.hxx b/Kernel/FSKit/FAT32.hxx new file mode 100644 index 00000000..4aa0fc2b --- /dev/null +++ b/Kernel/FSKit/FAT32.hxx @@ -0,0 +1,12 @@ +/* ------------------------------------------- + + Copyright Zeta Electronics Corporation + +------------------------------------------- */ + +#pragma once + +#include + +/// @file FAT32.hxx +/// @brief FAT32 support. \ No newline at end of file diff --git a/Kernel/FSKit/IndexableProperty.hxx b/Kernel/FSKit/IndexableProperty.hxx index ef742a8e..91b90903 100644 --- a/Kernel/FSKit/IndexableProperty.hxx +++ b/Kernel/FSKit/IndexableProperty.hxx @@ -28,9 +28,10 @@ namespace NewOS { public: explicit IndexableProperty() - : Property(StringBuilder::Construct("IndexableProperty").Leak().Leak()) + : Property(StringBuilder::Construct("Indexable").Leak().Leak()) { } + ~IndexableProperty() override = default; NEWOS_COPY_DEFAULT(IndexableProperty); diff --git a/Kernel/HALKit/ARM64/Hart.hxx b/Kernel/HALKit/ARM64/Hart.hxx index 0146ad8c..bc35c3f5 100644 --- a/Kernel/HALKit/ARM64/Hart.hxx +++ b/Kernel/HALKit/ARM64/Hart.hxx @@ -5,3 +5,16 @@ ------------------------------------------- */ #pragma once + +#include + +/// @file HALKit\ARM64\Hart.hxx +/// @brief ARM64 hardware thread concept. + +typedef NewOS::Int32 Arm64HartType; + +/// @brief Set PC to specific hart. +/// @param hart the hart +/// @param epc the pc. +/// @return +EXTERN_C NewOS::Void hal_switch_to_hart(Arm64HartType hart, NewOS::VoidPtr epc); \ No newline at end of file diff --git a/Kernel/HALKit/ARM64/MBCI/.keepme b/Kernel/HALKit/ARM64/MBCI/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/Kernel/HALKit/POWER/Hart.hxx b/Kernel/HALKit/POWER/Hart.hxx index 4e4a281b..10066048 100644 --- a/Kernel/HALKit/POWER/Hart.hxx +++ b/Kernel/HALKit/POWER/Hart.hxx @@ -26,3 +26,9 @@ typedef struct HalHardwareThread NewOS::UInt32 fPageFlags; PPCHartType fIdentNumber; } HalHardwareThread; + +/// @brief Set PC to specific hart. +/// @param hart the hart +/// @param epc the pc. +/// @return +EXTERN_C NewOS::Void hal_switch_to_hart(HalHardwareThread* hart, NewOS::VoidPtr epc); \ No newline at end of file diff --git a/Kernel/HALKit/RISCV/Hart.hxx b/Kernel/HALKit/RISCV/Hart.hxx index 17ec84a1..ba56b7c9 100644 --- a/Kernel/HALKit/RISCV/Hart.hxx +++ b/Kernel/HALKit/RISCV/Hart.hxx @@ -16,3 +16,9 @@ #include typedef NewOS::Int32 Rv64HartType; + +/// @brief Set PC to specific hart. +/// @param hart the hart +/// @param epc the pc. +/// @return +EXTERN_C NewOS::Void hal_switch_to_hart(Rv64HartType hart, NewOS::VoidPtr epc); \ No newline at end of file -- cgit v1.2.3 From f05b598a1c1a8ca4f1bf0acca078f9c9e3c07991 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Sat, 15 Jun 2024 13:49:07 +0200 Subject: kernel: include assembly files as well in project. Signed-off-by: Amlal EL Mahrouss --- Kernel/CFKit/Property.hpp | 20 +++++++++----------- Kernel/FSKit/IndexableProperty.hxx | 5 +++-- Kernel/KernelKit/ProcessScheduler.hxx | 2 +- Kernel/Sources/IndexableProperty.cxx | 12 +++++++----- Kernel/Sources/KeMain.cxx | 10 +++++----- Kernel/Sources/ProcessScheduler.cxx | 8 ++------ Kernel/Sources/Property.cxx | 8 ++++++++ newoskrnl.10x | 2 +- 8 files changed, 36 insertions(+), 31 deletions(-) (limited to 'Kernel/FSKit') diff --git a/Kernel/CFKit/Property.hpp b/Kernel/CFKit/Property.hpp index 7667194f..5c5aeb8f 100644 --- a/Kernel/CFKit/Property.hpp +++ b/Kernel/CFKit/Property.hpp @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef _INC_PLIST_HPP__ -#define _INC_PLIST_HPP__ +#ifndef __INC_PLIST_HPP__ +#define __INC_PLIST_HPP__ #include #include @@ -14,18 +14,16 @@ namespace NewOS { - using PropertyId = Int; + /// @brief handle to anything (number, ptr, string...) + using PropertyId = UIntPtr; /// @brief Kernel property class. + /// @example \Properties\SmpCores or \Properties\KernelVersion class Property { public: - explicit Property(const StringView& sw) - : fName(sw) - { - } - - virtual ~Property() = default; + explicit Property(const StringView& sw); + virtual ~Property(); public: Property& operator=(const Property&) = default; @@ -39,8 +37,8 @@ namespace NewOS PropertyId fAction; }; - template + template using PropertyArray = Array; } // namespace NewOS -#endif // !_INC_PLIST_HPP__ +#endif // !__INC_PLIST_HPP__ diff --git a/Kernel/FSKit/IndexableProperty.hxx b/Kernel/FSKit/IndexableProperty.hxx index 91b90903..892083a2 100644 --- a/Kernel/FSKit/IndexableProperty.hxx +++ b/Kernel/FSKit/IndexableProperty.hxx @@ -24,11 +24,12 @@ namespace NewOS Char Path[kIndexerNodeNameLength]; }; + class IndexableProperty final : public Property { public: explicit IndexableProperty() - : Property(StringBuilder::Construct("Indexable").Leak().Leak()) + : Property(StringBuilder::Construct("\\Filesystem\\IsIndexable?").Leak().Leak()) { } @@ -37,7 +38,7 @@ namespace NewOS NEWOS_COPY_DEFAULT(IndexableProperty); public: - IndexProperty& LeakProperty() noexcept; + IndexProperty& Leak() noexcept; public: void AddFlag(Int16 flag); diff --git a/Kernel/KernelKit/ProcessScheduler.hxx b/Kernel/KernelKit/ProcessScheduler.hxx index 637fc8c4..f49292f1 100644 --- a/Kernel/KernelKit/ProcessScheduler.hxx +++ b/Kernel/KernelKit/ProcessScheduler.hxx @@ -269,7 +269,7 @@ namespace NewOS static bool Switch(HAL::StackFrame* newStack, const PID& newPid); static bool CanBeScheduled(Ref& process); static PID& GetCurrentPID(); - static bool StartScheduling(); + static SizeT StartScheduling(); }; const Int32& rt_get_exit_code() noexcept; diff --git a/Kernel/Sources/IndexableProperty.cxx b/Kernel/Sources/IndexableProperty.cxx index a687e0ec..457e2c53 100644 --- a/Kernel/Sources/IndexableProperty.cxx +++ b/Kernel/Sources/IndexableProperty.cxx @@ -20,19 +20,21 @@ namespace NewOS { namespace Indexer { - IndexProperty& IndexableProperty::LeakProperty() noexcept + IndexProperty& IndexableProperty::Leak() noexcept { return fIndex; } - void IndexableProperty::AddFlag(Int16 flag) + Void IndexableProperty::AddFlag(Int16 flag) { fFlags |= flag; } - void IndexableProperty::RemoveFlag(Int16 flag) + + Void IndexableProperty::RemoveFlag(Int16 flag) { fFlags &= flag; } + Int16 IndexableProperty::HasFlag(Int16 flag) { return fFlags & flag; @@ -48,9 +50,9 @@ namespace NewOS if (!indexer.HasFlag(kIndexerClaimed)) { indexer.AddFlag(kIndexerClaimed); - rt_copy_memory((VoidPtr)indexer.LeakProperty().Path, (VoidPtr)filename, filenameLen); + rt_copy_memory((VoidPtr)indexer.Leak().Path, (VoidPtr)filename, filenameLen); - kcout << "newoskrnl: FSKit: index new file: " << filename << endl; + kcout << "newoskrnl: filesystem: index new file: " << filename << endl; } } } // namespace Indexer diff --git a/Kernel/Sources/KeMain.cxx b/Kernel/Sources/KeMain.cxx index 23e32c1d..e1b347b8 100644 --- a/Kernel/Sources/KeMain.cxx +++ b/Kernel/Sources/KeMain.cxx @@ -182,9 +182,9 @@ namespace NewOS::Detail /// @brief System loader entrypoint. /// @param void no parameters. /// @return void no return value. - STATIC NewOS::Void SystemLauncher_Main(NewOS::Void) + STATIC NewOS::Void ke_launch_srv(NewOS::Void) { - NewOS::PEFLoader lockScreen("\\System\\LockScreen"); + NewOS::PEFLoader lockScreen("\\System\\securesrv.exe"); if (!lockScreen.IsLoaded()) { @@ -194,7 +194,7 @@ namespace NewOS::Detail NewOS::Utils::execute_from_image(lockScreen, NewOS::ProcessHeader::kAppKind); - NewOS::PEFLoader stageBoard("\\System\\StageBoard"); + NewOS::PEFLoader stageBoard("\\System\\uisrv.exe"); if (!stageBoard.IsLoaded()) { @@ -212,9 +212,9 @@ namespace NewOS::Detail EXTERN_C NewOS::Void KeMain(NewOS::Void) { /// Now run kernel loop, until no process are running. - NewOS::Detail::FilesystemWizard wizard; // automatic. + NewOS::Detail::FilesystemWizard wizard; // automatic filesystem creation. - NewOS::Detail::SystemLauncher_Main(); + NewOS::Detail::ke_launch_srv(); // fetch system cores. NewOS::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_RsdPtr); diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx index dc273cf6..d232c72e 100644 --- a/Kernel/Sources/ProcessScheduler.cxx +++ b/Kernel/Sources/ProcessScheduler.cxx @@ -329,16 +329,12 @@ namespace NewOS * @brief Spin scheduler class. */ - bool ProcessHelper::StartScheduling() + SizeT ProcessHelper::StartScheduling() { auto& process_ref = ProcessScheduler::The().Leak(); SizeT ret = process_ref.Run(); - kcout << "newoskrnl: Iterated over: "; - kcout.Number(ret); - kcout << " processes.\r"; - - return true; + return ret; } /** diff --git a/Kernel/Sources/Property.cxx b/Kernel/Sources/Property.cxx index dca34429..b58de469 100644 --- a/Kernel/Sources/Property.cxx +++ b/Kernel/Sources/Property.cxx @@ -8,6 +8,14 @@ namespace NewOS { + Property::Property(const StringView& sw) + : fName(sw) + { + kcout << "Property: created: " << sw.CData() << endl; + } + + Property::~Property() = default; + bool Property::StringEquals(StringView& name) { return fName && this->fName == name; diff --git a/newoskrnl.10x b/newoskrnl.10x index d232f112..4d9241c7 100644 --- a/newoskrnl.10x +++ b/newoskrnl.10x @@ -1,7 +1,7 @@ - *.c,*.cc,*.cpp,*.c++,*.cp,*.cxx,*.h,*.hh,*.hpp,*.h++,*.hp,*.hxx,*.inl,*.cs,*.rs,*.java,*.jav,*.js,*.jsc,*.jsx,*.json,*.cls,*.py,*.rpy,*.php,*.php3,*.phl,*.phtml,*.rhtml,*.tpl,*.phps,*.lua,*.html,*.html5,*.htm,*.xml,*.xaml,*.css,*.ssi,*.haml,*.yaml,*.bat,*.wbf,*.wbt,*.txt,*.cmake,*.make,*.makefile,*.mak,*.mk,*.sh,*.bash,*.csv,*.asp,*.pl,*.mac,*.ws,*.vbs,*.perl,*.src,*.rss,*.inc,*.f,*.go,*.prl,*.plx,*.rb,*.lsp,*.lpx,*.ps1,*.command,*.cbl,*.cob,*.qs,*.wxs,*.ph,*.msc,*.glsl,*.hlsl,*.fx,*.vert,*.tesc,*.tese,*.geom,*.frag,*.comp,*.pssl,*.scons,*.cu,*.jai, + *.s,*.asm,*.S,*.c,*.cc,*.cpp,*.c++,*.cp,*.cxx,*.h,*.hh,*.hpp,*.h++,*.hp,*.hxx,*.inl,*.cs,*.rs,*.java,*.jav,*.js,*.jsc,*.jsx,*.json,*.cls,*.py,*.rpy,*.php,*.php3,*.phl,*.phtml,*.rhtml,*.tpl,*.phps,*.lua,*.html,*.html5,*.htm,*.xml,*.xaml,*.css,*.ssi,*.haml,*.yaml,*.bat,*.wbf,*.wbt,*.txt,*.cmake,*.make,*.makefile,*.mak,*.mk,*.sh,*.bash,*.csv,*.asp,*.pl,*.mac,*.ws,*.vbs,*.perl,*.src,*.rss,*.inc,*.f,*.go,*.prl,*.plx,*.rb,*.lsp,*.lpx,*.ps1,*.command,*.cbl,*.cob,*.qs,*.wxs,*.ph,*.msc,*.glsl,*.hlsl,*.fx,*.vert,*.tesc,*.tese,*.geom,*.frag,*.comp,*.pssl,*.scons,*.cu,*.jai, true true -- cgit v1.2.3