diff options
| author | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-20 14:47:08 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-20 14:47:08 +0100 |
| commit | 4ba02280f19b8a2beb1ad8445be7df6b7f9e1805 (patch) | |
| tree | 4928e93b6463dcce6e0d74120882a6ec572bae5c /Private/NewKit | |
| parent | 055a896406af227e03708fa20a728259cace704a (diff) | |
kernel: Reworking kernel to support virtual memory.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'Private/NewKit')
| -rw-r--r-- | Private/NewKit/Defines.hpp | 4 | ||||
| -rw-r--r-- | Private/NewKit/KernelHeap.hpp | 20 | ||||
| -rw-r--r-- | Private/NewKit/LockDelegate.hpp | 64 | ||||
| -rw-r--r-- | Private/NewKit/New.hpp | 2 | ||||
| -rw-r--r-- | Private/NewKit/NewKit.hpp | 4 | ||||
| -rw-r--r-- | Private/NewKit/PageManager.hpp | 4 | ||||
| -rw-r--r-- | Private/NewKit/Pmm.hpp | 15 | ||||
| -rw-r--r-- | Private/NewKit/UserHeap.hpp | 40 |
8 files changed, 14 insertions, 139 deletions
diff --git a/Private/NewKit/Defines.hpp b/Private/NewKit/Defines.hpp index c111f80f..18506e8f 100644 --- a/Private/NewKit/Defines.hpp +++ b/Private/NewKit/Defines.hpp @@ -99,12 +99,12 @@ public: public: template <typename T> - Char* AsBytes(T type) { + Char* AsBytes(T type) noexcept { return reinterpret_cast<Char*>(type); } template <typename T, typename Y> - Y As(T type) { + Y As(T type) noexcept { return reinterpret_cast<Y>(type); } diff --git a/Private/NewKit/KernelHeap.hpp b/Private/NewKit/KernelHeap.hpp deleted file mode 100644 index 489138cd..00000000 --- a/Private/NewKit/KernelHeap.hpp +++ /dev/null @@ -1,20 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#pragma once - -// last-rev 30/01/24 -// file: KernelHeap.hpp -// description: heap allocation for the kernel. - -#include <NewKit/Defines.hpp> -#include <NewKit/Pmm.hpp> - -namespace HCore { -Int32 ke_delete_ke_heap(voidPtr allocatedPtr); -Boolean ke_is_valid_ptr(VoidPtr ptr); -voidPtr ke_new_ke_heap(SizeT sz, const bool rw, const bool user); -} // namespace HCore diff --git a/Private/NewKit/LockDelegate.hpp b/Private/NewKit/LockDelegate.hpp deleted file mode 100644 index 0fd9ba63..00000000 --- a/Private/NewKit/LockDelegate.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Atom.hpp> -#include <NewKit/Defines.hpp> - -#define kLockDone (200U) /* job is done */ -#define kLockTimedOut (100U) /* job has timed out */ - -namespace HCore -{ -/// @brief Lock condition pointer. -typedef Boolean* LockPtr; - -/// @brief Locking delegate class, hangs until limit. -/// @tparam N the amount of cycles to wait. -template <SizeT N> -class LockDelegate final -{ - public: - LockDelegate() = delete; - - public: - explicit LockDelegate(LockPtr expr) - { - auto spin = 0U; - - while (spin != N) - { - if (*expr) - { - m_LockStatus | kLockDone; - break; - } - } - - if (spin == N) - m_LockStatus | kLockTimedOut; - } - - ~LockDelegate() = default; - - LockDelegate &operator=(const LockDelegate &) = delete; - LockDelegate(const LockDelegate &) = delete; - - bool Done() - { - return m_LockStatus[kLockDone] == kLockDone; - } - - bool HasTimedOut() - { - return m_LockStatus[kLockTimedOut] != kLockTimedOut; - } - - private: - Atom<UInt> m_LockStatus; -}; -} // namespace HCore diff --git a/Private/NewKit/New.hpp b/Private/NewKit/New.hpp index ac2587a9..c828b979 100644 --- a/Private/NewKit/New.hpp +++ b/Private/NewKit/New.hpp @@ -6,7 +6,7 @@ ------------------------------------------- */ #pragma once -#include <NewKit/KernelHeap.hpp> +#include <KernelKit/KernelHeap.hpp> typedef __SIZE_TYPE__ size_t; // gcc will complain about that diff --git a/Private/NewKit/NewKit.hpp b/Private/NewKit/NewKit.hpp index 6711e151..79993091 100644 --- a/Private/NewKit/NewKit.hpp +++ b/Private/NewKit/NewKit.hpp @@ -12,11 +12,11 @@ #include <NewKit/ErrorOr.hpp> #include <NewKit/Json.hpp> #include <NewKit/KernelCheck.hpp> -#include <NewKit/LockDelegate.hpp> +#include <KernelKit/LockDelegate.hpp> #include <NewKit/MutableArray.hpp> #include <NewKit/New.hpp> #include <NewKit/OwnPtr.hpp> #include <NewKit/Ref.hpp> #include <NewKit/Stream.hpp> -#include <NewKit/UserHeap.hpp> +#include <KernelKit/UserHeap.hpp> #include <NewKit/Utils.hpp> diff --git a/Private/NewKit/PageManager.hpp b/Private/NewKit/PageManager.hpp index ace13233..dab9ac73 100644 --- a/Private/NewKit/PageManager.hpp +++ b/Private/NewKit/PageManager.hpp @@ -31,7 +31,7 @@ class PTEWrapper final { PTEWrapper(const PTEWrapper &) = default; public: - void FlushTLB(Ref<PageManager> &pm); + void Flush(); const UIntPtr VirtualAddress(); void NoExecute(const bool enable = false); @@ -67,7 +67,7 @@ struct PageManager final { PageManager(const PageManager &) = default; public: - PTEWrapper *Request(Boolean Rw, Boolean User, Boolean ExecDisable); + PTEWrapper Request(Boolean Rw, Boolean User, Boolean ExecDisable); bool Free(Ref<PTEWrapper *> &wrapper); private: diff --git a/Private/NewKit/Pmm.hpp b/Private/NewKit/Pmm.hpp index f004904c..e8b4f05f 100644 --- a/Private/NewKit/Pmm.hpp +++ b/Private/NewKit/Pmm.hpp @@ -22,14 +22,13 @@ class Pmm final { Pmm &operator=(const Pmm &) = delete; Pmm(const Pmm &) = default; - Ref<PTEWrapper *> RequestPage(Boolean user = false, - Boolean readWrite = false); - Boolean FreePage(Ref<PTEWrapper *> refPage); - - Boolean ToggleRw(Ref<PTEWrapper *> refPage, Boolean enable = true); - Boolean TogglePresent(Ref<PTEWrapper *> refPage, Boolean enable = true); - Boolean ToggleUser(Ref<PTEWrapper *> refPage, Boolean enable = true); - Boolean ToggleShare(Ref<PTEWrapper *> refPage, Boolean enable = true); + Ref<PTEWrapper> RequestPage(Boolean user = false, Boolean readWrite = false); + Boolean FreePage(Ref<PTEWrapper> refPage); + + Boolean ToggleRw(Ref<PTEWrapper> refPage, Boolean enable = true); + Boolean TogglePresent(Ref<PTEWrapper> refPage, Boolean enable = true); + Boolean ToggleUser(Ref<PTEWrapper> refPage, Boolean enable = true); + Boolean ToggleShare(Ref<PTEWrapper> refPage, Boolean enable = true); /// @brief Get the page manager of this. Ref<PageManager> &Leak() { return m_PageManager; } diff --git a/Private/NewKit/UserHeap.hpp b/Private/NewKit/UserHeap.hpp deleted file mode 100644 index 09a7d31e..00000000 --- a/Private/NewKit/UserHeap.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#pragma once - -#include <NewKit/Array.hpp> -#include <NewKit/ArrayList.hpp> -#include <NewKit/ErrorOr.hpp> -#include <NewKit/PageManager.hpp> -#include <NewKit/Pmm.hpp> -#include <NewKit/Ref.hpp> - -/// last-rev 5/11/23 -/// @file UserHeap.hpp -/// @brief memory heap for user programs. - -#define kPoolMaxSz (4096) -#define kPoolMag (0x5500A1) - -namespace HCore { -typedef enum { - kPoolHypervisor = 0x2, - kPoolShared = 0x4, - kPoolUser = 0x6, - kPoolRw = 0x8, -} kPoolFlags; - -/// @brief Allocate a process heap, no zero out is done here. -/// @param flags -/// @return The process's heap. -VoidPtr rt_new_heap(Int32 flags); - -/// @brief Frees the process heap. -/// @param pointer The process heap pointer. -/// @return -Int32 rt_free_heap(voidPtr pointer); -} // namespace HCore |
