Luna/kernel/src/memory/MemoryManager.h
apio caa3fe8c45
MemoryManager: Add validate_userspace_string()
A bit crude, should be replaced by a strdup_from_user() helper to avoid touching userspace memory directly.
But it'll do for now.
2023-01-05 22:39:09 +01:00

42 lines
1.1 KiB
C++

#pragma once
#include <luna/Result.h>
#include <luna/Types.h>
namespace MemoryManager
{
void init();
Result<void> protect_kernel_sections();
Result<u64> alloc_frame();
Result<void> free_frame(u64 frame);
void lock_frame(u64 frame);
void lock_frames(u64 frames, usize count);
Result<void> remap(u64 address, usize count, int flags);
Result<void> 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);
Result<void> map_frames_at(u64 virt, u64 phys, usize count, int flags);
Result<u64> alloc_at(u64 virt, usize count, int flags);
Result<u64> alloc_for_kernel(usize count, int flags);
Result<u64> get_kernel_mapping_for_frames(u64 phys, usize count, int flags);
Result<void> unmap_owned(u64 virt, usize count);
Result<void> unmap_owned_and_free_vm(u64 virt, usize count);
Result<void> unmap_weak(u64 virt, usize count);
Result<void> unmap_weak_and_free_vm(u64 virt, usize count);
usize free();
usize used();
usize reserved();
usize total();
}