38 lines
686 B
C
38 lines
686 B
C
#include "lvalloc.h"
|
|
#include "paging.h"
|
|
#include "defines.h"
|
|
#include "stdlib.h"
|
|
|
|
void* lvalloc(size_t size)
|
|
{
|
|
u64 addr;
|
|
|
|
addr = (u64)lvalloc_get_next_addr();
|
|
page_map((void*)addr,(void*)addr,size);
|
|
|
|
lmem->lv_current += (ROUND2_UP(size,12) >> 12);
|
|
|
|
kmemzero((void*)addr,ROUND2_UP(size,12));
|
|
return (void*)addr;
|
|
}
|
|
|
|
void* lvalloc_get_next_addr()
|
|
{
|
|
return (void*)((u64)lmem->lv_start+(lmem->lv_current<<12));
|
|
}
|
|
|
|
void lvalloc_push()
|
|
{
|
|
lmem->lv_stack[--lmem->lv_sp] = lmem->lv_current;
|
|
}
|
|
|
|
void lvalloc_pop()
|
|
{
|
|
lmem->lv_current = lmem->lv_stack[lmem->lv_sp++];
|
|
}
|
|
|
|
void lvalloc_init()
|
|
{
|
|
lmem->lv_sp = MAX_LV_SSIZE;
|
|
lmem->lv_start = (u8*)(lmem->kernel_phys_addr + KERNEL_SIZE);
|
|
}
|