X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=bootcensus;a=blobdiff_plain;f=src%2Fmem.h;h=40de366809fb2298a4474d8ce6e784ea7511ca84;hp=a17607b0e4f67f73dd474d9ab9a4a861dcbab0b9;hb=81c11bdd80190ec319a82b0402173cfb65fcbf72;hpb=a7a5ced32b6e0bd417ee7839fac245de29a81fe5 diff --git a/src/mem.h b/src/mem.h index a17607b..40de366 100644 --- a/src/mem.h +++ b/src/mem.h @@ -20,12 +20,28 @@ along with this program. If not, see . #define ADDR_TO_PAGE(x) ((uint32_t)(x) >> 12) #define PAGE_TO_ADDR(x) ((uint32_t)(x) << 12) +#define PAGE_TO_PTR(x) ((void*)PAGE_TO_ADDR(x)) + +#define BYTES_TO_PAGES(x) (((uint32_t)(x) + 4095) >> 12) + +/* for alloc_ppage/alloc_ppages */ +enum { + MEM_HEAP = 0, /* start searching from the bottom */ + MEM_STACK = 1 /* start searching from the top */ +}; void init_mem(void); -int alloc_ppage(void); +int alloc_ppage(int area); void free_ppage(int pg); +/* allocate a number of consecutive pages */ +int alloc_ppages(int count, int area); +void free_ppages(int pg0, int count); + +/* allocate a specific range of pages. + * Fails (and returns -1) if any page in the requested range is not free. + */ int alloc_ppage_range(int start, int size); int free_ppage_range(int start, int size);