summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <113760121+Amlal-ElMahrouss@users.noreply.github.com>2024-10-31 09:04:03 +0100
committerGitHub <noreply@github.com>2024-10-31 09:04:03 +0100
commit83faed9caccdd47d3b443c2f563a9a0b3b0ca1e4 (patch)
tree5e1bbc311e82682f9862b3e7a6de9a7daf49756d
parent3d22ccdda8e782177a4fca684c07e8e6267d01c5 (diff)
IMP: Implement flags on the MicroKernel's Heap manager.
IMP: Don't return negative error codes.
-rw-r--r--dev/ZBAKit/src/HEL/AMD64/BootMain.cc2
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc2
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalTimerAMD64.cc2
-rw-r--r--dev/ZKAKit/HALKit/ARM64/HalPagingMgrARM64.cc2
-rw-r--r--dev/ZKAKit/KernelKit/Heap.h11
-rw-r--r--dev/ZKAKit/src/ACPIFactoryInterface.cc2
-rw-r--r--dev/ZKAKit/src/CxxAbi-AMD64.cc2
-rw-r--r--dev/ZKAKit/src/CxxAbi-ARM64.cc2
-rw-r--r--dev/ZKAKit/src/Heap.cc53
-rw-r--r--dev/ZKAKit/src/NeFS+IO.cc4
-rw-r--r--dev/ZKAKit/src/Timer.cc2
-rw-r--r--dev/ZKAKit/src/User.cc2
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc8
-rw-r--r--dev/ZKAKit/src/Utils.cc4
14 files changed, 72 insertions, 26 deletions
diff --git a/dev/ZBAKit/src/HEL/AMD64/BootMain.cc b/dev/ZBAKit/src/HEL/AMD64/BootMain.cc
index f7ed885b..98db6587 100644
--- a/dev/ZBAKit/src/HEL/AMD64/BootMain.cc
+++ b/dev/ZBAKit/src/HEL/AMD64/BootMain.cc
@@ -96,7 +96,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
#ifdef __ZKA_USE_FB__
if (!boot_init_fb())
- return -1; ///! Init the GOP.
+ return 1; ///! Init the GOP.
for (SizeT index_vt = 0; index_vt < SystemTable->NumberOfTableEntries;
++index_vt)
diff --git a/dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc
index 53553a13..3c7ea836 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc
+++ b/dev/ZKAKit/HALKit/AMD64/HalPagingMgrAMD64.cc
@@ -129,7 +129,7 @@ namespace Kernel::HAL
/***********************************************************************************/
STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, ZKA_PTE* pt_entry, ZKA_PDE* pd_entry)
{
- if (!pt_entry) return -1;
+ if (!pt_entry) return 1;
pt_entry->Present = true;
diff --git a/dev/ZKAKit/HALKit/AMD64/HalTimerAMD64.cc b/dev/ZKAKit/HALKit/AMD64/HalTimerAMD64.cc
index cb572e70..289898d6 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalTimerAMD64.cc
+++ b/dev/ZKAKit/HALKit/AMD64/HalTimerAMD64.cc
@@ -65,7 +65,7 @@ HardwareTimer::~HardwareTimer()
Int32 HardwareTimer::Wait() noexcept
{
if (fWaitFor < 1)
- return -1;
+ return 1;
// if not enabled yet.
if (!(*(fDigitalTimer + cHPETConfigRegValue) & (1 << 0)))
diff --git a/dev/ZKAKit/HALKit/ARM64/HalPagingMgrARM64.cc b/dev/ZKAKit/HALKit/ARM64/HalPagingMgrARM64.cc
index 5b262cf9..75973a24 100644
--- a/dev/ZKAKit/HALKit/ARM64/HalPagingMgrARM64.cc
+++ b/dev/ZKAKit/HALKit/ARM64/HalPagingMgrARM64.cc
@@ -64,7 +64,7 @@ namespace Kernel::HAL
return mmi_map_page_table_entry(page_store.fInternalStore.fVAddr, flags, page_store.fInternalStore.fPte);
}
- return -1;
+ return 1;
}
/// @brief Maps flags for a specific pte.
diff --git a/dev/ZKAKit/KernelKit/Heap.h b/dev/ZKAKit/KernelKit/Heap.h
index 09baa40a..9fb455bb 100644
--- a/dev/ZKAKit/KernelKit/Heap.h
+++ b/dev/ZKAKit/KernelKit/Heap.h
@@ -46,7 +46,16 @@ namespace Kernel
/// @brief Makes a Kernel page.
/// @param heap_ptr the page pointer.
/// @return status code
- Int32 mm_make_ke_page(VoidPtr heap_ptr);
+ Int32 mm_make_page(VoidPtr heap_ptr);
+
+ /// @brief Overwrites and set the flags of a heap header.
+ /// @param heap_ptr the pointer to update.
+ /// @param flags the flags to set.
+ Int32 mm_make_flags(VoidPtr heap_ptr, UInt64 flags)
+
+ /// @brief Gets the flags of a heap header.
+ /// @param heap_ptr the pointer to get.
+ UInt64 mm_get_flags(VoidPtr heap_ptr);
/// @brief Allocate C++ class.
template <typename T, typename... Args>
diff --git a/dev/ZKAKit/src/ACPIFactoryInterface.cc b/dev/ZKAKit/src/ACPIFactoryInterface.cc
index 298221b3..27de28de 100644
--- a/dev/ZKAKit/src/ACPIFactoryInterface.cc
+++ b/dev/ZKAKit/src/ACPIFactoryInterface.cc
@@ -82,7 +82,7 @@ namespace Kernel
bool ACPIFactoryInterface::Checksum(const Char* checksum, SSizeT len)
{
if (len == 0)
- return -1;
+ return 1;
char chr = 0;
diff --git a/dev/ZKAKit/src/CxxAbi-AMD64.cc b/dev/ZKAKit/src/CxxAbi-AMD64.cc
index 2eff6926..0228489f 100644
--- a/dev/ZKAKit/src/CxxAbi-AMD64.cc
+++ b/dev/ZKAKit/src/CxxAbi-AMD64.cc
@@ -30,7 +30,7 @@ EXTERN_C void ___chkstk_ms(void)
EXTERN_C int atexit(void (*f)(void*), void* arg, void* dso)
{
if (__atexit_func_count >= kAtExitMacDestructors)
- return -1;
+ return 1;
__atexit_funcs[__atexit_func_count].destructor_func = f;
__atexit_funcs[__atexit_func_count].obj_ptr = arg;
diff --git a/dev/ZKAKit/src/CxxAbi-ARM64.cc b/dev/ZKAKit/src/CxxAbi-ARM64.cc
index de3bcded..8924d32f 100644
--- a/dev/ZKAKit/src/CxxAbi-ARM64.cc
+++ b/dev/ZKAKit/src/CxxAbi-ARM64.cc
@@ -24,7 +24,7 @@ EXTERN_C void __chkstk(void)
EXTERN_C int atexit(void (*f)(void*), void* arg, void* dso)
{
if (__atexit_func_count >= kAtExitMacDestructors)
- return -1;
+ return 1;
__atexit_funcs[__atexit_func_count].destructor_func = f;
__atexit_funcs[__atexit_func_count].obj_ptr = arg;
diff --git a/dev/ZKAKit/src/Heap.cc b/dev/ZKAKit/src/Heap.cc
index 5826017a..65781f0e 100644
--- a/dev/ZKAKit/src/Heap.cc
+++ b/dev/ZKAKit/src/Heap.cc
@@ -52,9 +52,12 @@ namespace Kernel
/// @brief Is this a page pointer?
Boolean fPage : 1;
- ///! @brief 32-bit CRC checksum.
+ /// @brief 32-bit CRC checksum.
UInt32 fCRC32;
+ /// @brief 64-bit Allocation flags.
+ UInt64 fFlags;
+
/// @brief 64-bit pointer size.
SizeT fHeapSize;
@@ -99,7 +102,7 @@ namespace Kernel
if (!ptr_heap || new_sz < 1)
return nullptr;
- kcout << "This function is not implemented in the kernel, please refrain from using that.\r";
+ kcout << "This function is not implemented by the MicroKernel, please use the BSD layer realloc instead.\r";
ke_stop(RUNTIME_CHECK_PROCESS);
return nullptr;
@@ -147,17 +150,17 @@ namespace Kernel
/// @brief Makes a page heap.
/// @param heap_ptr the pointer to make a page heap.
/// @return kErrorSuccess if successful, otherwise an error code.
- Int32 mm_make_ke_page(VoidPtr heap_ptr)
+ Int32 mm_make_page(VoidPtr heap_ptr)
{
if (Detail::mm_check_heap_address(heap_ptr) == No)
- return -kErrorHeapNotPresent;
+ return kErrorHeapNotPresent;
Detail::HEAP_INFORMATION_BLOCK_PTR heap_info_ptr =
reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>(
(UIntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK));
if (!heap_ptr)
- return -kErrorHeapNotPresent;
+ return kErrorHeapNotPresent;
heap_info_ptr->fPage = true;
@@ -166,13 +169,47 @@ namespace Kernel
return kErrorSuccess;
}
+ /// @brief Overwrites and set the flags of a heap header.
+ /// @param heap_ptr the pointer to update.
+ /// @param flags the flags to set.
+ Int32 mm_make_flags(VoidPtr heap_ptr, UInt64 flags)
+ {
+ if (Detail::mm_check_heap_address(heap_ptr) == No)
+ return kErrorHeapNotPresent;
+
+ Detail::HEAP_INFORMATION_BLOCK_PTR heap_info_ptr =
+ reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>(
+ (UIntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK));
+
+ if (!heap_ptr)
+ return kErrorHeapNotPresent;
+
+ heap_info_ptr->fFlags = flags;
+
+ return kErrorSuccess;
+ }
+
+ /// @brief Gets the flags of a heap header.
+ /// @param heap_ptr the pointer to get.
+ UInt64 mm_get_flags(VoidPtr heap_ptr)
+ {
+ Detail::HEAP_INFORMATION_BLOCK_PTR heap_info_ptr =
+ reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>(
+ (UIntPtr)heap_ptr - sizeof(Detail::HEAP_INFORMATION_BLOCK));
+
+ if (!heap_ptr)
+ return kErrorHeapNotPresent;
+
+ return heap_info_ptr->fFlags;
+ }
+
/// @brief Declare pointer as free.
/// @param heap_ptr the pointer.
/// @return
Int32 mm_delete_heap(VoidPtr heap_ptr)
{
if (Detail::mm_check_heap_address(heap_ptr) == No)
- return -kErrorHeapNotPresent;
+ return kErrorHeapNotPresent;
Detail::HEAP_INFORMATION_BLOCK_PTR heap_info_ptr =
reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>(
@@ -182,7 +219,7 @@ namespace Kernel
{
if (!heap_info_ptr->fPresent)
{
- return -kErrorHeapNotPresent;
+ return kErrorHeapNotPresent;
}
if (heap_info_ptr->fCRC32 != 0)
@@ -217,7 +254,7 @@ namespace Kernel
return kErrorSuccess;
}
- return -kErrorInternal;
+ return kErrorInternal;
}
/// @brief Check if pointer is a valid Kernel pointer.
diff --git a/dev/ZKAKit/src/NeFS+IO.cc b/dev/ZKAKit/src/NeFS+IO.cc
index b27f93d4..392e790b 100644
--- a/dev/ZKAKit/src/NeFS+IO.cc
+++ b/dev/ZKAKit/src/NeFS+IO.cc
@@ -36,7 +36,7 @@ using namespace Kernel;
Int32 fs_newfs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex)
{
if (!Mnt)
- return -1;
+ return 1;
DrvTrait.fPacket.fPacketGood = false;
@@ -71,7 +71,7 @@ Int32 fs_newfs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvInd
Int32 fs_newfs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex)
{
if (!Mnt)
- return -1;
+ return 1;
DrvTrait.fPacket.fPacketGood = false;
diff --git a/dev/ZKAKit/src/Timer.cc b/dev/ZKAKit/src/Timer.cc
index a85e64d1..12c688da 100644
--- a/dev/ZKAKit/src/Timer.cc
+++ b/dev/ZKAKit/src/Timer.cc
@@ -36,7 +36,7 @@ SoftwareTimer::~SoftwareTimer()
Int32 SoftwareTimer::Wait() noexcept
{
if (fWaitFor < 1)
- return -1;
+ return 1;
while (*fDigitalTimer < (*fDigitalTimer + fWaitFor))
{
diff --git a/dev/ZKAKit/src/User.cc b/dev/ZKAKit/src/User.cc
index 39d3e2be..189d80cf 100644
--- a/dev/ZKAKit/src/User.cc
+++ b/dev/ZKAKit/src/User.cc
@@ -32,7 +32,7 @@ namespace Kernel
const Int32 cred_construct_token(Char* password, const Char* in_password, User* user, SizeT length)
{
if (!password || !user)
- return -1;
+ return 1;
kcout << "Hashing password...\r";
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc
index 61f6ba7b..c3e85716 100644
--- a/dev/ZKAKit/src/UserProcessScheduler.cc
+++ b/dev/ZKAKit/src/UserProcessScheduler.cc
@@ -317,7 +317,7 @@ namespace Kernel
SizeT UserProcessScheduler::Add(UserProcess process)
{
if (mTeam.mProcessAmount > kSchedProcessLimitPerTeam)
- return -kErrorInvalidData;
+ return kErrorInvalidData;
#ifdef __ZKA_AMD64__
process.VMRegister = reinterpret_cast<UIntPtr>(mm_new_heap(sizeof(PDE), No, Yes));
@@ -328,7 +328,7 @@ namespace Kernel
if (!process.StackFrame)
{
process.Crash();
- return -kErrorProcessFault;
+ return kErrorProcessFault;
}
// Create heap according to type of process.
@@ -340,7 +340,7 @@ namespace Kernel
if (!process.Image)
{
process.Crash();
- return -kErrorProcessFault;
+ return kErrorProcessFault;
}
// Get preferred stack size by app.
@@ -350,7 +350,7 @@ namespace Kernel
if (!process.StackReserve)
{
process.Crash();
- return -kErrorProcessFault;
+ return kErrorProcessFault;
}
++mTeam.mProcessAmount;
diff --git a/dev/ZKAKit/src/Utils.cc b/dev/ZKAKit/src/Utils.cc
index 5107517d..1a691486 100644
--- a/dev/ZKAKit/src/Utils.cc
+++ b/dev/ZKAKit/src/Utils.cc
@@ -79,9 +79,9 @@ namespace Kernel
Int rt_move_memory(const voidPtr src, voidPtr dst, Size len)
{
if (len < 1)
- return -2;
+ return 2;
if (!src || !dst)
- return -1;
+ return 1;
char* srcChr = reinterpret_cast<Char*>(src);
char* dstChar = reinterpret_cast<Char*>(dst);