From 4ed658c633ce5d7c5bde4acdbe322e5f51592369 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 25 Dec 2024 14:04:14 +0100 Subject: IMPL: Important refactors and improvements of ZkaOS. Signed-off-by: Amlal El Mahrouss --- dev/Kernel/NewKit/DriverMgr.h | 19 +++++++++++ dev/Kernel/NewKit/KString.h | 2 +- dev/Kernel/NewKit/KernelPanic.h | 71 +++++++++++++++++++++++++++++++++++++++++ dev/Kernel/NewKit/New.h | 4 ++- dev/Kernel/NewKit/NewKit.h | 2 +- dev/Kernel/NewKit/OwnPtr.h | 2 +- dev/Kernel/NewKit/Ref.h | 2 +- dev/Kernel/NewKit/Stop.h | 71 ----------------------------------------- dev/Kernel/NewKit/SwapMgr.h | 21 ++++++++++++ dev/Kernel/NewKit/ThreadMgr.h | 20 ++++++++++++ 10 files changed, 138 insertions(+), 76 deletions(-) create mode 100644 dev/Kernel/NewKit/DriverMgr.h create mode 100644 dev/Kernel/NewKit/KernelPanic.h delete mode 100644 dev/Kernel/NewKit/Stop.h create mode 100644 dev/Kernel/NewKit/SwapMgr.h create mode 100644 dev/Kernel/NewKit/ThreadMgr.h (limited to 'dev/Kernel/NewKit') diff --git a/dev/Kernel/NewKit/DriverMgr.h b/dev/Kernel/NewKit/DriverMgr.h new file mode 100644 index 00000000..a23ce4f2 --- /dev/null +++ b/dev/Kernel/NewKit/DriverMgr.h @@ -0,0 +1,19 @@ + +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +/// @file DriverMgr.h +/// @brief Driver loader manager. + +namespace Kernel +{ + class UserDriver; + class KernelDriver; +} \ No newline at end of file diff --git a/dev/Kernel/NewKit/KString.h b/dev/Kernel/NewKit/KString.h index a7020a10..9ea2f0e4 100644 --- a/dev/Kernel/NewKit/KString.h +++ b/dev/Kernel/NewKit/KString.h @@ -10,7 +10,7 @@ #include #include #include -#include +#include #define cMinimumStringSize 8196 diff --git a/dev/Kernel/NewKit/KernelPanic.h b/dev/Kernel/NewKit/KernelPanic.h new file mode 100644 index 00000000..7fc2ab30 --- /dev/null +++ b/dev/Kernel/NewKit/KernelPanic.h @@ -0,0 +1,71 @@ + +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +namespace Kernel +{ + void ke_runtime_check(bool bExpression, const Char* file, const Char* line); +} + +#define MUST_PASS_COMPILER(EXPR, MSG) static_assert(EXPR, MSG) + +#define __MUST_PASS(EXPR, FILE, LINE) \ + Kernel::ke_runtime_check(EXPR, FILE, STRINGIFY(LINE)) + +#ifdef __DEBUG__ +#define MUST_PASS(EXPR) __MUST_PASS((EXPR), __FILE__, __LINE__) +#define assert(EXPR) MUST_PASS(EXPR, RUNTIME_CHECK_EXPRESSION) +#else +#define MUST_PASS(EXPR) (Kernel::Void)(EXPR) +#define assert(EXPR) (Kernel::Void)(EXPR) +#endif + +enum RUNTIME_CHECK +{ + RUNTIME_CHECK_FAILED = -1, + RUNTIME_CHECK_POINTER = 0, + RUNTIME_CHECK_EXPRESSION, + RUNTIME_CHECK_FILE, + RUNTIME_CHECK_IPC, + RUNTIME_CHECK_TLS, + RUNTIME_CHECK_HANDSHAKE, + RUNTIME_CHECK_ACPI, + RUNTIME_CHECK_INVALID_PRIVILEGE, + RUNTIME_CHECK_PROCESS, + RUNTIME_CHECK_BAD_BEHAVIOR, + RUNTIME_CHECK_BOOTSTRAP, + RUNTIME_CHECK_UNEXCPECTED, + RUNTIME_CHECK_FILESYSTEM, + RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM, + RUNTIME_CHECK_PAGE, + RUNTIME_CHECK_COUNT, +}; + +namespace Kernel +{ + /// @brief Dumping factory class. + class RecoveryFactory final + { + public: + STATIC Void Recover() noexcept; + }; + + void ke_panic(const Int32& id); +} // namespace Kernel + +#ifdef TRY +#undef TRY +#endif + +#define TRY(FN) \ + if (!FN()) \ + { \ + MUST_PASS(false); \ + } diff --git a/dev/Kernel/NewKit/New.h b/dev/Kernel/NewKit/New.h index eb6c33e4..8ee33232 100644 --- a/dev/Kernel/NewKit/New.h +++ b/dev/Kernel/NewKit/New.h @@ -4,11 +4,13 @@ Copyright (C) 2024, Theater Quality Inc, all rights reserved. ------------------------------------------- */ + #pragma once #include -typedef __SIZE_TYPE__ size_t; // gcc will complain about that +/// @note compatible with tk too. +typedef __SIZE_TYPE__ size_t; void* operator new(size_t ptr); void* operator new[](size_t ptr); diff --git a/dev/Kernel/NewKit/NewKit.h b/dev/Kernel/NewKit/NewKit.h index e17c3465..e32e96b4 100644 --- a/dev/Kernel/NewKit/NewKit.h +++ b/dev/Kernel/NewKit/NewKit.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/dev/Kernel/NewKit/OwnPtr.h b/dev/Kernel/NewKit/OwnPtr.h index 36d1cdea..4f1cec7a 100644 --- a/dev/Kernel/NewKit/OwnPtr.h +++ b/dev/Kernel/NewKit/OwnPtr.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include #include namespace Kernel diff --git a/dev/Kernel/NewKit/Ref.h b/dev/Kernel/NewKit/Ref.h index 75500693..34b8891a 100644 --- a/dev/Kernel/NewKit/Ref.h +++ b/dev/Kernel/NewKit/Ref.h @@ -9,7 +9,7 @@ #define _NEWKIT_REF_H_ #include -#include +#include #include namespace Kernel diff --git a/dev/Kernel/NewKit/Stop.h b/dev/Kernel/NewKit/Stop.h deleted file mode 100644 index 0d7bf27b..00000000 --- a/dev/Kernel/NewKit/Stop.h +++ /dev/null @@ -1,71 +0,0 @@ - -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include - -namespace Kernel -{ - void ke_runtime_check(bool bExpression, const Char* file, const Char* line); -} - -#define MUST_PASS_COMPILER(EXPR, MSG) static_assert(EXPR, MSG) - -#define __MUST_PASS(EXPR, FILE, LINE) \ - Kernel::ke_runtime_check(EXPR, FILE, STRINGIFY(LINE)) - -#ifdef __DEBUG__ -#define MUST_PASS(EXPR) __MUST_PASS((EXPR), __FILE__, __LINE__) -#define assert(EXPR) MUST_PASS(EXPR, RUNTIME_CHECK_EXPRESSION) -#else -#define MUST_PASS(EXPR) (Kernel::Void)(EXPR) -#define assert(EXPR) (Kernel::Void)(EXPR) -#endif - -enum RUNTIME_CHECK -{ - RUNTIME_CHECK_FAILED = -1, - RUNTIME_CHECK_POINTER = 0, - RUNTIME_CHECK_EXPRESSION, - RUNTIME_CHECK_FILE, - RUNTIME_CHECK_IPC, - RUNTIME_CHECK_TLS, - RUNTIME_CHECK_HANDSHAKE, - RUNTIME_CHECK_ACPI, - RUNTIME_CHECK_INVALID_PRIVILEGE, - RUNTIME_CHECK_PROCESS, - RUNTIME_CHECK_BAD_BEHAVIOR, - RUNTIME_CHECK_BOOTSTRAP, - RUNTIME_CHECK_UNEXCPECTED, - RUNTIME_CHECK_FILESYSTEM, - RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM, - RUNTIME_CHECK_PAGE, - RUNTIME_CHECK_COUNT, -}; - -namespace Kernel -{ - /// @brief Dumping factory class. - class RecoveryFactory final - { - public: - STATIC Void Recover() noexcept; - }; - - void ke_stop(const Int32& id); -} // namespace Kernel - -#ifdef TRY -#undef TRY -#endif - -#define TRY(FN) \ - if (!FN()) \ - { \ - MUST_PASS(false); \ - } diff --git a/dev/Kernel/NewKit/SwapMgr.h b/dev/Kernel/NewKit/SwapMgr.h new file mode 100644 index 00000000..822a1565 --- /dev/null +++ b/dev/Kernel/NewKit/SwapMgr.h @@ -0,0 +1,21 @@ + +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +#define kSwapMgrBlockMaxSize mib_cast(16) +#define KSwapMgrBlockMagic "SWEP " + +/// @file SwapMgr.h +/// @brief Virtual memory swap API. + +namespace Kernel +{ + class UserSwapProcess; +} \ No newline at end of file diff --git a/dev/Kernel/NewKit/ThreadMgr.h b/dev/Kernel/NewKit/ThreadMgr.h new file mode 100644 index 00000000..8148c28d --- /dev/null +++ b/dev/Kernel/NewKit/ThreadMgr.h @@ -0,0 +1,20 @@ + +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +/// @file ThreadMgr.h +/// @brief This file takes care of creating processes/threads from a subsystem context. + +namespace Kernel +{ + class UserSubsystem; + class UserEnvVar; + class UserEnv; +} \ No newline at end of file -- cgit v1.2.3