// SPDX-License-Identifier: MIT #include #include #include #include #include #include struct page* vm_pfndb = nullptr; // TODO: Replace with actual allocator. static 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())); 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(); } size_t mem_high_shift() { return arch_mem_level_bits() * arch_mem_num_levels() + arch_mem_page_bits(); }