perf: Use a user_data blob for perf_event (XCC)
[akaros.git] / kern / arch / x86 / colored_caches.c
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 #include <error.h>
9 #include <bitmask.h>
10 #include <colored_caches.h>
11 #include <process.h>
12
13 // Static global variable of caches to assign to the available caches struct
14 static cache_t l1,l2,l3;
15
16 // Convenient global variable for accessing the last level cache
17 cache_t* llc_cache;
18
19 // Global variables
20 available_caches_t available_caches;
21
22 /************** Cache Related Functions  *****************/
23 void cache_init()
24 {
25         // Initialize the caches available on this system.
26         // TODO: Should call out to something reading the acpi tables from
27         // memory, or something similar.  For now, just initialize them inline
28         available_caches.l1 = &l1;
29         available_caches.l2 = &l2;
30         available_caches.l3 = &l3;
31         llc_cache = &l3;
32 #ifdef CONFIG_BOXBORO
33         /* level (ignoring L1I), size, ways, CL size) */
34         init_cache_properties(&l1,   32,  8, 64);       /* 1 color */
35         init_cache_properties(&l2,  256,  8, 64);       /* 16 colors */
36         init_cache_properties(&l3, 24576, 24, 64);      /* 256 colors */
37 #else /* Core i7 */
38         init_cache_properties(&l1,   32,  8, 64);       /* 1 color */
39         init_cache_properties(&l2,  256,  8, 64);       /* 16 colors */
40         init_cache_properties(&l3, 8192, 16, 64);       /* 128 colors */
41 #endif /* CONFIG_E1000_ON_BOXBORO */
42         printk("Cache init successful\n");
43 }
44
45 void cache_color_alloc_init()
46 {
47         init_free_cache_colors_map(&l1);
48         init_free_cache_colors_map(&l2);
49         init_free_cache_colors_map(&l3);
50 }
51