#include "memory.h" #include "zone.h" #include "lib/jove.h" void mem_phys_reserve(physptr_t start, physptr_t end) { size_t zone = mem_zone_for(start); size_t limit = mem_zone_bound_upper(zone); if(end > limit) { mem_phys_reserve(limit, end); end = limit; } mem_zone_resv(MEM_ZONE_STANDARD, start, end); } void mem_phys_release(physptr_t start, physptr_t end) { size_t zone = mem_zone_for(start); size_t limit = mem_zone_bound_upper(zone); if(end > limit) { mem_phys_release(limit, end); end = limit; } mem_zone_free(MEM_ZONE_STANDARD, start, end); } physptr_t mem_phys_alloc(size_t pages) { if(mem_zone_pages_free(MEM_ZONE_HIGHER) >= pages) return mem_zone_alloc(MEM_ZONE_HIGHER, pages); if(mem_zone_pages_free(MEM_ZONE_STANDARD) >= pages) return mem_zone_alloc(MEM_ZONE_STANDARD, pages); kpanic("Kernel ran out of physical memory!\n"); }