27 lines
672 B
C
27 lines
672 B
C
#include <zinnia/alloc.h>
|
|
#include <zinnia/atomic.h>
|
|
#include <zinnia/utils.h>
|
|
#include <zinnia/virt.h>
|
|
#include <stddef.h>
|
|
|
|
struct page* vm_pfndb = nullptr;
|
|
|
|
// TODO: Replace with actual allocator.
|
|
|
|
static _Atomic(size_t) mapping_offset = 0;
|
|
|
|
uintptr_t vm_alloc(size_t length) {
|
|
uintptr_t base = arch_mem_mapping_addr();
|
|
size_t offset = atomic_fetch_add(&mapping_offset, ALIGN_UP(length, arch_mem_page_size()), ATOMIC_ACQUIRE);
|
|
|
|
return base + offset;
|
|
}
|
|
|
|
void vm_free(uintptr_t ptr, size_t length) {
|
|
// TODO
|
|
}
|
|
|
|
uintptr_t vm_page_addr(struct page* page) {
|
|
return (((uintptr_t)page - (uintptr_t)vm_pfndb) / sizeof(struct page)) * arch_mem_page_size();
|
|
}
|