#ifndef _JOVE_MEMORY_H #define _JOVE_MEMORY_H 1 #define KiB 1024ULL #define MiB (KiB * KiB) #define GiB (MiB * KiB) #define TiB (GiB * KiB) #include #include #include "arch/page.h" typedef uintptr_t physptr_t; extern const uintptr_t USERLAND_MEMORY_BASE; extern const uintptr_t USERLAND_MEMORY_LIMIT; extern const uintptr_t PHYSMAP_MEMORY_BASE; extern const uintptr_t PHYSMAP_MEMORY_LIMIT; extern const uintptr_t KERNEL_MEMORY_BASE; extern const uintptr_t KERNEL_MEMORY_LIMIT; page_mapping_t vm_pd_mapping_get(page_directory_t *pd, uintptr_t addr); void vm_pd_mapping_set(page_directory_t *pd, page_mapping_t mapping, uintptr_t addr); void vm_pd_ensure(page_directory_t *pd, uintptr_t from, uintptr_t to, page_flags_t flg); page_mapping_t vm_mapping_get(uintptr_t addr); void vm_mapping_set(page_mapping_t mapping, uintptr_t virt); void vm_ensure(uintptr_t from, uintptr_t to, page_flags_t flg); physptr_t vm_tophys(uintptr_t virt); physptr_t vm_tophys_koff(uintptr_t virt); uintptr_t pm_tovirt(physptr_t phys); physptr_t pm_alloc(size_t pages); void pm_reserve(physptr_t start, physptr_t end); void pm_release(physptr_t start, physptr_t end); void mm_setup_early(void); void vm_setup_early(void); void mm_setup(void); void vm_setup(void); void* kmalloc(size_t width); void *krealloc(void *ptr, size_t width); void kfree(void *ptr); #endif