59#define FIRST_POWER_PMU PFMLIB_PPC970_PMU
180 counters->
bits[0] = 0;
183 counters->
bits[0] |= (1 <<
i);
201 group_vec[group / 64] &= ~(1ULL << (group % 64));
218 bit = ffsll(group_vec[
i]);
220 return (bit - 1) + (
i * 64);
373 int counters_used = 0;
374 unsigned long long mmcr0_val, mmcr1_val;
405 while (group != -1) {
426 counters_used |= (1 << j);
439 printf (
"libpfm: Internal error. Unable to find counter in group.\n");
458 if (! (counters_used & (1 <<
i))) {
463 mmcr0_val &= ~mmcr0_counter_mask[
i];
465 mmcr1_val &= ~mmcr1_counter_mask[
i];
474 if ((counters_used & ((1 << (5 - 1)) | (1 << (6 - 1)))) == 0)
490 mmcr0_val &= ~MMCR0_FCP;
494 mmcr0_val &= ~MMCR0_FCS;
498 mmcr0_val &= ~MMCR0_FCHV;
747 unsigned int mask,
char **desc)
754 unsigned int mask,
unsigned int *code)
static const pme_power_entry_t power5p_pe[]
#define POWER5p_PME_PM_INST_CMPL
#define POWER5p_PME_PM_RUN_CYC
static const pmg_power_group_t power5p_groups[]
#define POWER5p_PME_EVENT_COUNT
static const pmg_power_group_t power5_groups[]
#define POWER5_PME_PM_INST_CMPL
#define POWER5_PME_EVENT_COUNT
static const pme_power_entry_t power5_pe[]
#define POWER5_PME_PM_CYC
#define POWER6_PME_EVENT_COUNT
#define POWER6_PME_PM_INST_CMPL
#define POWER6_PME_PM_RUN_CYC
static const pme_power_entry_t power6_pe[]
static const pmg_power_group_t power6_groups[]
static const pme_power_entry_t power7_pe[]
static pmg_power_group_t power7_groups[]
#define POWER7_PME_PM_INST_CMPL
#define POWER7_PME_PM_RUN_CYC
#define POWER7_PME_EVENT_COUNT
#define PPC970_PME_PM_CYC
static const pme_power_entry_t ppc970_pe[]
static const pmg_power_group_t ppc970_groups[]
#define PPC970_PME_EVENT_COUNT
#define PPC970_PME_PM_INST_CMPL
#define PFMLIB_POWER4_PMU
#define PFMLIB_POWER6_PMU
#define PFMLIB_PPC970_PMU
#define PFMLIB_POWER5p_PMU
#define PFMLIB_POWER5_PMU
#define PFMLIB_POWER7_PMU
#define PFMLIB_PPC970MP_PMU
#define PFMLIB_ERR_NOINIT
#define PFMLIB_ERR_NOASSIGN
#define PFMLIB_ERR_NOTSUPP
#define PFMLIB_UNKNOWN_PMU
static int pfm_gen_powerpc_get_cycle_event(pfmlib_event_t *e)
static void intersect_groups(unsigned long long *result, const unsigned long long *operand)
static int get_num_event_counters()
static unsigned long long power4_mmcr1_counter_mask[POWER4_NUM_EVENT_COUNTERS]
static int get_group_event_id(int group, int counter)
static unsigned long long * mmcr1_counter_mask
static unsigned long long power4_mmcr0_counter_mask[POWER4_NUM_EVENT_COUNTERS]
static unsigned long long get_mmcr0(int group)
static unsigned long long get_mmcra(int group)
static void pfm_gen_powerpc_get_event_counters(unsigned int event, pfmlib_regmask_t *counters)
static int pfm_gen_powerpc_dispatch_events(pfmlib_input_param_t *input, void *model_input, pfmlib_output_param_t *output, void *model_output)
static unsigned gq_pmd_priv_vec[8]
static void pfm_gen_powerpc_get_impl_pmcs(pfmlib_regmask_t *impl_pmcs)
static const int num_group_vec[]
static unsigned int pfm_gen_powerpc_get_num_event_masks(unsigned int event)
static int first_group(unsigned long long *group_vec)
static void pfm_gen_powerpc_get_impl_counters(pfmlib_regmask_t *impl_counters)
static unsigned long long * mmcr1_counter_off_val
static char * pfm_gen_powerpc_get_event_mask_name(unsigned int event, unsigned int mask)
static const pme_power_entry_t * pe
static const unsigned long long * get_group_vector(int event)
static int get_event_id(int event, int counter)
static unsigned long long power5_mmcr1_counter_mask[POWER5_NUM_EVENT_COUNTERS]
static unsigned long long power4_mmcr1_counter_off_val[POWER4_NUM_EVENT_COUNTERS]
static unsigned long long power5_mmcr0_counter_off_val[POWER5_NUM_EVENT_COUNTERS]
static int pfm_gen_powerpc_get_event_mask_desc(unsigned int event, unsigned int mask, char **desc)
static unsigned long long power4_mmcr0_counter_off_val[POWER4_NUM_EVENT_COUNTERS]
static unsigned gr_pmd_priv_vec[6]
static unsigned long long power5_mmcr0_counter_mask[POWER5_NUM_EVENT_COUNTERS]
static char * get_event_name(int event)
static int get_num_control_regs()
static int pfm_gen_powerpc_get_event_code(unsigned int event, unsigned int pmd, int *code)
static void remove_group(unsigned long long *group_vec, int group)
static unsigned long long ppc970_mmcr1_counter_off_val[POWER4_NUM_EVENT_COUNTERS]
static int pfm_gen_powerpc_pmu_detect(void)
static int pfm_gen_powerpc_get_inst_retired(pfmlib_event_t *e)
static int pfm_gen_powerpc_get_event_desc(unsigned int event, char **desc)
static void pfm_gen_powerpc_get_impl_pmds(pfmlib_regmask_t *impl_pmds)
static const pmg_power_group_t * groups
static unsigned gs_pmd_priv_vec[6]
static unsigned long long ppc970_mmcr0_counter_off_val[POWER4_NUM_EVENT_COUNTERS]
static const int event_count[]
pfm_pmu_support_t gen_powerpc_support
static unsigned long long mmcr0_fc5_6_mask
static unsigned long long * mmcr0_counter_off_val
static char * pfm_gen_powerpc_get_event_name(unsigned int event)
static unsigned long long * mmcr0_counter_mask
static unsigned long long power5_mmcr1_counter_off_val[POWER5_NUM_EVENT_COUNTERS]
static void pfm_gen_powerpc_get_hw_counter_width(unsigned int *width)
static char * get_long_desc(int event)
static unsigned long long get_mmcr1(int group)
static int pfm_gen_powerpc_get_event_mask_code(unsigned int event, unsigned int mask, unsigned int *code)
#define POWER4_NUM_GROUP_VEC
#define POWER4_NUM_EVENT_COUNTERS
#define POWER4_NUM_CONTROL_REGS
#define POWER5p_NUM_EVENT_COUNTERS
#define POWER5p_NUM_GROUP_VEC
#define POWER5p_NUM_CONTROL_REGS
#define POWER5_NUM_CONTROL_REGS
#define POWER5_NUM_GROUP_VEC
#define POWER5_NUM_EVENT_COUNTERS
#define POWER6_NUM_GROUP_VEC
#define POWER6_NUM_CONTROL_REGS
#define POWER6_NUM_EVENT_COUNTERS
#define POWER7_NUM_CONTROL_REGS
#define POWER7_NUM_EVENT_COUNTERS
#define POWER7_NUM_GROUP_VEC
#define PPC970_NUM_EVENT_COUNTERS
#define PPC970_NUM_CONTROL_REGS
#define PPC970_NUM_GROUP_VEC
#define PPC970MP_NUM_CONTROL_REGS
#define PPC970MP_NUM_GROUP_VEC
#define PPC970MP_NUM_EVENT_COUNTERS
#define POWER4_PME_PM_INST_CMPL
static const pme_power_entry_t power4_pe[]
#define POWER4_PME_EVENT_COUNT
#define POWER4_PME_PM_CYC
static const pmg_power_group_t power4_groups[]
#define __is_processor(pv)
static const pme_power_entry_t ppc970mp_pe[]
#define PPC970MP_PME_EVENT_COUNT
#define PPC970MP_PME_PM_CYC
#define PPC970MP_PME_PM_INST_CMPL
static const pmg_power_group_t ppc970mp_groups[]
unsigned int unit_masks[PFMLIB_MAX_MASKS_PER_EVENT]
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 int reg_reserved1
unsigned long long reg_value
unsigned long reg_alt_addr
unsigned long long reg_addr
pfmlib_regmask_bits_t bits[PFMLIB_REG_BV]
const int * pme_event_ids
const unsigned long long * pme_group_vector
unsigned long long pmg_mmcra
unsigned long long pmg_mmcr0
const int * pmg_event_ids
unsigned long long pmg_mmcr1