X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=bootcensus;a=blobdiff_plain;f=src%2Fmem.h;h=40de366809fb2298a4474d8ce6e784ea7511ca84;hp=219bf5f080b1a2c1a33224da017e2dfce8e3b33f;hb=81c11bdd80190ec319a82b0402173cfb65fcbf72;hpb=79be435fcf61613617025a2c4ef5fddf00a09178 diff --git a/src/mem.h b/src/mem.h index 219bf5f..40de366 100644 --- a/src/mem.h +++ b/src/mem.h @@ -1,6 +1,48 @@ +/* +pcboot - bootable PC demo/game kernel +Copyright (C) 2018 John Tsiombikas + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +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_ */