Moves 9ns endian helpers
[akaros.git] / kern / arch / x86 / perfmon.h
1 #ifndef ROS_INC_PERFMON_H
2 #define ROS_INC_PERFMON_H
3 #include <ros/common.h>
4 #include <arch/x86.h>
5
6 #define IA32_PMC_BASE 0xC1
7 #define IA32_PERFEVTSEL_BASE 0x186
8
9 #define LLCACHE_EVENT 0x2E
10 #define LLCACHE_MISS_MASK 0x41
11 #define LLCACHE_REF_MASK 0x4F
12 #define ENABLE_PERFCTR 0x00400000
13 #define DISABLE_PERFCTR 0xFFAFFFFF
14
15 static inline uint64_t read_pmc(uint32_t index)
16 {
17         uint32_t edx, eax;
18         asm volatile("rdpmc" : "=d"(edx), "=a"(eax) : "c"(index));
19         return (uint64_t)edx << 32 | eax;
20 }
21
22 void perfmon_init();
23
24 #endif /* ROS_INC_PERFMON_H */