summaryrefslogtreecommitdiffhomepage
path: root/Private/NewKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-20 14:47:08 +0100
committerAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-20 14:47:08 +0100
commit4ba02280f19b8a2beb1ad8445be7df6b7f9e1805 (patch)
tree4928e93b6463dcce6e0d74120882a6ec572bae5c /Private/NewKit
parent055a896406af227e03708fa20a728259cace704a (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.hpp4
-rw-r--r--Private/NewKit/KernelHeap.hpp20
-rw-r--r--Private/NewKit/LockDelegate.hpp64
-rw-r--r--Private/NewKit/New.hpp2
-rw-r--r--Private/NewKit/NewKit.hpp4
-rw-r--r--Private/NewKit/PageManager.hpp4
-rw-r--r--Private/NewKit/Pmm.hpp15
-rw-r--r--Private/NewKit/UserHeap.hpp40
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