diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2010-05-20 19:16:30 -0500 |
---|---|---|
committer | Patrick Williams <iawillia@us.ibm.com> | 2010-05-20 19:16:30 -0500 |
commit | d9d7e6c7247aaf5d2721d08a365e9c51ec18c870 (patch) | |
tree | 16f882f7d77eb293ac0417b43bb5680ee149efbd /src/include/kernel/pagemgr.H | |
parent | d5a43e2fa43f8178aaa7ca67a9615d3ab4e68dbb (diff) | |
download | talos-hostboot-d9d7e6c7247aaf5d2721d08a365e9c51ec18c870.tar.gz talos-hostboot-d9d7e6c7247aaf5d2721d08a365e9c51ec18c870.zip |
Create page manager.
Diffstat (limited to 'src/include/kernel/pagemgr.H')
-rw-r--r-- | src/include/kernel/pagemgr.H | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/include/kernel/pagemgr.H b/src/include/kernel/pagemgr.H new file mode 100644 index 000000000..1d7193b22 --- /dev/null +++ b/src/include/kernel/pagemgr.H @@ -0,0 +1,42 @@ +#ifndef __KERNEL_PAGEMGR_H +#define __KERNEL_PAGEMGR_H + +#include <stdint.h> + +/** @class PageManager + * @brief Manages the allocation of memory pages. + */ + +class PageManager +{ + public: + static void* allocatePage(size_t n = 1); + static void freePage(void*, size_t n = 1); + + enum + { + PAGESIZE = 4096, + MEMLEN = 8 * 1024 * 1024, + + BUCKETS = 16, + }; + + protected: + PageManager(); + ~PageManager() {}; + + private: + void* _allocatePage(size_t); + void _freePage(void*, size_t); + + struct page_t + { + page_t* next_page; + }; + page_t* first_page[BUCKETS]; + + page_t* pop_bucket(size_t); + void push_bucket(page_t*, size_t); +}; + +#endif |