39#define sel_event_mask perfsel.sel_event_mask
40#define sel_unit_mask perfsel.sel_unit_mask
41#define sel_usr perfsel.sel_usr
42#define sel_os perfsel.sel_os
43#define sel_edge perfsel.sel_edge
44#define sel_pc perfsel.sel_pc
45#define sel_int perfsel.sel_int
46#define sel_en perfsel.sel_en
47#define sel_inv perfsel.sel_inv
48#define sel_cnt_mask perfsel.sel_cnt_mask
54#define PFMLIB_I386_P6_HAS_COMBO(_e) ((i386_pe[_e].pme_flags & PFMLIB_I386_P6_UMASK_COMBO) != 0)
56#define PFMLIB_I386_P6_ALL_FLAGS \
57 (PFM_I386_P6_SEL_INV|PFM_I386_P6_SEL_EDGE)
68#define I386_P6_SEL_BASE 0x186
69#define I386_P6_CTR_BASE 0xc1
83 if (strcmp(buffer,
"GenuineIntel"))
111 model = atoi(buffer);
146 model = atoi(buffer);
185 model = atoi(buffer);
226 model = atoi(buffer);
262 unsigned int i, j, cnt, k, umask;
272 for (j=0; j < cnt; j++) {
285 for(j=0; j < cnt; j++) {
290 DPRINT(
"event=%d invalid plm=%d\n", e[j].event, e[j].plm);
295 DPRINT(
"event=%d invalid flags=0x%lx\n", e[j].event, e[j].flags);
303 DPRINT(
"event does not support unit mask combination\n");
310 for(j=0; j < cnt; j++) {
326 for (j=0,
i=0; j < cnt ; j++ ) {
340 for (j=0; j < cnt ; j++) {
384 __pfm_vbprintf(
"[PERFEVTSEL%u(pmc%u)=0x%lx emask=0x%x umask=0x%x os=%d usr=%d en=%d int=%d inv=%d edge=%d cnt_mask=%d] %s\n",
414 __pfm_vbprintf(
"[PERFEVTSEL0(pmc0)=0x%lx] required for enabling counters\n", reg.
val);
451 memset(counters, 0,
sizeof(*counters));
594 .
pmu_name =
"Intel P6 Processor Family",
static pme_i386_p6_entry_t i386_ppro_pe[]
#define PME_I386_PM_CPU_CLK_UNHALTED
#define PME_I386_PM_INST_RETIRED
#define PME_I386_PII_INST_RETIRED
#define PME_I386_PIII_CPU_CLK_UNHALTED
#define PME_I386_PPRO_EVENT_COUNT
#define PME_I386_PII_EVENT_COUNT
static pme_i386_p6_entry_t i386_pII_pe[]
static pme_i386_p6_entry_t i386_pIII_pe[]
#define PME_I386_PPRO_CPU_CLK_UNHALTED
#define PME_I386_PII_CPU_CLK_UNHALTED
#define PME_I386_PIII_EVENT_COUNT
#define PME_I386_PM_EVENT_COUNT
#define PME_I386_PIII_INST_RETIRED
static pme_i386_p6_entry_t i386_pm_pe[]
#define PME_I386_PPRO_INST_RETIRED
#define PFMLIB_ERR_FEATCOMB
#define PFMLIB_I386_PM_PMU
static int pfm_regmask_set(pfmlib_regmask_t *h, unsigned int b)
#define PFMLIB_INTEL_PPRO_PMU
#define PFMLIB_INTEL_PII_PMU
static int pfm_regmask_clr(pfmlib_regmask_t *h, unsigned int b)
static int pfm_regmask_andnot(pfmlib_regmask_t *dst, pfmlib_regmask_t *h1, pfmlib_regmask_t *h2)
#define PFMLIB_ERR_TOOMANY
static int pfm_regmask_isset(pfmlib_regmask_t *h, unsigned int b)
#define PFMLIB_ERR_NOASSIGN
#define PFMLIB_I386_P6_PMU
#define PFMLIB_ERR_NOTSUPP
static int pfm_i386_p6_get_event_description(unsigned int ev, char **str)
static void pfm_i386_p6_get_impl_perfctr(pfmlib_regmask_t *impl_pmds)
static int pfm_i386_p6_get_event_code(unsigned int i, unsigned int cnt, int *code)
static int pfm_i386_p6_dispatch_counters(pfmlib_input_param_t *inp, pfmlib_i386_p6_input_param_t *mod_in, pfmlib_output_param_t *outp)
static void pfm_i386_p6_get_impl_perfsel(pfmlib_regmask_t *impl_pmcs)
static char * pfm_i386_p6_get_event_mask_name(unsigned int ev, unsigned int midx)
static void pfm_i386_p6_get_event_counters(unsigned int j, pfmlib_regmask_t *counters)
static int pfm_i386_p6_get_inst_retired(pfmlib_event_t *e)
static int i386_p6_inst_retired_event
static void pfm_i386_p6_get_hw_counter_width(unsigned int *width)
pfm_pmu_support_t i386_pii_support
static int pfm_i386_p6_detect_ppro(void)
static unsigned int pfm_i386_p6_get_num_event_masks(unsigned int ev)
pfm_pmu_support_t i386_pm_support
static int pfm_i386_p6_detect_pm(void)
static int pfm_i386_p6_dispatch_events(pfmlib_input_param_t *inp, void *model_in, pfmlib_output_param_t *outp, void *model_out)
#define PFMLIB_I386_P6_ALL_FLAGS
static char * pfm_i386_p6_get_event_name(unsigned int i)
static int i386_p6_cycle_event
static int pfm_i386_p6_init_piii(void)
pfm_pmu_support_t i386_ppro_support
static int pfm_i386_detect_common(void)
pfm_pmu_support_t i386_p6_support
static int pfm_i386_p6_get_event_mask_desc(unsigned int ev, unsigned int midx, char **str)
static void pfm_i386_p6_get_impl_counters(pfmlib_regmask_t *impl_counters)
static int pfm_i386_p6_init_pii(void)
static int pfm_i386_p6_init_ppro(void)
#define PFMLIB_I386_P6_HAS_COMBO(_e)
static int pfm_i386_p6_detect_piii(void)
static int pfm_i386_p6_get_cycle_event(pfmlib_event_t *e)
static int pfm_i386_p6_get_event_mask_code(unsigned int ev, unsigned int midx, unsigned int *code)
static pme_i386_p6_entry_t * i386_pe
static int pfm_i386_p6_detect_pii(void)
static int pfm_i386_p6_init_pm(void)
#define PMU_I386_P6_COUNTER_WIDTH
#define PFM_I386_P6_SEL_INV
#define PMU_I386_P6_NUM_COUNTERS
#define PFM_I386_P6_SEL_EDGE
#define PMU_I386_P6_NUM_PERFCTR
#define PMU_I386_P6_NUM_PERFSEL
#define PFMLIB_I386_P6_CTR0_ONLY
#define PFMLIB_I386_P6_CTR1_ONLY
int __pfm_getcpuinfo_attr(const char *attr, char *ret_buf, size_t maxlen)
void __pfm_vbprintf(const char *fmt,...)
#define DPRINT(fmt, a...)
unsigned int unit_masks[PFMLIB_MAX_MASKS_PER_EVENT]
pfm_i386_p6_cnt_mask_t cnt_mask
pfmlib_reg_t pfp_pmds[PFMLIB_MAX_PMDS]
pfmlib_reg_t pfp_pmcs[PFMLIB_MAX_PMCS]
unsigned int pfp_pmc_count
unsigned int pfp_pmd_count
unsigned long long reg_value
unsigned long reg_alt_addr
unsigned long long reg_addr
pfmlib_regmask_bits_t bits[PFMLIB_REG_BV]
pme_i386_p6_umask_t pme_umasks[PFMLIB_I386_P6_MAX_UMASK]
unsigned long sel_unit_mask
unsigned long sel_cnt_mask
unsigned long sel_event_mask