Adding SharC annotations. Type checker off
[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 <ros/common.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
28         // Pointer to the last level cache
29         cache_t RO*   llc;
30 } available_caches_t;
31
32 /******** Externally visible global variables ************/
33 extern cache_t RO l1,l2,l3;
34 extern available_caches_t RO available_caches;
35
36 /************** Cache Related Functions  *****************/
37 void cache_init();
38 void init_cache_properties(cache_t RO*c, size_t sz_k, size_t wa, size_t clsz);
39 size_t get_page_color(uintptr_t page, cache_t RO*c);
40 size_t get_offset_in_cache_line(uintptr_t addr, cache_t RO*c);
41 void print_cache_properties(char *NT lstring, cache_t RO*c);
42
43 /****************** Cache Properties *********************/
44 inline size_t get_cache_ways_associative(cache_t RO*c);
45 inline size_t get_cache_line_size_bytes(cache_t RO*c);
46 inline size_t get_cache_size_bytes(cache_t RO*c);
47 inline size_t get_cache_size_kilobytes(cache_t RO*c);
48 inline size_t get_cache_size_megabytes(cache_t RO*c);
49 inline size_t get_cache_num_offset_bits(cache_t RO*c);
50 inline size_t get_cache_num_index_bits(cache_t RO*c);
51 inline size_t get_cache_num_tag_bits(cache_t RO*c);
52 inline size_t get_cache_num_page_color_bits(cache_t RO*c);
53 inline size_t get_cache_bytes_per_line(cache_t RO*c);
54 inline size_t get_cache_num_lines(cache_t RO*c);
55 inline size_t get_cache_num_sets(cache_t RO*c);
56 inline size_t get_cache_lines_per_set(cache_t RO*c);
57 inline size_t get_cache_lines_per_page(cache_t RO*c);
58 inline size_t get_cache_bytes_per_way(cache_t RO*c);
59 inline size_t get_cache_lines_per_way(cache_t RO*c);
60 inline size_t get_cache_pages_per_way(cache_t RO*c);
61 inline size_t get_cache_num_page_colors(cache_t RO*c);
62
63 #endif // ROS_KERN_COLORED_CACHES_H
64