#pragma once #include #include namespace MemoryManager { void init(); Result protect_kernel_sections(); Result alloc_frame(); Result free_frame(u64 frame); void lock_frame(u64 frame); void lock_frames(u64 frames, usize count); Result remap(u64 address, usize count, int flags); Result remap_unaligned(u64 address, usize count, int flags); bool validate_readable_page(u64 address); bool validate_writable_page(u64 address); bool validate_userspace_string(u64 address); bool copy_to_user(void* user, const void* kernel, usize size); template bool copy_to_user_typed(T* user, const T* kernel) { return copy_to_user(user, kernel, sizeof(T)); } Result map_frames_at(u64 virt, u64 phys, usize count, int flags); Result alloc_at(u64 virt, usize count, int flags); Result alloc_for_kernel(usize count, int flags); Result get_kernel_mapping_for_frames(u64 phys, usize count, int flags); Result unmap_owned(u64 virt, usize count); Result unmap_owned_and_free_vm(u64 virt, usize count); Result unmap_weak(u64 virt, usize count); Result unmap_weak_and_free_vm(u64 virt, usize count); usize free(); usize used(); usize reserved(); usize total(); }