diff options
| author | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-11 20:59:22 +0100 |
|---|---|---|
| committer | amlal <amlal@el-mahrouss-logic.com> | 2024-03-11 21:05:13 +0100 |
| commit | ba8ddb24e0ac6c7b1a617519a4bde9970610fbcc (patch) | |
| tree | c741ec82a267e44e2a362399ed20439184504ace | |
| parent | 5468ca71a59c9e24c1d392554e8f97f0c1705394 (diff) | |
Kernel: Important changes, needs to be merged to master.
- Add Logon executive.
- Adding HCore System Call Interface (inside System.Core.dll)
- Add _InOut and _StrictInOut inside HintKit.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
Signed-off-by: amlal <amlal@el-mahrouss-logic.com>
28 files changed, 108 insertions, 67 deletions
diff --git a/Public/Kits/GPUKit/.gitkeep b/Private/Executives/Logon/.gitkeep index e69de29b..e69de29b 100644 --- a/Public/Kits/GPUKit/.gitkeep +++ b/Private/Executives/Logon/.gitkeep diff --git a/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp b/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp index 5fe39225..a86499e1 100644 --- a/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp +++ b/Private/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp @@ -5,7 +5,7 @@ ------------------------------------------- */ #include <ArchKit/ArchKit.hpp> -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #include <NewKit/String.hpp> EXTERN_C void idt_handle_gpf(HCore::UIntPtr rsp) { diff --git a/Private/HALKit/AMD64/HalKernelMain.cxx b/Private/HALKit/AMD64/HalKernelMain.cxx index 6716a989..24f03ce9 100644 --- a/Private/HALKit/AMD64/HalKernelMain.cxx +++ b/Private/HALKit/AMD64/HalKernelMain.cxx @@ -14,7 +14,7 @@ #include <NewKit/Json.hpp> #include <NewKit/KernelHeap.hpp> #include <NewKit/UserHeap.hpp> -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #include <KernelKit/Rsrc/Splash.rsrc> ///! @brief Disk contains HCore files. diff --git a/Private/HALKit/AMD64/HalSMPCore.cxx b/Private/HALKit/AMD64/HalSMPCore.cxx index a72d6bfe..87bfae3b 100644 --- a/Private/HALKit/AMD64/HalSMPCore.cxx +++ b/Private/HALKit/AMD64/HalSMPCore.cxx @@ -4,10 +4,10 @@ ------------------------------------------- */ -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> using namespace HCore; -Void Process::AssignStart(UIntPtr &imageStart) noexcept { +Void Process::SetStart(UIntPtr &imageStart) noexcept { if (imageStart == 0) this->Crash(); this->StackFrame->Rbp = imageStart; diff --git a/Private/HintKit/CompilerHint.hxx b/Private/HintKit/CompilerHint.hxx index e74f349a..a624a080 100644 --- a/Private/HintKit/CompilerHint.hxx +++ b/Private/HintKit/CompilerHint.hxx @@ -18,4 +18,7 @@ #define _StrictCheckInput #define _StrictCheckOutput +#define _InOut +#define _StrictInOut + #endif // ifndef __HINTKIT_COMPILER_HINT_HXX__ diff --git a/Private/KernelKit/HError.hpp b/Private/KernelKit/HError.hpp index 1b971e94..41bfaf3d 100644 --- a/Private/KernelKit/HError.hpp +++ b/Private/KernelKit/HError.hpp @@ -7,6 +7,7 @@ #pragma once #include <NewKit/Defines.hpp> +#include <NewKit/ErrorID.hpp> namespace HCore { typedef Int32 HError; @@ -25,6 +26,8 @@ inline constexpr HError kErrorMath = 42; inline constexpr HError kErrorNoNetwork = 43; inline constexpr HError kErrorHeapOutOfMemory = 44; inline constexpr HError kErrorNoSuchDisk = 45; +inline constexpr HError kErrorFileExists = 46; +inline constexpr HError kErrorUnimplemented = 0; Boolean ke_bug_check(void) noexcept; } // namespace HCore diff --git a/Private/KernelKit/ProcessManager.hpp b/Private/KernelKit/ProcessScheduler.hpp index c7c69093..e69d2fcf 100644 --- a/Private/KernelKit/ProcessManager.hpp +++ b/Private/KernelKit/ProcessScheduler.hpp @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef __PROCESS_MANAGER__ -#define __PROCESS_MANAGER__ +#ifndef __PROCESS_SCHEDULER__ +#define __PROCESS_SCHEDULER__ #include <ArchKit/ArchKit.hpp> #include <KernelKit/FileManager.hpp> @@ -121,7 +121,7 @@ class Process final { HCORE_COPY_DEFAULT(Process) public: - void AssignStart(UIntPtr &imageStart) noexcept; + void SetStart(UIntPtr &imageStart) noexcept; public: Char Name[kProcessLen] = {"Process"}; @@ -168,13 +168,14 @@ class Process final { //! @brief TLS Free. Boolean Delete(VoidPtr ptr, const SizeT &sz); - //! @brief Process name getter, example: "C RunTime" - const Char *GetName(); - //! @brief Wakes up threads. void Wake(const bool wakeup = false); + // Process getters. public: + //! @brief Process name getter, example: "C RunTime" + const Char *GetName(); + const ProcessSelector &GetSelector(); const ProcessStatus &GetStatus(); const AffinityKind &GetAffinity(); @@ -254,4 +255,4 @@ const Int32 &rt_get_exit_code() noexcept; //////////////////////////////////////////////////// -#endif /* ifndef __PROCESS_MANAGER__ */ +#endif /* ifndef __PROCESS_SCHEDULER__ */ diff --git a/Private/KernelKit/ProcessTeam.hpp b/Private/KernelKit/ProcessTeam.hpp index 31759ff6..b60a8a0d 100644 --- a/Private/KernelKit/ProcessTeam.hpp +++ b/Private/KernelKit/ProcessTeam.hpp @@ -6,4 +6,4 @@ #pragma once -#include <KernelKit/ProcessManager.hpp>
\ No newline at end of file +#include <KernelKit/ProcessScheduler.hpp>
\ No newline at end of file diff --git a/Private/KernelKit/ThreadLocalStorage.inl b/Private/KernelKit/ThreadLocalStorage.inl index a9bc04cc..a42c2381 100644 --- a/Private/KernelKit/ThreadLocalStorage.inl +++ b/Private/KernelKit/ThreadLocalStorage.inl @@ -7,7 +7,7 @@ //! @brief Allocates a pointer from the process's tls. #ifndef __PROCESS_MANAGER__ -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #endif template <typename T> diff --git a/Private/KernelKit/Timer.hpp b/Private/KernelKit/Timer.hpp index ef726b08..ddfac06a 100644 --- a/Private/KernelKit/Timer.hpp +++ b/Private/KernelKit/Timer.hpp @@ -20,7 +20,7 @@ class HardwareTimerInterface { public: /// @brief Default constructor - HardwareTimerInterface() = default; + explicit HardwareTimerInterface() = default; virtual ~HardwareTimerInterface() = default; public: diff --git a/Private/NewKit/ErrorID.hpp b/Private/NewKit/ErrorID.hpp index d0572e7e..b2cc65d1 100644 --- a/Private/NewKit/ErrorID.hpp +++ b/Private/NewKit/ErrorID.hpp @@ -6,15 +6,14 @@ #pragma once -/// @brief kernel errors. +/// @brief Internal kernel errors. #include <NewKit/ErrorOr.hpp> #include <NewKit/Defines.hpp> -#define H_EXEC_ERROR -30 -#define H_FILE_NOT_FOUND -31 -#define H_DIR_NOT_FOUND -32 -#define H_FILE_EXISTS -33 -#define H_TOO_LONG -34 -#define H_INVALID_DATA -35 -#define H_UNIMPLEMENTED -36 +#define H_EXEC_ERROR 33 +#define H_FILE_NOT_FOUND 35 +#define H_DIR_NOT_FOUND 36 +#define H_FILE_EXISTS 46 +#define H_UNIMPLEMENTED 0 +#define H_INVALID_DATA 1 diff --git a/Private/NewKit/KernelCheck.hpp b/Private/NewKit/KernelCheck.hpp index 7fd6dc2d..5eb81761 100644 --- a/Private/NewKit/KernelCheck.hpp +++ b/Private/NewKit/KernelCheck.hpp @@ -32,8 +32,8 @@ enum RUNTIME_CHECK { RUNTIME_CHECK_INVALID_PRIVILEGE, RUNTIME_CHECK_PROCESS, RUNTIME_CHECK_BAD_BEHAVIOR, - RUNTIME_CHECK_COUNT, RUNTIME_CHECK_BOOTSTRAP, + RUNTIME_CHECK_COUNT, }; namespace HCore { diff --git a/Private/NewKit/UserHeap.hpp b/Private/NewKit/UserHeap.hpp index 1bf1997f..d33ea612 100644 --- a/Private/NewKit/UserHeap.hpp +++ b/Private/NewKit/UserHeap.hpp @@ -14,20 +14,25 @@ #include <NewKit/Ref.hpp> // last-rev 5/11/23 -// file: pool.hpp -// description: memory pool for user programs. +// file: UserHeap.hpp +// description: memory heap for user programs. -#define kPoolMaxSz 4096 +#define kPoolMaxSz (4096) #define kPoolMag 0x5500A1 namespace HCore { -enum { +typedef enum { kPoolHypervisor = 0x2, kPoolShared = 0x4, kPoolUser = 0x6, kPoolRw = 0x8, -}; +} kPoolFlags; -VoidPtr ke_new_heap(Int32 flags); -Int32 ke_free_heap(voidPtr pointer); +/// @brief Allocate a process heap, no zero out is done here. +/// @param flags +/// @return The process's heap. +VoidPtr rt_new_heap(Int32 flags); + + +Int32 rt_free_heap(voidPtr pointer); } // namespace HCore diff --git a/Private/Source/PEFCodeManager.cxx b/Private/Source/PEFCodeManager.cxx index 572b90b3..4c599856 100644 --- a/Private/Source/PEFCodeManager.cxx +++ b/Private/Source/PEFCodeManager.cxx @@ -7,7 +7,7 @@ #include <KernelKit/DebugOutput.hpp> #include <KernelKit/FileManager.hpp> #include <KernelKit/PEFCodeManager.hxx> -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #include <NewKit/Defines.hpp> #include <NewKit/ErrorID.hpp> #include <NewKit/KernelCheck.hpp> diff --git a/Private/Source/PEFSharedObjectRT.cxx b/Private/Source/PEFSharedObjectRT.cxx index 2b12ab1c..2284451a 100644 --- a/Private/Source/PEFSharedObjectRT.cxx +++ b/Private/Source/PEFSharedObjectRT.cxx @@ -10,7 +10,7 @@ #include <KernelKit/DebugOutput.hpp> #include <KernelKit/PEF.hpp> #include <KernelKit/PEFSharedObject.hxx> -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #include <KernelKit/ThreadLocalStorage.hxx> #include <NewKit/Defines.hpp> diff --git a/Private/Source/ProcessManager.cxx b/Private/Source/ProcessScheduler.cxx index f1c1ad27..a4f8dd2f 100644 --- a/Private/Source/ProcessManager.cxx +++ b/Private/Source/ProcessScheduler.cxx @@ -9,11 +9,10 @@ /// @brief Process Scheduler API. /***********************************************************************************/ -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #include <KernelKit/SMPManager.hpp> #include <NewKit/KernelHeap.hpp> #include <NewKit/String.hpp> -#include <KernelKit/HError.hpp> ///! bugs = 0 @@ -126,7 +125,7 @@ void Process::Exit(Int32 exit_code) { kExitCode = exit_code; if (this->Ring != (Int32)ProcessSelector::kRingDriver) { - if (this->HeapPtr) ke_free_heap(this->HeapPtr); + if (this->HeapPtr) rt_free_heap(this->HeapPtr); this->HeapPtr = nullptr; this->HeapCursor = nullptr; @@ -152,7 +151,7 @@ SizeT ProcessManager::Add(Ref<Process> &process) { kcout << "ProcessManager::Add(Ref<Process>& process)\r\n"; - process.Leak().HeapPtr = ke_new_heap(kPoolUser | kPoolRw); + process.Leak().HeapPtr = rt_new_heap(kPoolUser | kPoolRw); process.Leak().ProcessId = mTeam.AsArray().Count(); process.Leak().HeapCursor = process.Leak().HeapPtr; @@ -163,7 +162,7 @@ SizeT ProcessManager::Add(Ref<Process> &process) { UIntPtr imageStart = reinterpret_cast<UIntPtr>(process.Leak().Image); - process.Leak().AssignStart(imageStart); + process.Leak().SetStart(imageStart); mTeam.AsArray().Add(process); diff --git a/Private/Source/SMPManager.cxx b/Private/Source/SMPManager.cxx index 799f2955..b95eb68d 100644 --- a/Private/Source/SMPManager.cxx +++ b/Private/Source/SMPManager.cxx @@ -5,7 +5,7 @@ ------------------------------------------- */ #include <ArchKit/ArchKit.hpp> -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #include <KernelKit/SMPManager.hpp> ///! BUGS: 0 diff --git a/Private/Source/Semaphore.cxx b/Private/Source/Semaphore.cxx index 32051802..75ebfc44 100644 --- a/Private/Source/Semaphore.cxx +++ b/Private/Source/Semaphore.cxx @@ -4,7 +4,7 @@ ------------------------------------------- */ -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #include <KernelKit/Semaphore.hpp> #include <KernelKit/Timer.hpp> diff --git a/Private/Source/ThreadLocalStorage.cxx b/Private/Source/ThreadLocalStorage.cxx index 60d02efd..48e4e0a9 100644 --- a/Private/Source/ThreadLocalStorage.cxx +++ b/Private/Source/ThreadLocalStorage.cxx @@ -7,7 +7,7 @@ * ======================================================== */ -#include <KernelKit/ProcessManager.hpp> +#include <KernelKit/ProcessScheduler.hpp> #include <KernelKit/ThreadLocalStorage.hxx> /// bugs 0 diff --git a/Private/Source/UserHeap.cxx b/Private/Source/UserHeap.cxx index b9015920..80d6571d 100644 --- a/Private/Source/UserHeap.cxx +++ b/Private/Source/UserHeap.cxx @@ -144,7 +144,7 @@ STATIC Boolean ke_check_and_free_heap(const SizeT& index, VoidPtr ptr) { /// @brief Creates a new pool pointer. /// @param flags the flags attached to it. /// @return a pool pointer with selected permissions. -VoidPtr ke_new_heap(Int32 flags) { +VoidPtr rt_new_heap(Int32 flags) { if (!HeapManager::IsEnabled()) return nullptr; if (HeapManager::Count() > kPoolMaxSz) return nullptr; @@ -173,7 +173,7 @@ VoidPtr ke_new_heap(Int32 flags) { /// @brief free a pool pointer. /// @param ptr The pool pointer to free. /// @return status code -Int32 ke_free_heap(VoidPtr ptr) { +Int32 rt_free_heap(VoidPtr ptr) { if (!HeapManager::IsEnabled()) return -1; if (ptr) { diff --git a/Public/Kits/System.Core/Containers/XIFF.hxx b/Public/Kits/System.Core/Containers/XIFF.hxx index 28c25bf9..dbfe5b04 100644 --- a/Public/Kits/System.Core/Containers/XIFF.hxx +++ b/Public/Kits/System.Core/Containers/XIFF.hxx @@ -31,6 +31,8 @@ struct PACKED XiffHeader final { DWORD f_SpecificFormatType; // format type. generic }; +typedef struct XiffHeader XiffHeader; + #define kXIFFContainerVideo "XVFF" #define kXIFFContainerAudio "XAFF" #define kXIFFContainerInstaller "XnFF" diff --git a/Public/Kits/System.Core/CoreAPI.hxx b/Public/Kits/System.Core/CoreAPI.hxx index 1cd48442..66d356d7 100644 --- a/Public/Kits/System.Core/CoreAPI.hxx +++ b/Public/Kits/System.Core/CoreAPI.hxx @@ -23,11 +23,16 @@ #define CA_CDECL __attribute__((cdecl)) #define CA_MSCALL __attribute__((ms_abi)) +#define CA_PASCALL CA_STDCALL + typedef __UINT8_TYPE__ BYTE; typedef __UINT16_TYPE__ WORD; typedef __UINT32_TYPE__ DWORD; typedef __UINT64_TYPE__ QWORD; +typedef void* PVOID; +typedef void VOID; + typedef __WCHAR_TYPE__ WCHAR; typedef WCHAR* PWCHAR; @@ -46,3 +51,6 @@ typedef WCHAR* PWCHAR; #ifdef __64x0__ # define _M_64000 5 #endif + +#define CA_STATIC static +#define CA_INLINE inline
\ No newline at end of file diff --git a/Public/Kits/System.Core/HCoreBase.hxx b/Public/Kits/System.Core/HCoreBase.hxx new file mode 100644 index 00000000..c8a3a99c --- /dev/null +++ b/Public/Kits/System.Core/HCoreBase.hxx @@ -0,0 +1,13 @@ +/** =========================================== + (C) Mahrouss Logic + ===========================================*/ + +#pragma once + +#include <System.Core/CoreAPI.hxx> + +typedef struct HcObject { + void(*Release)(void); + void(*Invoke)(void); + void(*QueryInterface)(void); +} *HcObjectPtr; diff --git a/Public/Kits/System.Core/HCoreHeap.hxx b/Public/Kits/System.Core/HCoreHeap.hxx new file mode 100644 index 00000000..88cbbeb7 --- /dev/null +++ b/Public/Kits/System.Core/HCoreHeap.hxx @@ -0,0 +1,13 @@ +/** =========================================== + (C) Mahrouss Logic + ===========================================*/ + +#pragma once + +#include <System.Core/HCoreBase.hxx> + +CA_EXTERN_C HcObjectPtr HcGetProcessHeap(void); +CA_EXTERN_C void* HcAllocateProcessHeap(HcObjectPtr refObj, long long int sz, int flags); +CA_EXTERN_C void HcFreeProcessHeap(HcObjectPtr refObj, void* ptr); +CA_EXTERN_C long long int HcProcessHeapSize(HcObjectPtr refObj, void* ptr); +CA_EXTERN_C long long int HcProcessHeapExists(HcObjectPtr refObj, void* ptr); diff --git a/Public/Kits/System.Core/HcHeapAPI.h b/Public/Kits/System.Core/HcHeapAPI.h deleted file mode 100644 index 20078ce7..00000000 --- a/Public/Kits/System.Core/HcHeapAPI.h +++ /dev/null @@ -1,23 +0,0 @@ -/** =========================================== - (C) Mahrouss Logic - ===========================================*/ - -#pragma once - -#ifdef __cplusplus -#define EXTERN_C extern "C" -#else -#define EXTERN_C extern -#endif // ifdef __cplusplus - -typedef struct HcObject { - void(*Release)(void); - void(*Invoke)(void); - void(*QueryInterface)(void); -} *HcObjectPtr; - -EXTERN_C HcObjectPtr HcGetProcessHeap(void); -EXTERN_C void* HcAllocateProcessHeap(HcObjectPtr refObj, long long int sz, int flags); -EXTERN_C void HcFreeProcessHeap(HcObjectPtr refObj, void* ptr); -EXTERN_C long long int HcProcessHeapSize(HcObjectPtr refObj, void* ptr); -EXTERN_C long long int HcProcessHeapExists(HcObjectPtr refObj, void* ptr);
\ No newline at end of file diff --git a/Public/Kits/System.Core/HeapAPI.cxx b/Public/Kits/System.Core/HeapAPI.cxx index f59e0b1b..2dc7338b 100644 --- a/Public/Kits/System.Core/HeapAPI.cxx +++ b/Public/Kits/System.Core/HeapAPI.cxx @@ -5,7 +5,7 @@ ------------------------------------------- */ #include <System.Core/HeapAPI.hxx> -#include <System.Core/HcHeapAPI.h> +#include <System.Core/hcore.h> using namespace HCore; @@ -24,7 +24,10 @@ HHeap* HHeap::Shared() noexcept { void HHeap::Delete(HHeapPtr me) noexcept { HcFreeProcessHeap(kObjectHeap, me); } -SizeT HHeap::Size(HHeapPtr me) noexcept { return HcProcessHeapSize(kObjectHeap, me); } +SizeT HHeap::Size(HHeapPtr me) noexcept { + CA_MUST_PASS(me); + return HcProcessHeapSize(kObjectHeap, me); +} HHeapPtr HHeap::New(const SizeT &sz, const Int32 flags) { SizeT _sz = sz; diff --git a/Public/Kits/System.Core/hcore.h b/Public/Kits/System.Core/hcore.h new file mode 100644 index 00000000..b368b997 --- /dev/null +++ b/Public/Kits/System.Core/hcore.h @@ -0,0 +1,15 @@ +/** =========================================== + (C) Mahrouss Logic + ===========================================*/ + +#pragma once + +/// Core API +#include <System.Core/HCoreBase.hxx> + +/// Process Heap API +#include <System.Core/HCoreHeap.hxx> + +/// File API & Device API. + +/// Process & Threading API
\ No newline at end of file diff --git a/Public/Kits/System.Grahpics.GPU/.gitkeep b/Public/Kits/System.Grahpics.GPU/.gitkeep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/Public/Kits/System.Grahpics.GPU/.gitkeep |
