Major reworking to integrate cache coloring into the kernel.
[akaros.git] / kern / include / colored_caches.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 ROS_KERN_COLORED_CACHES_H
9 #define ROS_KERN_COLORED_CACHES_H
10
11 #include <arch/types.h>
12
13 /****************** Cache Structures ********************/
14 typedef struct Cache {
15         size_t wa;
16         size_t sz_k;
17         size_t clsz;
18         
19         //Added as optimization (derived from above);
20         size_t num_colors;
21 } cache_t;
22
23 typedef struct AvailableCaches {
24         uint8_t l1 : 1;
25         uint8_t l2 : 1;
26         uint8_t l3 : 1;
27 } available_caches_t;
28
29 /******** Externally visible global variables ************/
30 extern cache_t l1,l2,l3;
31 extern available_caches_t available_caches;
32
33 /************** Cache Related Functions  *****************/
34 void cache_init();
35 void init_cache_properties(cache_t *c, size_t sz_k, size_t wa, size_t clsz);
36 size_t get_page_color(uintptr_t page, cache_t *c);
37 size_t get_offset_in_cache_line(uintptr_t addr, cache_t *c);
38 void print_cache_properties(char *NT lstring, cache_t *c);
39
40 /****************** Cache Properties *********************/
41 size_t get_cache_ways_associative(cache_t *c);
42 size_t get_cache_line_size_bytes(cache_t *c);
43 size_t get_cache_size_bytes(cache_t *c);
44 size_t get_cache_size_kilobytes(cache_t *c);
45 size_t get_cache_size_megabytes(cache_t *c);
46 size_t get_cache_num_offset_bits(cache_t *c);
47 size_t get_cache_num_index_bits(cache_t *c);
48 size_t get_cache_num_tag_bits(cache_t *c);
49 size_t get_cache_num_page_color_bits(cache_t *c);
50 size_t get_cache_bytes_per_line(cache_t *c);
51 size_t get_cache_num_lines(cache_t *c);
52 size_t get_cache_num_sets(cache_t *c);
53 size_t get_cache_lines_per_set(cache_t *c);
54 size_t get_cache_lines_per_page(cache_t *c);
55 size_t get_cache_bytes_per_way(cache_t *c);
56 size_t get_cache_lines_per_way(cache_t *c);
57 size_t get_cache_pages_per_way(cache_t *c);
58 size_t get_cache_num_page_colors(cache_t *c);
59
60 #endif // ROS_KERN_COLORED_CACHES_H