Files
kernel/include/sys/vmalloc.h
T
2019-10-12 13:40:48 +03:00

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);