summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel
diff options
context:
space:
mode:
Diffstat (limited to 'dev/Kernel')
-rw-r--r--dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc2
-rw-r--r--dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc2
-rw-r--r--dev/Kernel/HALKit/AMD64/Processor.h2
-rw-r--r--dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc2
-rw-r--r--dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc2
-rw-r--r--dev/Kernel/HALKit/ARM64/HalKernelMain.cc2
-rw-r--r--dev/Kernel/KernelKit/FileMgr.h2
-rw-r--r--dev/Kernel/KernelKit/MemoryMgr.h (renamed from dev/Kernel/KernelKit/Heap.h)2
-rw-r--r--dev/Kernel/NewKit/KernelPanic.h3
-rw-r--r--dev/Kernel/NewKit/New.h2
-rw-r--r--dev/Kernel/NewKit/Ref.h2
-rw-r--r--dev/Kernel/src/ACPIFactoryInterface.cc4
-rw-r--r--dev/Kernel/src/FS/NeFS+FileMgr.cc2
-rw-r--r--dev/Kernel/src/KernelMain.cc4
-rw-r--r--dev/Kernel/src/MemoryMgr.cc (renamed from dev/Kernel/src/Heap.cc)65
-rw-r--r--dev/Kernel/src/New+Delete.cc2
-rw-r--r--dev/Kernel/src/PEFCodeMgr.cc2
-rw-r--r--dev/Kernel/src/User.cc2
-rw-r--r--dev/Kernel/src/UserProcessScheduler.cc4
19 files changed, 49 insertions, 59 deletions
diff --git a/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc b/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc
index a1edf6f1..d875bd50 100644
--- a/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc
+++ b/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc
@@ -8,7 +8,7 @@
#include <HALKit/AMD64/Processor.h>
#include <NewKit/KString.h>
#include <ArchKit/ArchKit.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
namespace Kernel
{
diff --git a/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc
index c6074d72..81479fc8 100644
--- a/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -219,7 +219,7 @@ namespace Kernel::HAL
kcout << "SMP: Starting APs...\r";
- UInt32 eax, edx;
+ UInt32 eax, edx;
kApicBaseAddress = kMADTBlock->Address;
while (Yes)
diff --git a/dev/Kernel/HALKit/AMD64/Processor.h b/dev/Kernel/HALKit/AMD64/Processor.h
index 623c8245..311d2738 100644
--- a/dev/Kernel/HALKit/AMD64/Processor.h
+++ b/dev/Kernel/HALKit/AMD64/Processor.h
@@ -242,7 +242,7 @@ namespace Kernel::HAL
: "=a"(*lo), "=d"(*hi)
: "c"(msr));
- return *lo + *hi;
+ return *lo + *hi;
}
/// @brief Set Model-specific register.
diff --git a/dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc b/dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc
index 94875560..767f83e5 100644
--- a/dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc
+++ b/dev/Kernel/HALKit/AMD64/Storage/SATA-DMA.cc
@@ -17,7 +17,7 @@
#include "HALKit/AMD64/Processor.h"
#include "KernelKit/DebugOutput.h"
-#include "KernelKit/Heap.h"
+#include "KernelKit/MemoryMgr.h"
#include "NewKit/Defines.h"
#include <KernelKit/UserProcessScheduler.h>
#include <KernelKit/LPC.h>
diff --git a/dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc b/dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc
index 69459f66..5dd79f1f 100644
--- a/dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc
+++ b/dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc
@@ -7,7 +7,7 @@
#include <Mod/ACPI/ACPIFactoryInterface.h>
#include <NewKit/KString.h>
#include <ArchKit/ArchKit.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <Mod/APM/APM.h>
namespace Kernel
diff --git a/dev/Kernel/HALKit/ARM64/HalKernelMain.cc b/dev/Kernel/HALKit/ARM64/HalKernelMain.cc
index 7756facd..a6d03e4b 100644
--- a/dev/Kernel/HALKit/ARM64/HalKernelMain.cc
+++ b/dev/Kernel/HALKit/ARM64/HalKernelMain.cc
@@ -8,7 +8,7 @@
#include <Mod/CoreGfx/FBMgr.h>
#include <FirmwareKit/Handover.h>
#include <KernelKit/FileMgr.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <KernelKit/PEFCodeMgr.h>
#include <KernelKit/UserProcessScheduler.h>
#include <NewKit/Json.h>
diff --git a/dev/Kernel/KernelKit/FileMgr.h b/dev/Kernel/KernelKit/FileMgr.h
index c78c0b97..942ff392 100644
--- a/dev/Kernel/KernelKit/FileMgr.h
+++ b/dev/Kernel/KernelKit/FileMgr.h
@@ -35,7 +35,7 @@
#include <KernelKit/DebugOutput.h>
#include <NewKit/Stream.h>
#include <NewKit/ErrorOr.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <NewKit/Ref.h>
/// @brief Filesystem manager, abstraction over mounted filesystem.
diff --git a/dev/Kernel/KernelKit/Heap.h b/dev/Kernel/KernelKit/MemoryMgr.h
index ac6cac41..af9175f1 100644
--- a/dev/Kernel/KernelKit/Heap.h
+++ b/dev/Kernel/KernelKit/MemoryMgr.h
@@ -8,7 +8,7 @@
#define INC_KERNEL_HEAP_H
/// @date 30/01/24
-/// @file: Heap.h
+/// @file: MemoryMgr.h
/// @brief: heap allocation support.
#include <NewKit/KernelPanic.h>
diff --git a/dev/Kernel/NewKit/KernelPanic.h b/dev/Kernel/NewKit/KernelPanic.h
index 9255d9cc..ec69f5c1 100644
--- a/dev/Kernel/NewKit/KernelPanic.h
+++ b/dev/Kernel/NewKit/KernelPanic.h
@@ -45,9 +45,12 @@ enum RUNTIME_CHECK
RUNTIME_CHECK_FILESYSTEM,
RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM,
RUNTIME_CHECK_PAGE,
+ RUNTIME_CHECK_INVALID,
RUNTIME_CHECK_COUNT,
};
+typedef enum RUNTIME_CHECK RTL_RUNTIME_CHECK;
+
namespace Kernel
{
void ke_panic(const Int32& id, const Char* message = nullptr);
diff --git a/dev/Kernel/NewKit/New.h b/dev/Kernel/NewKit/New.h
index 989f72e2..9b1d8e12 100644
--- a/dev/Kernel/NewKit/New.h
+++ b/dev/Kernel/NewKit/New.h
@@ -7,7 +7,7 @@
#pragma once
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
/// @note compatible with tk too.
typedef __SIZE_TYPE__ size_t;
diff --git a/dev/Kernel/NewKit/Ref.h b/dev/Kernel/NewKit/Ref.h
index f91d0c1d..340132b1 100644
--- a/dev/Kernel/NewKit/Ref.h
+++ b/dev/Kernel/NewKit/Ref.h
@@ -10,7 +10,7 @@
#include <NewKit/Defines.h>
#include <NewKit/KernelPanic.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
namespace Kernel
{
diff --git a/dev/Kernel/src/ACPIFactoryInterface.cc b/dev/Kernel/src/ACPIFactoryInterface.cc
index cbfded4e..5854460b 100644
--- a/dev/Kernel/src/ACPIFactoryInterface.cc
+++ b/dev/Kernel/src/ACPIFactoryInterface.cc
@@ -7,14 +7,14 @@
#include <Mod/ACPI/ACPIFactoryInterface.h>
#include <NewKit/KString.h>
#include <ArchKit/ArchKit.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
namespace Kernel
{
/// @brief Finds a descriptor table inside ACPI XSDT.
ErrorOr<voidPtr> ACPIFactoryInterface::Find(const Char* signature)
{
- MUST_PASS(fRsdp);
+ MUST_PASS(this->fRsdp);
if (!signature)
return ErrorOr<voidPtr>{-1};
diff --git a/dev/Kernel/src/FS/NeFS+FileMgr.cc b/dev/Kernel/src/FS/NeFS+FileMgr.cc
index 8d44f707..ebf03078 100644
--- a/dev/Kernel/src/FS/NeFS+FileMgr.cc
+++ b/dev/Kernel/src/FS/NeFS+FileMgr.cc
@@ -5,7 +5,7 @@
------------------------------------------- */
#include <KernelKit/FileMgr.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#ifndef __ZKA_MINIMAL_OS__
#ifdef __FSKIT_INCLUDES_NEFS__
diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc
index b7823d1b..7168453d 100644
--- a/dev/Kernel/src/KernelMain.cc
+++ b/dev/Kernel/src/KernelMain.cc
@@ -12,11 +12,11 @@
#include <CompilerKit/Detail.h>
#include <FirmwareKit/Handover.h>
#include <KernelKit/FileMgr.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <KernelKit/PEF.h>
#include <KernelKit/PEFCodeMgr.h>
#include <KernelKit/UserProcessScheduler.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <NewKit/Json.h>
#include <NewKit/KString.h>
#include <NewKit/Utils.h>
diff --git a/dev/Kernel/src/Heap.cc b/dev/Kernel/src/MemoryMgr.cc
index 7b2da96d..3627a478 100644
--- a/dev/Kernel/src/Heap.cc
+++ b/dev/Kernel/src/MemoryMgr.cc
@@ -1,12 +1,12 @@
/* -------------------------------------------
- Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
------------------------------------------- */
#include <KernelKit/DebugOutput.h>
#include <KernelKit/LPC.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <NewKit/Crc32.h>
#include <NewKit/PageMgr.h>
#include <NewKit/Utils.h>
@@ -16,16 +16,16 @@
Revision History:
10/8/24: FIX: Fix useless long name, alongside a new WR (WriteRead) field.
- 20/10/24: Fix mm_new_ and mm_delete_ APIs inside Heap.h header. (amlal)
+ 20/10/24: Fix mm_new_ and mm_delete_ APIs inside MemoryMgr.h header. (amlal)
+ 27/01/25: Reworked code as the memory manager.
------------------------------------------- */
//! @file Heap.cc
-//! @brief This serves as the main memory manager.
+//! @brief This Heap algorithm serves as the main memory manager.
#define kKernelHeapMagic (0xD4D7D5)
#define kKernelHeapAlignSz (__BIGGEST_ALIGNMENT__)
-#define kKernelHeapMaxSize (gib_cast(2))
namespace Kernel
{
@@ -42,7 +42,7 @@ namespace Kernel
///! @brief 32-bit value which contains the magic number of the heap.
UInt64 fMagic;
- ///! @brief Boolean value which tells if the heap is allocated.
+ ///! @brief Is the heap present?
Boolean fPresent : 1;
/// @brief Is this valued owned by the user?
@@ -52,7 +52,7 @@ namespace Kernel
Boolean fUser : 1;
/// @brief Is this a page pointer?
- Boolean fPagePtr : 1;
+ Boolean fPage : 1;
/// @brief 32-bit CRC checksum.
UInt32 fCRC32;
@@ -61,10 +61,10 @@ namespace Kernel
UInt64 fFlags;
/// @brief 64-bit pointer size.
- SizeT fHeapSize;
+ SizeT fSize;
/// @brief 64-bit target offset pointer.
- UIntPtr fHeapPtr;
+ UIntPtr fOffset;
/// @brief Padding bytes for header.
UInt8 fPadding[kKernelHeapAlignSz];
@@ -104,8 +104,8 @@ namespace Kernel
if (!ptr_heap || new_sz < 1)
return nullptr;
- kcout << "This function is not implemented by minOSKrnl, please use the BSD's realloc instead.\r";
- ke_panic(RUNTIME_CHECK_PROCESS);
+ kcout << "This function is not implemented by NeOSKrnl, please use the BSD's realloc instead.\r";
+ ke_panic(RUNTIME_CHECK_INVALID);
return nullptr;
}
@@ -122,9 +122,6 @@ namespace Kernel
if (sz_fix == 0)
return nullptr;
- // We can't allocate that big now.
- MUST_PASS(sz < kKernelHeapMaxSize);
-
sz_fix += sizeof(Detail::HEAP_INFORMATION_BLOCK);
PageMgr heap_mgr;
@@ -134,20 +131,20 @@ namespace Kernel
reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>(
wrapper.VirtualAddress() + sizeof(Detail::HEAP_INFORMATION_BLOCK));
- heap_info_ptr->fHeapSize = sz_fix;
+ heap_info_ptr->fSize = sz_fix;
heap_info_ptr->fMagic = kKernelHeapMagic;
heap_info_ptr->fCRC32 = 0; // dont fill it for now.
- heap_info_ptr->fHeapPtr = reinterpret_cast<UIntPtr>(heap_info_ptr) + sizeof(Detail::HEAP_INFORMATION_BLOCK);
- heap_info_ptr->fPagePtr = No;
+ heap_info_ptr->fOffset = reinterpret_cast<UIntPtr>(heap_info_ptr) + sizeof(Detail::HEAP_INFORMATION_BLOCK);
+ heap_info_ptr->fPage = No;
heap_info_ptr->fWriteRead = wr;
heap_info_ptr->fUser = user;
heap_info_ptr->fPresent = Yes;
rt_set_memory(heap_info_ptr->fPadding, 0, kKernelHeapAlignSz);
- auto result = reinterpret_cast<VoidPtr>(heap_info_ptr->fHeapPtr);
+ auto result = reinterpret_cast<VoidPtr>(heap_info_ptr->fOffset);
- kcout << "Created Heap address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl;
+ kcout << "Registered heap address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl;
return result;
}
@@ -167,9 +164,9 @@ namespace Kernel
if (!heap_info_ptr)
return kErrorHeapNotPresent;
- heap_info_ptr->fPagePtr = true;
+ heap_info_ptr->fPage = true;
- kcout << "Created page address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl;
+ kcout << "Registered page address: " << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << endl;
return kErrorSuccess;
}
@@ -227,21 +224,21 @@ namespace Kernel
return kErrorHeapNotPresent;
}
- heap_info_ptr->fHeapSize = 0UL;
+ heap_info_ptr->fSize = 0UL;
heap_info_ptr->fPresent = No;
- heap_info_ptr->fHeapPtr = 0;
+ heap_info_ptr->fOffset = 0;
heap_info_ptr->fCRC32 = 0;
heap_info_ptr->fWriteRead = No;
heap_info_ptr->fUser = No;
heap_info_ptr->fMagic = 0;
- PTEWrapper pageWrapper(No, No, No, reinterpret_cast<UIntPtr>(heap_info_ptr) - sizeof(Detail::HEAP_INFORMATION_BLOCK));
- Ref<PTEWrapper> pteAddress{pageWrapper};
+ PTEWrapper page_wrapper(No, No, No, reinterpret_cast<UIntPtr>(heap_info_ptr) - sizeof(Detail::HEAP_INFORMATION_BLOCK));
+ Ref<PTEWrapper> pte_address{page_wrapper};
PageMgr heap_mgr;
- heap_mgr.Free(pteAddress);
+ heap_mgr.Free(pte_address);
- kcout << "Freed Heap address successfully." << endl;
+ kcout << "Address has been successfully freed." << endl;
return kErrorSuccess;
}
@@ -260,17 +257,7 @@ namespace Kernel
reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>(
(UIntPtr)(heap_ptr) - sizeof(Detail::HEAP_INFORMATION_BLOCK));
- if (heap_info_ptr && heap_info_ptr->fPresent && heap_info_ptr->fMagic == kKernelHeapMagic)
- {
- if (heap_info_ptr->fCRC32 !=
- ke_calculate_crc32((Char*)heap_info_ptr->fHeapPtr,
- heap_info_ptr->fHeapSize))
- {
- return No;
- }
-
- return Yes;
- }
+ return (heap_info_ptr && heap_info_ptr->fPresent && heap_info_ptr->fMagic == kKernelHeapMagic);
}
return No;
@@ -290,7 +277,7 @@ namespace Kernel
if (heap_info_ptr && heap_info_ptr->fPresent && kKernelHeapMagic == heap_info_ptr->fMagic)
{
heap_info_ptr->fCRC32 =
- ke_calculate_crc32((Char*)heap_info_ptr->fHeapPtr, heap_info_ptr->fHeapSize);
+ ke_calculate_crc32((Char*)heap_info_ptr->fOffset, heap_info_ptr->fSize);
return Yes;
}
diff --git a/dev/Kernel/src/New+Delete.cc b/dev/Kernel/src/New+Delete.cc
index 0394112e..87efeb57 100644
--- a/dev/Kernel/src/New+Delete.cc
+++ b/dev/Kernel/src/New+Delete.cc
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <NewKit/New.h>
void* operator new[](size_t sz)
diff --git a/dev/Kernel/src/PEFCodeMgr.cc b/dev/Kernel/src/PEFCodeMgr.cc
index 8bcceeee..b512f2ed 100644
--- a/dev/Kernel/src/PEFCodeMgr.cc
+++ b/dev/Kernel/src/PEFCodeMgr.cc
@@ -5,7 +5,7 @@
------------------------------------------- */
#include <KernelKit/DebugOutput.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <KernelKit/PEFCodeMgr.h>
#include <KernelKit/UserProcessScheduler.h>
#include <NewKit/Defines.h>
diff --git a/dev/Kernel/src/User.cc b/dev/Kernel/src/User.cc
index 51aa3c72..3c0a18df 100644
--- a/dev/Kernel/src/User.cc
+++ b/dev/Kernel/src/User.cc
@@ -14,7 +14,7 @@
#include <KernelKit/LPC.h>
#include <NewKit/KernelPanic.h>
#include <KernelKit/FileMgr.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#define kStdUserType (0xCE)
#define kSuperUserType (0xEC)
diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc
index e9b2de17..a9a045fa 100644
--- a/dev/Kernel/src/UserProcessScheduler.cc
+++ b/dev/Kernel/src/UserProcessScheduler.cc
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
FILE: UserProcessScheduler.cc
PURPOSE: Low level/Ring-3 Process scheduler.
@@ -16,7 +16,7 @@
#include <KernelKit/HardwareThreadScheduler.h>
#include <KernelKit/IPEFDylibObject.h>
#include <ArchKit/ArchKit.h>
-#include <KernelKit/Heap.h>
+#include <KernelKit/MemoryMgr.h>
#include <NewKit/KString.h>
#include <KernelKit/LPC.h>