Rewrote cache colored page allocation functions
[akaros.git] / kern / include / page_alloc.h
1 /* Copyright (c) 2009 The Regents of the University  of California. 
2  * See the COPYRIGHT files at the top of this source tree for full 
3  * license information.
4  * 
5  * Kevin Klues <klueska@cs.berkeley.edu>    
6  */
7  
8 #ifndef PAGE_ALLOC_H
9 #define PAGE_ALLOC_H
10
11 #include <atomic.h>
12 #include <sys/queue.h>
13 #include <ros/error.h>
14 #include <arch/mmu.h>
15 #include <colored_page_alloc.h>
16
17 /****************** Page Structures *********************/
18 struct Page;
19 typedef size_t ppn_t;
20 typedef struct Page page_t;
21 typedef LIST_HEAD(PageList, Page) page_list_t;
22 typedef LIST_ENTRY(Page) page_list_entry_t;
23
24 struct Page {
25         page_list_entry_t page_link;
26         
27         size_t num_cons_links;
28     size_t page_ref;
29 };
30
31
32 /******** Externally visible global variables ************/
33 extern uint16_t llc_num_colors;
34 extern page_list_t *COUNT(llc_num_colors) colored_page_free_list;
35 extern spinlock_t colored_page_free_list_lock;
36
37 /*************** Functional Interface *******************/
38 void page_alloc_init(void);
39 error_t page_alloc(page_t *SAFE *page);
40 error_t page_alloc_specific(page_t *SAFE *page, size_t ppn);
41 error_t l1_page_alloc(page_t *SAFE *page, size_t color);
42 error_t l2_page_alloc(page_t *SAFE *page, size_t color);
43 error_t l3_page_alloc(page_t *SAFE *page, size_t color);
44 error_t page_free(page_t *SAFE page);
45 void page_incref(page_t *SAFE page);
46 void page_decref(page_t *SAFE page);
47 size_t page_getref(page_t *SAFE page);
48 void page_setref(page_t *SAFE page, size_t val);
49 int page_is_free(size_t ppn);
50
51 #endif //PAGE_ALLOC_H
52