47 lines
1.6 KiB
C
47 lines
1.6 KiB
C
/** vim: set ft=cpp.doxygen :
|
|
* @file sys/vmalloc.h
|
|
* @brief Contiguous virtual memory range management functions
|
|
*/
|
|
#pragma once
|
|
#include "sys/mm.h"
|
|
|
|
#define VM_ALLOC_USER (1 << 0)
|
|
#define VM_ALLOC_WRITE (1 << 1)
|
|
|
|
/**
|
|
* @brief Find a free contiguous memory range inside a given one
|
|
* in a virtual memory space.
|
|
* @param pd Virtual memory space
|
|
* @param from Start of the range to allocate from
|
|
* @param to End of the range to allocate from
|
|
* @param npages Size of the needed range in 4K pages
|
|
* @return Address of the resulting range on success,
|
|
* MM_NADDR if such range cannot be allocated
|
|
*/
|
|
uintptr_t vmfind(const mm_space_t pd, uintptr_t from, uintptr_t to, size_t npages);
|
|
|
|
/**
|
|
* @brief Allocate a contiguous virtual memory range in a space
|
|
* within `from'..`to' limits and map it to a set of
|
|
* physical pages (which may not be contiguous).
|
|
* @param pd Virtual memory space
|
|
* @param from Start of the range to allocate from
|
|
* @param to End of the range to allocate from
|
|
* @param npages Count of 4K pages to allocate
|
|
* @param flags:
|
|
* * VM_ALLOC_USER - The range is available for userspace
|
|
* * VM_ALLOC_WRITE - The range is writable
|
|
* @return Virtual address of the resulting range on success,
|
|
* MM_NADDR otherwise
|
|
*/
|
|
uintptr_t vmalloc(mm_space_t pd, uintptr_t from, uintptr_t to, size_t npages, int flags);
|
|
|
|
/**
|
|
* @brief Deallocate a virtual memory range and physical pages
|
|
* it's mapped to.
|
|
* @param pd Virtual memory space
|
|
* @param addr Address of the beginning of the range
|
|
* @param npages Size of the range in 4K pages
|
|
*/
|
|
void vmfree(mm_space_t pd, uintptr_t addr, size_t npages);
|