perf_counter.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #ifndef _ASM_X86_PERF_COUNTER_H
  2. #define _ASM_X86_PERF_COUNTER_H
  3. /*
  4. * Performance counter hw details:
  5. */
  6. #define X86_PMC_MAX_GENERIC 8
  7. #define X86_PMC_MAX_FIXED 3
  8. #define MSR_ARCH_PERFMON_PERFCTR0 0xc1
  9. #define MSR_ARCH_PERFMON_PERFCTR1 0xc2
  10. #define MSR_ARCH_PERFMON_EVENTSEL0 0x186
  11. #define MSR_ARCH_PERFMON_EVENTSEL1 0x187
  12. #define ARCH_PERFMON_EVENTSEL0_ENABLE (1 << 22)
  13. #define ARCH_PERFMON_EVENTSEL_INT (1 << 20)
  14. #define ARCH_PERFMON_EVENTSEL_OS (1 << 17)
  15. #define ARCH_PERFMON_EVENTSEL_USR (1 << 16)
  16. #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL 0x3c
  17. #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x00 << 8)
  18. #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX 0
  19. #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT \
  20. (1 << (ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX))
  21. #define ARCH_PERFMON_BRANCH_MISSES_RETIRED 6
  22. /*
  23. * Intel "Architectural Performance Monitoring" CPUID
  24. * detection/enumeration details:
  25. */
  26. union cpuid10_eax {
  27. struct {
  28. unsigned int version_id:8;
  29. unsigned int num_counters:8;
  30. unsigned int bit_width:8;
  31. unsigned int mask_length:8;
  32. } split;
  33. unsigned int full;
  34. };
  35. #ifdef CONFIG_PERF_COUNTERS
  36. extern void init_hw_perf_counters(void);
  37. extern void perf_counters_lapic_init(int nmi);
  38. #else
  39. static inline void init_hw_perf_counters(void) { }
  40. static inline void perf_counters_lapic_init(int nmi) { }
  41. #endif
  42. #endif /* _ASM_X86_PERF_COUNTER_H */