#ifndef JOVE_MEM_H #define JOVE_MEM_H 1 #define PAGESIZE 4096ULL #define KiB 1024ULL #define MiB (KiB * KiB) #define GiB (MiB * KiB) #define TiB (GiB * KiB) #include #include #include typedef uintptr_t physptr_t; #include "slab.h" /*Linear*/ void mem_paging_setup(void); physptr_t mem_linear_tophys(uintptr_t virt); /**Check if pointer is within valid memory. * @param ptr pointer to check. * @return if the pointer is invalid.*/ bool mem_check_ptr(const void *ptr); /**Make sure the range indicated is available in memory. * If necessary, allocate new pages using the passed flags * @param from start of the range. * @param to end of the range. * @param rw flag to mark page is writeable. * @param user flag to mark page as user accessable*/ void mem_ensure_range(uintptr_t from, uintptr_t to, bool rw, bool user); void mem_slab_setup(void); void mem_slabcache_new(struct SlabCache *cache, char *name, size_t objsize); void* mem_slab_alloc(struct SlabCache *cache); void mem_slab_free(struct SlabCache *cache, void *ptr); void* mem_alloc(size_t width); void mem_free(void *ptr); /*Physical*/ physptr_t mem_phys_take4k(void); void mem_phys_reserve(physptr_t start, size_t len); #endif