X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=bootcensus;a=blobdiff_plain;f=src%2Fmem.h;h=40de366809fb2298a4474d8ce6e784ea7511ca84;hp=f571d172999c6e84fb05af02293551fa0216cf8d;hb=81c11bdd80190ec319a82b0402173cfb65fcbf72;hpb=331b4c6f7dace93a6207a1f294f13bcc52a96cf9 diff --git a/src/mem.h b/src/mem.h index f571d17..40de366 100644 --- a/src/mem.h +++ b/src/mem.h @@ -18,6 +18,31 @@ along with this program. If not, see . #ifndef MEM_H_ #define MEM_H_ +#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(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); + #endif /* MEM_H_ */