/* ======================================== Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. ======================================== */ #ifndef INC_KERNEL_HEAP_H #define INC_KERNEL_HEAP_H /// @date 30/01/24 /// @file: HeapMgr.h /// @brief: Memory allocation support for the NeKernel. #include #include #include namespace Kernel { /// @brief Declare pointer as free. /// @param heap_ptr the pointer. /// @return a status code regarding the deallocation. Int32 mm_free_ptr(VoidPtr heap_ptr); /// @brief Check if pointer is a valid Kernel pointer. /// @param heap_ptr the pointer /// @return if it exists it returns true. Boolean mm_is_valid_ptr(VoidPtr heap_ptr); /// @brief Allocate chunk of memory. /// @param sz Size of pointer /// @param wr Read Write bit. /// @param user User enable bit. /// @return The newly allocated pointer, or nullptr. VoidPtr mm_alloc_ptr(SizeT sz, Bool wr, Bool user, SizeT pad_amount = 0); /// @brief Protect the heap with a CRC value. /// @param heap_ptr pointer. /// @return if it valid: point has crc now., otherwise fail. 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); /// @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_set_ptr_flags(VoidPtr heap_ptr, UInt64 flags); /// @brief Gets the flags of a heap header. /// @param heap_ptr the pointer to get. UInt64 mm_get_ptr_flags(VoidPtr heap_ptr); } // namespace Kernel #include #endif // !INC_KERNEL_HEAP_H