Blame src/libpfm4/lib/pfmlib_intel_x86_priv.h

Packit Service a1973e
/*
Packit Service a1973e
 * Copyright (c) 2009 Google, Inc
Packit Service a1973e
 * Contributed by Stephane Eranian <eranian@gmail.com>
Packit Service a1973e
 *
Packit Service a1973e
 * Permission is hereby granted, free of charge, to any person obtaining a copy
Packit Service a1973e
 * of this software and associated documentation files (the "Software"), to deal
Packit Service a1973e
 * in the Software without restriction, including without limitation the rights
Packit Service a1973e
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
Packit Service a1973e
 * of the Software, and to permit persons to whom the Software is furnished to do so,
Packit Service a1973e
 * subject to the following conditions:
Packit Service a1973e
 *
Packit Service a1973e
 * The above copyright notice and this permission notice shall be included in all
Packit Service a1973e
 * copies or substantial portions of the Software.
Packit Service a1973e
 *
Packit Service a1973e
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
Packit Service a1973e
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
Packit Service a1973e
 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
Packit Service a1973e
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Packit Service a1973e
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
Packit Service a1973e
 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit Service a1973e
 *
Packit Service a1973e
 * This file is part of libpfm, a performance monitoring support library for
Packit Service a1973e
 * applications on Linux.
Packit Service a1973e
 */
Packit Service a1973e
#ifndef __PFMLIB_INTEL_X86_PRIV_H__
Packit Service a1973e
#define __PFMLIB_INTEL_X86_PRIV_H__
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * This file contains the definitions used for all Intel X86 processors
Packit Service a1973e
 */
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * maximum number of unit masks groups per event
Packit Service a1973e
 */
Packit Service a1973e
#define INTEL_X86_NUM_GRP	8
Packit Service a1973e
#define INTEL_X86_MAX_FILTERS	3
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * unit mask description
Packit Service a1973e
 */
Packit Service a1973e
typedef struct {
Packit Service a1973e
	const char		*uname; /* unit mask name */
Packit Service a1973e
	const char		*udesc; /* unit umask description */
Packit Service a1973e
	const char		*uequiv;/* name of event from which this one is derived, NULL if none */
Packit Service a1973e
	uint64_t		ucntmsk;/* supported counters for umask (if set, supersedes cntmsk) */
Packit Service a1973e
	uint64_t		ucode;  /* unit mask code */
Packit Service a1973e
	uint64_t		ufilters[INTEL_X86_MAX_FILTERS]; /* extra encoding for event */
Packit Service a1973e
	unsigned int		uflags;	/* unit mask flags */
Packit Service a1973e
	unsigned short		umodel; /* only available on this PMU model */
Packit Service a1973e
	unsigned short		grpid;	/* unit mask group id */
Packit Service a1973e
	unsigned int		modhw;	/* hardwired modifiers, cannot be changed */
Packit Service a1973e
	unsigned int		umodmsk_req; /* bitmask of required modifiers */
Packit Service a1973e
} intel_x86_umask_t;
Packit Service a1973e
Packit Service a1973e
#define INTEL_X86_MAX_GRPID	((unsigned short)(~0))
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * event description
Packit Service a1973e
 */
Packit Service a1973e
typedef struct {
Packit Service a1973e
	const char			*name;	/* event name */
Packit Service a1973e
	const char			*desc;	/* event description */
Packit Service a1973e
	const char			*equiv;	/* name of event from which this one is derived, NULL if none */
Packit Service a1973e
	uint64_t			cntmsk;	/* supported counters */
Packit Service a1973e
	unsigned int			code; 	/* event code */
Packit Service a1973e
	unsigned int			numasks;/* number of umasks */
Packit Service a1973e
	unsigned int			flags;	/* flags */
Packit Service a1973e
	unsigned int			modmsk;	/* bitmask of modifiers for this event */
Packit Service a1973e
	unsigned int			modmsk_req; /* bitmask of required modifiers */
Packit Service a1973e
	unsigned short			ngrp;	/* number of unit masks groups */
Packit Service a1973e
	unsigned short			model;	/*  only available on this PMU model */
Packit Service a1973e
	const intel_x86_umask_t		*umasks; /* umask desc */
Packit Service a1973e
} intel_x86_entry_t;
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * pme_flags value (event and unit mask)
Packit Service a1973e
 */
Packit Service a1973e
#define INTEL_X86_NCOMBO		0x0001	/* unit masks within group cannot be combined */
Packit Service a1973e
#define INTEL_X86_FALLBACK_GEN		0x0002	/* fallback from fixed to generic counter possible */
Packit Service a1973e
#define INTEL_X86_PEBS			0x0004 	/* event supports PEBS or at least one umask supports PEBS */
Packit Service a1973e
#define INTEL_X86_DFL			0x0008	/* unit mask is default choice */
Packit Service a1973e
#define INTEL_X86_GRP_EXCL		0x0010	/* only one unit mask group can be selected */
Packit Service a1973e
#define INTEL_X86_NHM_OFFCORE		0x0020	/* Nehalem/Westmere offcore_response */
Packit Service a1973e
#define INTEL_X86_EXCL_GRP_GT		0x0040	/* exclude use of grp with id > own grp */
Packit Service a1973e
#define INTEL_X86_FIXED			0x0080	/* fixed counter only event */
Packit Service a1973e
#define INTEL_X86_NO_AUTOENCODE		0x0100	/* does not support auto encoding validation */
Packit Service a1973e
#define INTEL_X86_CODE_OVERRIDE		0x0200	/* umask overrides event code */
Packit Service a1973e
#define INTEL_X86_LDLAT			0x0400	/* needs load latency modifier (ldlat) */
Packit Service a1973e
#define INTEL_X86_GRP_DFL_NONE		0x0800	/* ok if umask group defaults to no umask */
Packit Service a1973e
#define INTEL_X86_FRONTEND		0x1000	/* Skylake Precise frontend */
Packit Service a1973e
#define INTEL_X86_FETHR			0x2000	/* precise frontend umask requires threshold modifier (fe_thres) */
Packit Service a1973e
#define INTEL_X86_EXCL_GRP_BUT_0	0x4000	/* exclude all groups except self and grpid = 0 */
Packit Service a1973e
Packit Service a1973e
typedef union pfm_intel_x86_reg {
Packit Service a1973e
	unsigned long long val;			/* complete register value */
Packit Service a1973e
	struct {
Packit Service a1973e
		unsigned long sel_event_select:8;	/* event mask */
Packit Service a1973e
		unsigned long sel_unit_mask:8;		/* unit mask */
Packit Service a1973e
		unsigned long sel_usr:1;		/* user level */
Packit Service a1973e
		unsigned long sel_os:1;			/* system level */
Packit Service a1973e
		unsigned long sel_edge:1;		/* edge detec */
Packit Service a1973e
		unsigned long sel_pc:1;			/* pin control */
Packit Service a1973e
		unsigned long sel_int:1;		/* enable APIC intr */
Packit Service a1973e
		unsigned long sel_anythr:1;		/* measure any thread */
Packit Service a1973e
		unsigned long sel_en:1;			/* enable */
Packit Service a1973e
		unsigned long sel_inv:1;		/* invert counter mask */
Packit Service a1973e
		unsigned long sel_cnt_mask:8;		/* counter mask */
Packit Service a1973e
		unsigned long sel_intx:1;		/* only in tx region */
Packit Service a1973e
		unsigned long sel_intxcp:1;		/* excl. aborted tx region */
Packit Service a1973e
		unsigned long sel_res2:30;
Packit Service a1973e
	} perfevtsel;
Packit Service a1973e
Packit Service a1973e
	struct {
Packit Service a1973e
		unsigned long usel_event:8;	/* event select */
Packit Service a1973e
		unsigned long usel_umask:8;	/* event unit mask */
Packit Service a1973e
		unsigned long usel_res1:1;	/* reserved */
Packit Service a1973e
		unsigned long usel_occ:1;	/* occupancy reset */
Packit Service a1973e
		unsigned long usel_edge:1;	/* edge detection */
Packit Service a1973e
		unsigned long usel_res2:1;	/* reserved */
Packit Service a1973e
		unsigned long usel_int:1;	/* PMI enable */
Packit Service a1973e
		unsigned long usel_res3:1;	/* reserved */
Packit Service a1973e
		unsigned long usel_en:1;	/* enable */
Packit Service a1973e
		unsigned long usel_inv:1;	/* invert */
Packit Service a1973e
		unsigned long usel_cnt_mask:8;	/* counter mask */
Packit Service a1973e
		unsigned long usel_res4:32;	/* reserved */
Packit Service a1973e
	} nhm_unc;
Packit Service a1973e
Packit Service a1973e
	struct {
Packit Service a1973e
		unsigned long usel_en:1;	/* enable */
Packit Service a1973e
		unsigned long usel_res1:1;
Packit Service a1973e
		unsigned long usel_int:1;	/* PMI enable */
Packit Service a1973e
		unsigned long usel_res2:32;
Packit Service a1973e
		unsigned long usel_res3:29;
Packit Service a1973e
	} nhm_unc_fixed;
Packit Service a1973e
Packit Service a1973e
	struct {
Packit Service a1973e
		unsigned long cpl_eq0:1;	/* filter out branches at pl0 */
Packit Service a1973e
		unsigned long cpl_neq0:1;	/* filter out branches at pl1-pl3 */
Packit Service a1973e
		unsigned long jcc:1;		/* filter out condition branches */
Packit Service a1973e
		unsigned long near_rel_call:1;	/* filter out near relative calls */
Packit Service a1973e
		unsigned long near_ind_call:1;	/* filter out near indirect calls */
Packit Service a1973e
		unsigned long near_ret:1;	/* filter out near returns */
Packit Service a1973e
		unsigned long near_ind_jmp:1;	/* filter out near unconditional jmp/calls */
Packit Service a1973e
		unsigned long near_rel_jmp:1;	/* filter out near uncoditional relative jmp */
Packit Service a1973e
		unsigned long far_branch:1;	/* filter out far branches */ 
Packit Service a1973e
		unsigned long reserved1:23;	/* reserved */
Packit Service a1973e
		unsigned long reserved2:32;	/* reserved */
Packit Service a1973e
	} nhm_lbr_select;
Packit Service a1973e
} pfm_intel_x86_reg_t;
Packit Service a1973e
Packit Service a1973e
#define INTEL_X86_ATTR_K	0 /* kernel (0) */
Packit Service a1973e
#define INTEL_X86_ATTR_U	1 /* user (1, 2, 3) */
Packit Service a1973e
#define INTEL_X86_ATTR_E	2 /* edge */
Packit Service a1973e
#define INTEL_X86_ATTR_I	3 /* invert */
Packit Service a1973e
#define INTEL_X86_ATTR_C	4 /* counter mask */
Packit Service a1973e
#define INTEL_X86_ATTR_T	5 /* any thread */
Packit Service a1973e
#define INTEL_X86_ATTR_LDLAT	6 /* load latency threshold */
Packit Service a1973e
#define INTEL_X86_ATTR_INTX	7 /* in transaction */
Packit Service a1973e
#define INTEL_X86_ATTR_INTXCP	8 /* not aborted transaction */
Packit Service a1973e
#define INTEL_X86_ATTR_FETHR	9 /* precise frontend latency theshold */
Packit Service a1973e
Packit Service a1973e
#define _INTEL_X86_ATTR_U	(1 << INTEL_X86_ATTR_U)
Packit Service a1973e
#define _INTEL_X86_ATTR_K	(1 << INTEL_X86_ATTR_K)
Packit Service a1973e
#define _INTEL_X86_ATTR_I	(1 << INTEL_X86_ATTR_I)
Packit Service a1973e
#define _INTEL_X86_ATTR_E	(1 << INTEL_X86_ATTR_E)
Packit Service a1973e
#define _INTEL_X86_ATTR_C  	(1 << INTEL_X86_ATTR_C)
Packit Service a1973e
#define _INTEL_X86_ATTR_T  	(1 << INTEL_X86_ATTR_T)
Packit Service a1973e
#define _INTEL_X86_ATTR_INTX	(1 << INTEL_X86_ATTR_INTX)
Packit Service a1973e
#define _INTEL_X86_ATTR_INTXCP	(1 << INTEL_X86_ATTR_INTXCP)
Packit Service a1973e
#define _INTEL_X86_ATTR_LDLAT	(1 << INTEL_X86_ATTR_LDLAT)
Packit Service a1973e
#define _INTEL_X86_ATTR_FETHR	(1 << INTEL_X86_ATTR_FETHR)
Packit Service a1973e
Packit Service a1973e
#define INTEL_X86_ATTRS \
Packit Service a1973e
	(_INTEL_X86_ATTR_I|_INTEL_X86_ATTR_E|_INTEL_X86_ATTR_C|_INTEL_X86_ATTR_U|_INTEL_X86_ATTR_K)
Packit Service a1973e
Packit Service a1973e
#define INTEL_V1_ATTRS 		INTEL_X86_ATTRS
Packit Service a1973e
#define INTEL_V2_ATTRS 		INTEL_X86_ATTRS
Packit Service a1973e
#define INTEL_FIXED2_ATTRS	(_INTEL_X86_ATTR_U|_INTEL_X86_ATTR_K)
Packit Service a1973e
#define INTEL_FIXED3_ATTRS	(INTEL_FIXED2_ATTRS|_INTEL_X86_ATTR_T)
Packit Service a1973e
#define INTEL_V3_ATTRS 		(INTEL_V2_ATTRS|_INTEL_X86_ATTR_T)
Packit Service a1973e
#define INTEL_V4_ATTRS 		(INTEL_V3_ATTRS | _INTEL_X86_ATTR_INTX | _INTEL_X86_ATTR_INTXCP)
Packit Service a1973e
#define INTEL_SKL_FE_ATTRS 	(INTEL_V4_ATTRS | _INTEL_X86_ATTR_FETHR)
Packit Service a1973e
Packit Service a1973e
/* let's define some handy shortcuts! */
Packit Service a1973e
#define sel_event_select perfevtsel.sel_event_select
Packit Service a1973e
#define sel_unit_mask	 perfevtsel.sel_unit_mask
Packit Service a1973e
#define sel_usr		 perfevtsel.sel_usr
Packit Service a1973e
#define sel_os		 perfevtsel.sel_os
Packit Service a1973e
#define sel_edge	 perfevtsel.sel_edge
Packit Service a1973e
#define sel_pc		 perfevtsel.sel_pc
Packit Service a1973e
#define sel_int		 perfevtsel.sel_int
Packit Service a1973e
#define sel_en		 perfevtsel.sel_en
Packit Service a1973e
#define sel_inv		 perfevtsel.sel_inv
Packit Service a1973e
#define sel_cnt_mask	 perfevtsel.sel_cnt_mask
Packit Service a1973e
#define sel_anythr	 perfevtsel.sel_anythr
Packit Service a1973e
#define sel_intx	 perfevtsel.sel_intx
Packit Service a1973e
#define sel_intxcp	 perfevtsel.sel_intxcp
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * shift relative to start of register
Packit Service a1973e
 */
Packit Service a1973e
#define INTEL_X86_EDGE_BIT	18
Packit Service a1973e
#define INTEL_X86_ANY_BIT	21
Packit Service a1973e
#define INTEL_X86_INV_BIT	23
Packit Service a1973e
#define INTEL_X86_CMASK_BIT	24
Packit Service a1973e
Packit Service a1973e
#define INTEL_X86_MOD_EDGE	(1 << INTEL_X86_EDGE_BIT)
Packit Service a1973e
#define INTEL_X86_MOD_ANY	(1 << INTEL_X86_ANY_BIT)
Packit Service a1973e
#define INTEL_X86_MOD_INV	(1 << INTEL_X86_INV_BIT)
Packit Service a1973e
Packit Service a1973e
/* intel x86 core PMU supported plm */
Packit Service a1973e
#define INTEL_X86_PLM	(PFM_PLM0|PFM_PLM3)
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * Intel x86 specific pmu flags (pmu->flags 16 MSB)
Packit Service a1973e
 */
Packit Service a1973e
#define INTEL_X86_PMU_FL_ECMASK 0x10000	/* edge requires cmask >=1 */
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * default ldlat value for PEBS-LL events. Used when ldlat= is missing
Packit Service a1973e
 */
Packit Service a1973e
#define INTEL_X86_LDLAT_DEFAULT	3 /* default ldlat value in core cycles */
Packit Service a1973e
#define INTEL_X86_FETHR_DEFAULT	1 /* default fe_thres value in core cycles */
Packit Service a1973e
Packit Service a1973e
typedef struct {
Packit Service a1973e
	unsigned int version:8;
Packit Service a1973e
	unsigned int num_cnt:8;
Packit Service a1973e
	unsigned int cnt_width:8;
Packit Service a1973e
	unsigned int ebx_length:8;
Packit Service a1973e
} intel_x86_pmu_eax_t;
Packit Service a1973e
Packit Service a1973e
typedef struct {
Packit Service a1973e
	unsigned int num_cnt:6;
Packit Service a1973e
	unsigned int cnt_width:6;
Packit Service a1973e
	unsigned int reserved:20;
Packit Service a1973e
} intel_x86_pmu_edx_t;
Packit Service a1973e
Packit Service a1973e
typedef struct {
Packit Service a1973e
	unsigned int no_core_cycle:1;
Packit Service a1973e
	unsigned int no_inst_retired:1;
Packit Service a1973e
	unsigned int no_ref_cycle:1;
Packit Service a1973e
	unsigned int no_llc_ref:1;
Packit Service a1973e
	unsigned int no_llc_miss:1;
Packit Service a1973e
	unsigned int no_br_retired:1;
Packit Service a1973e
	unsigned int no_br_mispred_retired:1;
Packit Service a1973e
	unsigned int reserved:25;
Packit Service a1973e
} intel_x86_pmu_ebx_t;
Packit Service a1973e
Packit Service a1973e
typedef struct {
Packit Service a1973e
	int model;
Packit Service a1973e
	int family; /* 0 means nothing detected yet */
Packit Service a1973e
	int arch_version;
Packit Service a1973e
	int stepping;
Packit Service a1973e
} pfm_intel_x86_config_t;
Packit Service a1973e
Packit Service a1973e
extern pfm_intel_x86_config_t pfm_intel_x86_cfg;
Packit Service a1973e
Packit Service a1973e
extern const pfmlib_attr_desc_t intel_x86_mods[];
Packit Service a1973e
Packit Service a1973e
static inline int
Packit Service a1973e
intel_x86_eflag(void *this, int idx, int flag)
Packit Service a1973e
{
Packit Service a1973e
	const intel_x86_entry_t *pe = this_pe(this);
Packit Service a1973e
	return !!(pe[idx].flags & flag);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static inline int
Packit Service a1973e
is_model_event(void *this, int pidx)
Packit Service a1973e
{
Packit Service a1973e
	pfmlib_pmu_t *pmu = this;
Packit Service a1973e
	const intel_x86_entry_t *pe = this_pe(this);
Packit Service a1973e
	unsigned short model;
Packit Service a1973e
Packit Service a1973e
	model = pe[pidx].model;
Packit Service a1973e
Packit Service a1973e
	return model == 0 || model == pmu->pmu;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static inline int
Packit Service a1973e
is_model_umask(void *this, int pidx, int attr)
Packit Service a1973e
{
Packit Service a1973e
	pfmlib_pmu_t *pmu = this;
Packit Service a1973e
	const intel_x86_entry_t *pe = this_pe(this);
Packit Service a1973e
	const intel_x86_entry_t *ent;
Packit Service a1973e
	unsigned short model;
Packit Service a1973e
Packit Service a1973e
	ent = pe + pidx;
Packit Service a1973e
	model = ent->umasks[attr].umodel;
Packit Service a1973e
Packit Service a1973e
	return model == 0 || model == pmu->pmu;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static inline int
Packit Service a1973e
intel_x86_uflag(void *this, int idx, int attr, int flag)
Packit Service a1973e
{
Packit Service a1973e
	const intel_x86_entry_t *pe = this_pe(this);
Packit Service a1973e
	return !!(pe[idx].umasks[attr].uflags & flag);
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
static inline unsigned int
Packit Service a1973e
intel_x86_num_umasks(void *this, int pidx)
Packit Service a1973e
{
Packit Service a1973e
	pfmlib_pmu_t *pmu = this;
Packit Service a1973e
	const intel_x86_entry_t *pe = this_pe(this);
Packit Service a1973e
	unsigned int i, n = 0;
Packit Service a1973e
	unsigned short model;
Packit Service a1973e
Packit Service a1973e
	/*
Packit Service a1973e
	 * some umasks may be model specific
Packit Service a1973e
	 */
Packit Service a1973e
	for (i = 0; i < pe[pidx].numasks; i++) {
Packit Service a1973e
		model = pe[pidx].umasks[i].umodel;
Packit Service a1973e
		if (model && model != pmu->pmu)
Packit Service a1973e
			continue;
Packit Service a1973e
		n++;
Packit Service a1973e
	}
Packit Service a1973e
	return n;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * find actual index of umask based on attr_idx
Packit Service a1973e
 */
Packit Service a1973e
static inline int
Packit Service a1973e
intel_x86_attr2umask(void *this, int pidx, int attr_idx)
Packit Service a1973e
{
Packit Service a1973e
	const intel_x86_entry_t *pe = this_pe(this);
Packit Service a1973e
	unsigned int i;
Packit Service a1973e
Packit Service a1973e
	for (i = 0; i < pe[pidx].numasks; i++) {
Packit Service a1973e
Packit Service a1973e
		if (!is_model_umask(this, pidx, i))
Packit Service a1973e
			continue;
Packit Service a1973e
Packit Service a1973e
		if (attr_idx == 0)
Packit Service a1973e
			break;
Packit Service a1973e
		attr_idx--;
Packit Service a1973e
	}
Packit Service a1973e
	return i;
Packit Service a1973e
}
Packit Service a1973e
Packit Service a1973e
extern int pfm_intel_x86_detect(void);
Packit Service a1973e
extern int pfm_intel_x86_add_defaults(void *this, pfmlib_event_desc_t *e, unsigned int msk, uint64_t *umask, unsigned short max_grpid, int excl_grp_but_0);
Packit Service a1973e
Packit Service a1973e
extern int pfm_intel_x86_event_is_valid(void *this, int pidx);
Packit Service a1973e
extern int pfm_intel_x86_get_encoding(void *this, pfmlib_event_desc_t *e);
Packit Service a1973e
extern int pfm_intel_x86_get_event_first(void *this);
Packit Service a1973e
extern int pfm_intel_x86_get_event_next(void *this, int idx);
Packit Service a1973e
extern int pfm_intel_x86_get_event_umask_first(void *this, int idx);
Packit Service a1973e
extern int pfm_intel_x86_get_event_umask_next(void *this, int idx, int attr);
Packit Service a1973e
extern int pfm_intel_x86_validate_table(void *this, FILE *fp);
Packit Service a1973e
extern int pfm_intel_x86_get_event_attr_info(void *this, int idx, int attr_idx, pfmlib_event_attr_info_t *info);
Packit Service a1973e
extern int pfm_intel_x86_get_event_info(void *this, int idx, pfm_event_info_t *info);
Packit Service a1973e
extern int pfm_intel_x86_valid_pebs(pfmlib_event_desc_t *e);
Packit Service a1973e
extern int pfm_intel_x86_perf_event_encoding(pfmlib_event_desc_t *e, void *data);
Packit Service a1973e
extern int pfm_intel_x86_perf_detect(void *this);
Packit Service a1973e
extern unsigned int pfm_intel_x86_get_event_nattrs(void *this, int pidx);
Packit Service a1973e
extern int intel_x86_attr2mod(void *this, int pidx, int attr_idx);
Packit Service a1973e
Packit Service a1973e
extern int pfm_intel_x86_get_perf_encoding(void *this, pfmlib_event_desc_t *e);
Packit Service a1973e
extern int pfm_intel_nhm_unc_get_perf_encoding(void *this, pfmlib_event_desc_t *e);
Packit Service a1973e
extern void pfm_intel_x86_perf_validate_pattrs(void *this, pfmlib_event_desc_t *e);
Packit Service a1973e
extern int pfm_intel_x86_can_auto_encode(void *this, int pidx, int uidx);
Packit Service a1973e
extern int pfm_intel_x86_model_detect(void *this);
Packit Service a1973e
Packit Service a1973e
#endif /* __PFMLIB_INTEL_X86_PRIV_H__ */