summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-03-03 06:43:42 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2026-03-03 06:47:39 +0100
commit92bbadf36f8bdffed9090cb345e57fc252c5a133 (patch)
treeac6b33909d8534cbc93adb0c6cb7b47a7fe441ff
parent2d7fed07e04ddae4924fde776059e78891ffd426 (diff)
chore: system: OpenHeFS improvements progress and HeapMgr, DDK additions.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--src/kernel/KernelKit/HeapMgr.h2
-rw-r--r--src/kernel/KernelKit/IFS.h2
-rw-r--r--src/kernel/src/FS/OpenHeFS+FileMgr.cpp29
-rw-r--r--src/kernel/src/HeapMgr.cpp35
-rw-r--r--src/libDDK/DriverKit/Device.h15
-rw-r--r--src/libDDK/DriverKit/ObjectKit/DriverKit.h2
6 files changed, 41 insertions, 44 deletions
diff --git a/src/kernel/KernelKit/HeapMgr.h b/src/kernel/KernelKit/HeapMgr.h
index 444df020..e62a5911 100644
--- a/src/kernel/KernelKit/HeapMgr.h
+++ b/src/kernel/KernelKit/HeapMgr.h
@@ -39,7 +39,7 @@ Boolean mm_protect_ptr(VoidPtr heap_ptr);
/// @brief Makes a Kernel page.
/// @param heap_ptr the page pointer.
/// @return status code
-Int32 mm_make_page(VoidPtr heap_ptr);
+ Int32 mm_control_page(VoidPtr heap_ptr, const Bool);
/// @brief Overwrites and set the flags of a heap header.
/// @param heap_ptr the pointer to update.
diff --git a/src/kernel/KernelKit/IFS.h b/src/kernel/KernelKit/IFS.h
index ad82e857..bc6829b8 100644
--- a/src/kernel/KernelKit/IFS.h
+++ b/src/kernel/KernelKit/IFS.h
@@ -22,7 +22,7 @@ Int32 fs_ifs_read(IMountpoint* mnt, DriveTrait& drvTrait, Int32 drvIndex);
/// @param DrvIndex drive index.
/// @return Status code
Int32 fs_ifs_write(IMountpoint* mnt, DriveTrait& drvTrait, Int32 drvIndex);
-
+
} // namespace Kernel
#endif
diff --git a/src/kernel/src/FS/OpenHeFS+FileMgr.cpp b/src/kernel/src/FS/OpenHeFS+FileMgr.cpp
index 561bff24..ef367076 100644
--- a/src/kernel/src/FS/OpenHeFS+FileMgr.cpp
+++ b/src/kernel/src/FS/OpenHeFS+FileMgr.cpp
@@ -219,13 +219,21 @@ _Output VoidPtr HeFileSystemMgr::Read(_Input NodePtr node, _Input Int32 flags, _
return nullptr;
}
+ /// @note name is not used in OpenHeFS to mark data offsets. That's an NeFS-ism.
Void HeFileSystemMgr::Write(_Input const Char* name, _Input NodePtr node, _Input VoidPtr data,
_Input Int32 flags, _Input SizeT size) {
- NE_UNUSED(node);
- NE_UNUSED(flags);
- NE_UNUSED(size);
+ //NE_UNUSED(node);
+ //NE_UNUSED(flags);
+ //NE_UNUSED(size);
NE_UNUSED(name);
- NE_UNUSED(data);
+ //NE_UNUSED(data);
+
+ if (!node) return;
+ if (!flags) return;
+ if (!size) return;
+ if (!data) return;
+
+
}
_Output VoidPtr HeFileSystemMgr::Read(_Input const Char* name, _Input NodePtr node,
@@ -239,8 +247,7 @@ _Output VoidPtr HeFileSystemMgr::Read(_Input const Char* name, _Input NodePtr no
}
_Output Bool HeFileSystemMgr::Seek(NodePtr node, SizeT off) {
- NE_UNUSED(node);
- NE_UNUSED(off);
+ if (!node || !off) return false;
return false;
}
@@ -249,16 +256,18 @@ _Output Bool HeFileSystemMgr::Seek(NodePtr node, SizeT off) {
/// @param node
/// @return kFileMgrNPos if invalid, else current offset.
_Output SizeT HeFileSystemMgr::Tell(NodePtr node) {
- NE_UNUSED(node);
- return kFileMgrNPos;
+ if (!node) return kFileMgrNPos;
+ SizeT pos = 0ULL;
+ return pos;
}
/// @brief Rewinds the catalog
/// @param node
/// @return False if invalid, nah? calls Seek(node, 0).
_Output Bool HeFileSystemMgr::Rewind(NodePtr node) {
- NE_UNUSED(node);
- return kFileMgrNPos;
+ if (!node) return kFileMgrNPos;
+
+ return 0;
}
/// @brief Returns the parser of OpenHeFS.
diff --git a/src/kernel/src/HeapMgr.cpp b/src/kernel/src/HeapMgr.cpp
index 6eb21df0..9ebf8e3c 100644
--- a/src/kernel/src/HeapMgr.cpp
+++ b/src/kernel/src/HeapMgr.cpp
@@ -15,7 +15,7 @@
Revision History:
10/8/24: FIX: Fix useless long name, alongside a new WR (WriteRead) field.
20/10/24: FIX: Fix mm_new_ and mm_delete_ APIs inside HeapMgr.h header. (amlal)
- 27/01/25: REFACTOR: Reworked code as the memory manager.
+ 27/01/25: REFACTOR: Reworked code as the memory manager.
25/03/25: REFACTOR: Refactor HeapMgr code and log freed address location.
======================================== */
@@ -38,34 +38,24 @@ namespace Detail {
struct PACKED MM_INFORMATION_BLOCK final {
///! @brief 32-bit value which contains the magic number of the heap.
UInt32 fMagic : 24;
-
///! @brief Is the heap present?
UInt8 fPresent : 1;
-
/// @brief Is this value writable?
UInt8 fWriteRead : 1;
-
/// @brief Is this value owned by the user?
UInt8 fUser : 1;
-
/// @brief Is this a page pointer?
UInt8 fPage : 1;
-
/// @brief 32-bit CRC checksum.
UInt32 fCRC32;
-
/// @brief 64-bit Allocation flags.
UInt16 fFlags;
-
/// @brief 64-bit pointer size.
SizeT fSize;
-
/// @brief 64-bit target offset pointer.
UIntPtr fOffset;
-
- /// @brief Padding.
+ /// @brief Padding count.
UInt32 fPad;
-
/// @brief Padding bytes for header.
UInt8 fPadding[kHeapMgrAlignSz];
};
@@ -77,14 +67,8 @@ namespace Detail {
if (!heap_ptr) return false;
IntPtr base_ptr = ((IntPtr) heap_ptr) - sizeof(Detail::MM_INFORMATION_BLOCK);
-
/// Add that check in case we're having an integer underflow. ///
-
- if (base_ptr < 0) {
- return false;
- }
-
- return true;
+ return base_ptr < 1;
}
typedef MM_INFORMATION_BLOCK* MM_INFORMATION_BLOCK_PTR;
@@ -101,7 +85,6 @@ _Output VoidPtr mm_alloc_ptr(SizeT sz, Bool wr, Bool user, SizeT pad_amount) {
auto sz_fix = sz;
if (sz_fix == 0) return nullptr;
-
sz_fix += sizeof(Detail::MM_INFORMATION_BLOCK);
auto wrapper = kPageMgr.Request(wr, user, No, sz_fix, pad_amount);
@@ -110,6 +93,8 @@ _Output VoidPtr mm_alloc_ptr(SizeT sz, Bool wr, Bool user, SizeT pad_amount) {
reinterpret_cast<Detail::MM_INFORMATION_BLOCK_PTR>(wrapper.VirtualAddress() +
sizeof(Detail::MM_INFORMATION_BLOCK));
+ if (!heap_info_ptr) return nullptr;
+
heap_info_ptr->fSize = sz_fix;
heap_info_ptr->fMagic = kHeapMgrMagic;
heap_info_ptr->fCRC32 = 0U; // dont fill it for now.
@@ -132,10 +117,10 @@ _Output VoidPtr mm_alloc_ptr(SizeT sz, Bool wr, Bool user, SizeT pad_amount) {
return result;
}
-/// @brief Makes a page heap.
+/// @brief Controls the page's heap.
/// @param heap_ptr the pointer to make a page heap.
/// @return kErrorSuccess if successful, otherwise an error code.
-_Output Int32 mm_make_page(VoidPtr heap_ptr) {
+ _Output Int32 mm_ctl_page(VoidPtr heap_ptr, const Bool enable) {
if (Detail::mm_check_ptr_address(heap_ptr) == No) return kErrorHeapNotPresent;
Detail::MM_INFORMATION_BLOCK_PTR heap_info_ptr =
@@ -144,11 +129,7 @@ _Output Int32 mm_make_page(VoidPtr heap_ptr) {
if (!heap_info_ptr) return kErrorHeapNotPresent;
- heap_info_ptr->fPage = true;
-
- (Void)(kout << "HeapMgr: Registered page from heap address: "
- << hex_number(reinterpret_cast<UIntPtr>(heap_info_ptr)) << kendl);
-
+ heap_info_ptr->fPage = enable;
return kErrorSuccess;
}
diff --git a/src/libDDK/DriverKit/Device.h b/src/libDDK/DriverKit/Device.h
index 5f26d5d5..468b259b 100644
--- a/src/libDDK/DriverKit/Device.h
+++ b/src/libDDK/DriverKit/Device.h
@@ -15,13 +15,20 @@ struct _DDK_DEVICE;
#define DDK_TYPE_FILE (2)
#define DDK_TYPE_DEVICE (3)
-#define DDK_SUB_TYPE_TCP (1)
-#define DDK_SUB_TYPE_UDP (2)
-#define DDK_SUB_TYPE_BT (3)
+#define DDK_SUB_TYPE_TCP (1) /* TCP/IP */
+#define DDK_SUB_TYPE_UDP (2) /* Datagram */
+#define DDK_SUB_TYPE_BT (3) /* Bluetooth */
+
+/// @brief This enum takes care of the network stack.
+enum {
+ DDK_NET_DO_NOT_FLUSH,
+ DDK_NET_FLUSH_NOW,
+ DDK_NET_AUTO_FLUSH,
+};
/// @brief Kernel Device driver.
typedef struct _DDK_DEVICE DDK_FINAL {
- char d_name[DDK_DEVICE_NAME_LEN]; // the device name. Could be /./DEVICE_NAME/
+ char d_name[DDK_DEVICE_NAME_LEN]; // the device name. Could be /./DEVICE_NAME/
int d_type;
int d_subtype;
void* (*d_read)(void* arg, int len); // read from device.
diff --git a/src/libDDK/DriverKit/ObjectKit/DriverKit.h b/src/libDDK/DriverKit/ObjectKit/DriverKit.h
index 697d6a59..bfb749a6 100644
--- a/src/libDDK/DriverKit/ObjectKit/DriverKit.h
+++ b/src/libDDK/DriverKit/ObjectKit/DriverKit.h
@@ -5,7 +5,7 @@
#ifndef DRIVERKIT_DDK_H
#define DRIVERKIT_DDK_H
-#include <DriverKit/ObjectKit/Checksum.h>
#include <DriverKit/ObjectKit/Base.h>
+#include <DriverKit/ObjectKit/Checksum.h>
#endif