diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/kernel/KernelKit/HeapMgr.h | 2 | ||||
| -rw-r--r-- | src/kernel/KernelKit/IFS.h | 2 | ||||
| -rw-r--r-- | src/kernel/src/FS/OpenHeFS+FileMgr.cpp | 29 | ||||
| -rw-r--r-- | src/kernel/src/HeapMgr.cpp | 35 | ||||
| -rw-r--r-- | src/libDDK/DriverKit/Device.h | 15 | ||||
| -rw-r--r-- | src/libDDK/DriverKit/ObjectKit/DriverKit.h | 2 |
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 |
