PAPI 7.1.0.0
Loading...
Searching...
No Matches
pfmlib.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2001-2007 Hewlett-Packard Development Company, L.P.
3 * Contributed by Stephane Eranian <eranian@hpl.hp.com>
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9 * of the Software, and to permit persons to whom the Software is furnished to do so,
10 * subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in all
13 * copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
17 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
19 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
20 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 */
22#ifndef __PFMLIB_H__
23#define __PFMLIB_H__
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28#include <stdio.h>
29#include <inttypes.h>
30
31#include <perfmon/pfmlib_os.h>
32#include <perfmon/pfmlib_comp.h>
33
34#define PFMLIB_VERSION (3 << 16 | 10)
35#define PFMLIB_MAJ_VERSION(v) ((v)>>16)
36#define PFMLIB_MIN_VERSION(v) ((v) & 0xffff)
37
38/*
39 * Maximum number of PMCs/PMDs supported by the library (especially bitmasks)
40 */
41#define PFMLIB_MAX_PMCS 512 /* maximum number of PMCS supported by the library */
42#define PFMLIB_MAX_PMDS 512 /* maximum number of PMDS supported by the library */
43
44/*
45 * privilege level mask (mask can be combined)
46 * The interpretation of the level is specific to each
47 * architecture. Checkout the architecture specific header
48 * file for more details.
49 */
50#define PFM_PLM0 0x1 /* priv level 0 */
51#define PFM_PLM1 0x2 /* priv level 1 */
52#define PFM_PLM2 0x4 /* priv level 2 */
53#define PFM_PLM3 0x8 /* priv level 3 */
54
55/*
56 * type used to describe a set of bits in the mask (container type)
57 */
58typedef unsigned long pfmlib_regmask_bits_t;
59
60/*
61 * how many elements do we need to represent all the PMCs and PMDs (rounded up)
62 */
63#if PFMLIB_MAX_PMCS > PFMLIB_MAX_PMDS
64#define PFMLIB_REG_MAX PFMLIB_MAX_PMCS
65#else
66#define PFMLIB_REG_MAX PFMLIB_MAX_PMDS
67#endif
68
69#ifndef SWIG
70#define __PFMLIB_REG_BV_BITS (sizeof(pfmlib_regmask_bits_t)<<3)
71#define PFMLIB_BVSIZE(x) (((x)+(__PFMLIB_REG_BV_BITS)-1) / __PFMLIB_REG_BV_BITS)
72#define PFMLIB_REG_BV PFMLIB_BVSIZE(PFMLIB_REG_MAX)
73#endif
74
75typedef struct {
78
79
80#define PFMLIB_MAX_MASKS_PER_EVENT 48 /* maximum number of unit masks per event */
81
82/*
83 * event definition for pfmlib_input_param_t
84 */
85typedef struct {
86 unsigned int event; /* event descriptor */
87 unsigned int plm; /* event privilege level mask */
88 unsigned long flags; /* per-event flag */
89 unsigned int unit_masks[PFMLIB_MAX_MASKS_PER_EVENT]; /* unit-mask identifiers */
90 unsigned int num_masks; /* number of masks specified in 'unit_masks' */
91 unsigned long reserved[2]; /* for future use */
93
94/*
95 * generic register definition
96 */
97typedef struct {
98 unsigned long long reg_value; /* register value */
99 unsigned long long reg_addr; /* hardware register addr or index */
100 unsigned int reg_num; /* logical register index (perfmon2) */
101 unsigned int reg_reserved1; /* for future use */
102 unsigned long reg_alt_addr; /* alternate hw register addr of index */
104
105/*
106 * library generic input parameters for pfm_dispatch_event()
107 */
108typedef struct {
109 unsigned int pfp_event_count; /* how many events specified (input) */
110 unsigned int pfp_dfl_plm; /* default priv level : used when event.plm==0 */
111 unsigned int pfp_flags; /* set of flags for all events used when event.flags==0*/
112 unsigned int reserved1; /* for future use */
113 pfmlib_event_t pfp_events[PFMLIB_MAX_PMCS]; /* event descriptions */
114 pfmlib_regmask_t pfp_unavail_pmcs; /* bitmask of unavailable PMC registers */
115 unsigned long reserved[6]; /* for future use */
117
118/*
119 * pfp_flags possible values (apply to all events)
120 */
121#define PFMLIB_PFP_SYSTEMWIDE 0x1 /* indicate monitors will be used in a system-wide session */
122
123/*
124 * library generic output parameters for pfm_dispatch_event()
125 */
126typedef struct {
127 unsigned int pfp_pmc_count; /* number of entries in pfp_pmcs */
128 unsigned int pfp_pmd_count; /* number of entries in pfp_pmds */
129 pfmlib_reg_t pfp_pmcs[PFMLIB_MAX_PMCS]; /* PMC registers number and values */
130 pfmlib_reg_t pfp_pmds[PFMLIB_MAX_PMDS]; /* PMD registers numbers */
131 unsigned long reserved[7]; /* for future use */
133
134/*
135 * library configuration options
136 */
137typedef struct {
138 unsigned int pfm_debug:1; /* set in debug mode */
139 unsigned int pfm_verbose:1; /* set in verbose mode */
140 unsigned int pfm_reserved:30;/* for future use */
142
143/*
144 * special data type for libpfm error value used to help
145 * with Python support and in particular for SWIG. By using
146 * a specific type we can detect library calls and trap errors
147 * in one SWIG statement as opposed to having to keep track of
148 * each call individually. Programs can use 'int' safely for
149 * the return value.
150 */
151typedef int pfm_err_t; /* error if !PFMLIB_SUCCESS */
152
154extern pfm_err_t pfm_initialize(void);
155
156extern pfm_err_t pfm_list_supported_pmus(int (*pf)(const char *fmt,...));
157extern pfm_err_t pfm_get_pmu_name(char *name, int maxlen);
158extern pfm_err_t pfm_get_pmu_type(int *type);
159extern pfm_err_t pfm_get_pmu_name_bytype(int type, char *name, size_t maxlen);
161extern pfm_err_t pfm_force_pmu(int type);
162
163/*
164 * pfm_find_event_byname() is obsolete, use pfm_find_event
165 */
166extern pfm_err_t pfm_find_event(const char *str, unsigned int *idx);
167extern pfm_err_t pfm_find_event_byname(const char *name, unsigned int *idx);
168extern pfm_err_t pfm_find_event_bycode(int code, unsigned int *idx);
169extern pfm_err_t pfm_find_event_bycode_next(int code, unsigned int start,
170 unsigned int *next);
171extern pfm_err_t pfm_find_event_mask(unsigned int event_idx, const char *str,
172 unsigned int *mask_idx);
173extern pfm_err_t pfm_find_full_event(const char *str, pfmlib_event_t *e);
174
175extern pfm_err_t pfm_get_max_event_name_len(size_t *len);
176
177extern pfm_err_t pfm_get_num_events(unsigned int *count);
178extern pfm_err_t pfm_get_num_event_masks(unsigned int event_idx,
179 unsigned int *count);
180extern pfm_err_t pfm_get_event_name(unsigned int idx, char *name,
181 size_t maxlen);
183 size_t maxlen);
184extern pfm_err_t pfm_get_event_code(unsigned int idx, int *code);
185extern pfm_err_t pfm_get_event_mask_code(unsigned int idx,
186 unsigned int mask_idx,
187 unsigned int *code);
188extern pfm_err_t pfm_get_event_counters(unsigned int idx,
189 pfmlib_regmask_t *counters);
190extern pfm_err_t pfm_get_event_description(unsigned int idx, char **str);
191extern pfm_err_t pfm_get_event_code_counter(unsigned int idx, unsigned int cnt,
192 int *code);
193extern pfm_err_t pfm_get_event_mask_name(unsigned int event_idx,
194 unsigned int mask_idx,
195 char *name, size_t maxlen);
196extern pfm_err_t pfm_get_event_mask_description(unsigned int event_idx,
197 unsigned int mask_idx,
198 char **desc);
199
201 void *model_in,
203 void *model_out);
204
208extern pfm_err_t pfm_get_num_pmds(unsigned int *num);
209extern pfm_err_t pfm_get_num_pmcs(unsigned int *num);
210extern pfm_err_t pfm_get_num_counters(unsigned int *num);
211
212extern pfm_err_t pfm_get_hw_counter_width(unsigned int *width);
213extern pfm_err_t pfm_get_version(unsigned int *version);
214extern char *pfm_strerror(int code);
217
218/*
219 * Supported PMU family
220 */
221#define PFMLIB_NO_PMU -1 /* PMU unused (forced) */
222#define PFMLIB_UNKNOWN_PMU 0 /* type not yet known (dynamic) */
223#define PFMLIB_GEN_IA64_PMU 1 /* Intel IA-64 architected PMU */
224#define PFMLIB_ITANIUM_PMU 2 /* Intel Itanium */
225#define PFMLIB_ITANIUM2_PMU 3 /* Intel Itanium 2 */
226#define PFMLIB_MONTECITO_PMU 4 /* Intel Dual-Core Itanium 2 9000 */
227#define PFMLIB_AMD64_PMU 16 /* AMD AMD64 (K7, K8, Families 10h, 15h) */
228#define PFMLIB_GEN_IA32_PMU 63 /* Intel architectural PMU for X86 */
229#define PFMLIB_I386_P6_PMU 32 /* Intel PIII (P6 core) */
230#define PFMLIB_PENTIUM4_PMU 33 /* Intel Pentium4/Xeon/EM64T */
231#define PFMLIB_COREDUO_PMU 34 /* Intel Core Duo/Core Solo */
232#define PFMLIB_I386_PM_PMU 35 /* Intel Pentium M */
233#define PFMLIB_CORE_PMU 36 /* obsolete, use PFMLIB_INTEL_CORE_PMU */
234#define PFMLIB_INTEL_CORE_PMU 36 /* Intel Core */
235#define PFMLIB_INTEL_PPRO_PMU 37 /* Intel Pentium Pro */
236#define PFMLIB_INTEL_PII_PMU 38 /* Intel Pentium II */
237#define PFMLIB_INTEL_ATOM_PMU 39 /* Intel Atom */
238#define PFMLIB_INTEL_NHM_PMU 40 /* Intel Nehalem */
239#define PFMLIB_INTEL_WSM_PMU 41 /* Intel Westmere */
240
241#define PFMLIB_MIPS_20KC_PMU 64 /* MIPS 20KC */
242#define PFMLIB_MIPS_24K_PMU 65 /* MIPS 24K */
243#define PFMLIB_MIPS_25KF_PMU 66 /* MIPS 25KF */
244#define PFMLIB_MIPS_34K_PMU 67 /* MIPS 34K */
245#define PFMLIB_MIPS_5KC_PMU 68 /* MIPS 5KC */
246#define PFMLIB_MIPS_74K_PMU 69 /* MIPS 74K */
247#define PFMLIB_MIPS_R10000_PMU 70 /* MIPS R10000 */
248#define PFMLIB_MIPS_R12000_PMU 71 /* MIPS R12000 */
249#define PFMLIB_MIPS_RM7000_PMU 72 /* MIPS RM7000 */
250#define PFMLIB_MIPS_RM9000_PMU 73 /* MIPS RM9000 */
251#define PFMLIB_MIPS_SB1_PMU 74 /* MIPS SB1/SB1A */
252#define PFMLIB_MIPS_VR5432_PMU 75 /* MIPS VR5432 */
253#define PFMLIB_MIPS_VR5500_PMU 76 /* MIPS VR5500 */
254#define PFMLIB_MIPS_ICE9A_PMU 77 /* SiCortex ICE9A */
255#define PFMLIB_MIPS_ICE9B_PMU 78 /* SiCortex ICE9B */
256
257#define PFMLIB_POWERPC_PMU 90 /* POWERPC */
258
259#define PFMLIB_CRAYX2_PMU 96 /* Cray X2 */
260
261#define PFMLIB_CELL_PMU 100 /* CELL */
262
263#define PFMLIB_PPC970_PMU 110 /* IBM PowerPC 970(FX,GX) */
264#define PFMLIB_PPC970MP_PMU 111 /* IBM PowerPC 970MP */
265#define PFMLIB_POWER3_PMU 112 /* IBM POWER3 */
266#define PFMLIB_POWER4_PMU 113 /* IBM POWER4 */
267#define PFMLIB_POWER5_PMU 114 /* IBM POWER5 */
268#define PFMLIB_POWER5p_PMU 115 /* IBM POWER5+ */
269#define PFMLIB_POWER6_PMU 116 /* IBM POWER6 */
270#define PFMLIB_POWER7_PMU 117 /* IBM POWER7 */
271
272#define PFMLIB_SPARC_ULTRA12_PMU 130 /* UltraSPARC I, II, IIi, and IIe */
273#define PFMLIB_SPARC_ULTRA3_PMU 131 /* UltraSPARC III */
274#define PFMLIB_SPARC_ULTRA3I_PMU 132 /* UltraSPARC IIIi and IIIi+ */
275#define PFMLIB_SPARC_ULTRA3PLUS_PMU 133 /* UltraSPARC III+ and IV */
276#define PFMLIB_SPARC_ULTRA4PLUS_PMU 134 /* UltraSPARC IV+ */
277#define PFMLIB_SPARC_NIAGARA1_PMU 135 /* Niagara-1 */
278#define PFMLIB_SPARC_NIAGARA2_PMU 136 /* Niagara-2 */
279
280/*
281 * pfmlib error codes
282 */
283#define PFMLIB_SUCCESS 0 /* success */
284#define PFMLIB_ERR_NOTSUPP -1 /* function not supported */
285#define PFMLIB_ERR_INVAL -2 /* invalid parameters */
286#define PFMLIB_ERR_NOINIT -3 /* library was not initialized */
287#define PFMLIB_ERR_NOTFOUND -4 /* event not found */
288#define PFMLIB_ERR_NOASSIGN -5 /* cannot assign events to counters */
289#define PFMLIB_ERR_FULL -6 /* buffer is full or too small */
290#define PFMLIB_ERR_EVTMANY -7 /* event used more than once */
291#define PFMLIB_ERR_MAGIC -8 /* invalid library magic number */
292#define PFMLIB_ERR_FEATCOMB -9 /* invalid combination of features */
293#define PFMLIB_ERR_EVTSET -10 /* incompatible event sets */
294#define PFMLIB_ERR_EVTINCOMP -11 /* incompatible event combination */
295#define PFMLIB_ERR_TOOMANY -12 /* too many events or unit masks */
296
297#define PFMLIB_ERR_IRRTOOBIG -13 /* code range too big */
298#define PFMLIB_ERR_IRREMPTY -14 /* empty code range */
299#define PFMLIB_ERR_IRRINVAL -15 /* invalid code range */
300#define PFMLIB_ERR_IRRTOOMANY -16 /* too many code ranges */
301#define PFMLIB_ERR_DRRINVAL -17 /* invalid data range */
302#define PFMLIB_ERR_DRRTOOMANY -18 /* too many data ranges */
303#define PFMLIB_ERR_BADHOST -19 /* not supported by host CPU */
304#define PFMLIB_ERR_IRRALIGN -20 /* bad alignment for code range */
305#define PFMLIB_ERR_IRRFLAGS -21 /* code range missing flags */
306#define PFMLIB_ERR_UMASK -22 /* invalid or missing unit mask */
307#define PFMLIB_ERR_NOMEM -23 /* out of memory */
308
309#define __PFMLIB_REGMASK_EL(g) ((g)/__PFMLIB_REG_BV_BITS)
310#define __PFMLIB_REGMASK_MASK(g) (((pfmlib_regmask_bits_t)1) << ((g) % __PFMLIB_REG_BV_BITS))
311
312static inline int
314{
315 if (b >= PFMLIB_REG_MAX)
316 return 0;
317 return (h->bits[__PFMLIB_REGMASK_EL(b)] & __PFMLIB_REGMASK_MASK(b)) != 0;
318}
319
320static inline int
322{
323 if (b >= PFMLIB_REG_MAX)
324 return PFMLIB_ERR_INVAL;
325
327
328 return PFMLIB_SUCCESS;
329}
330
331static inline int
333{
334 if (h == NULL || b >= PFMLIB_REG_MAX)
335 return PFMLIB_ERR_INVAL;
336
337 h->bits[__PFMLIB_REGMASK_EL(b)] &= ~ __PFMLIB_REGMASK_MASK(b);
338
339 return PFMLIB_SUCCESS;
340}
341
342static inline int
344{
345 unsigned int pos;
346 unsigned int weight = 0;
347
348 if (h == NULL || w == NULL)
349 return PFMLIB_ERR_INVAL;
350
351 for (pos = 0; pos < PFMLIB_REG_BV; pos++) {
352 weight += (unsigned int)pfmlib_popcnt(h->bits[pos]);
353 }
354 *w = weight;
355 return PFMLIB_SUCCESS;
356}
357
358static inline int
360{
361 unsigned int pos;
362
363 if (h1 == NULL || h2 == NULL)
364 return 0;
365
366 for (pos = 0; pos < PFMLIB_REG_BV; pos++) {
367 if (h1->bits[pos] != h2->bits[pos]) return 0;
368 }
369 return 1;
370}
371
372static inline int
374{
375 unsigned int pos;
376 if (dst == NULL || h1 == NULL || h2 == NULL)
377 return PFMLIB_ERR_INVAL;
378
379 for (pos = 0; pos < PFMLIB_REG_BV; pos++) {
380 dst->bits[pos] = h1->bits[pos] & h2->bits[pos];
381 }
382 return PFMLIB_SUCCESS;
383}
384
385static inline int
387{
388 unsigned int pos;
389 if (dst == NULL || h1 == NULL || h2 == NULL)
390 return PFMLIB_ERR_INVAL;
391
392 for (pos = 0; pos < PFMLIB_REG_BV; pos++) {
393 dst->bits[pos] = h1->bits[pos] & ~h2->bits[pos];
394 }
395 return PFMLIB_SUCCESS;
396}
397
398static inline int
400{
401 unsigned int pos;
402 if (dst == NULL || h1 == NULL || h2 == NULL)
403 return PFMLIB_ERR_INVAL;
404
405 for (pos = 0; pos < PFMLIB_REG_BV; pos++) {
406 dst->bits[pos] = h1->bits[pos] | h2->bits[pos];
407 }
408 return PFMLIB_SUCCESS;
409}
410
411static inline int
413{
414 unsigned int pos;
415 if (dst == NULL || src == NULL)
416 return PFMLIB_ERR_INVAL;
417
418 for (pos = 0; pos < PFMLIB_REG_BV; pos++) {
419 dst->bits[pos] = src->bits[pos];
420 }
421 return PFMLIB_SUCCESS;
422}
423static inline int
425{
426 unsigned int pos;
427 if (dst == NULL)
428 return PFMLIB_ERR_INVAL;
429
430 for (pos = 0; pos < PFMLIB_REG_BV; pos++) {
431 dst->bits[pos] = ~dst->bits[pos];
432 }
433 return PFMLIB_SUCCESS;
434}
435
436#ifdef __cplusplus /* extern C */
437}
438#endif
439
440#endif /* __PFMLIB_H__ */
static long count
static struct timeval start
static double b[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:39
uint16_t reserved
uint8_t version
uint16_t type
pfm_err_t pfm_is_pmu_supported(int type)
pfm_err_t pfm_list_supported_pmus(int(*pf)(const char *fmt,...))
pfm_err_t pfm_get_pmu_name(char *name, int maxlen)
pfm_err_t pfm_get_event_counters(unsigned int idx, pfmlib_regmask_t *counters)
pfm_err_t pfm_get_inst_retired_event(pfmlib_event_t *e)
pfm_err_t pfm_get_event_mask_name(unsigned int event_idx, unsigned int mask_idx, char *name, size_t maxlen)
pfm_err_t pfm_get_hw_counter_width(unsigned int *width)
static int pfm_regmask_copy(pfmlib_regmask_t *dst, pfmlib_regmask_t *src)
Definition: pfmlib.h:412
char * pfm_strerror(int code)
pfm_err_t pfm_dispatch_events(pfmlib_input_param_t *p, void *model_in, pfmlib_output_param_t *q, void *model_out)
pfm_err_t pfm_get_event_code_counter(unsigned int idx, unsigned int cnt, int *code)
#define PFMLIB_MAX_PMCS
Definition: pfmlib.h:41
pfm_err_t pfm_force_pmu(int type)
pfm_err_t pfm_get_num_events(unsigned int *count)
static int pfm_regmask_set(pfmlib_regmask_t *h, unsigned int b)
Definition: pfmlib.h:321
#define PFMLIB_SUCCESS
Definition: pfmlib.h:283
pfm_err_t pfm_get_event_mask_description(unsigned int event_idx, unsigned int mask_idx, char **desc)
static int pfm_regmask_not(pfmlib_regmask_t *dst)
Definition: pfmlib.h:424
int pfm_err_t
Definition: pfmlib.h:151
#define PFMLIB_MAX_MASKS_PER_EVENT
Definition: pfmlib.h:80
unsigned long pfmlib_regmask_bits_t
Definition: pfmlib.h:58
#define PFMLIB_MAX_PMDS
Definition: pfmlib.h:42
static int pfm_regmask_weight(pfmlib_regmask_t *h, unsigned int *w)
Definition: pfmlib.h:343
pfm_err_t pfm_get_full_event_name(pfmlib_event_t *e, char *name, size_t maxlen)
pfm_err_t pfm_find_event_bycode(int code, unsigned int *idx)
pfm_err_t pfm_get_event_name(unsigned int idx, char *name, size_t maxlen)
pfm_err_t pfm_get_num_pmds(unsigned int *num)
pfm_err_t pfm_find_event_mask(unsigned int event_idx, const char *str, unsigned int *mask_idx)
pfm_err_t pfm_get_pmu_name_bytype(int type, char *name, size_t maxlen)
static int pfm_regmask_eq(pfmlib_regmask_t *h1, pfmlib_regmask_t *h2)
Definition: pfmlib.h:359
pfm_err_t pfm_get_event_description(unsigned int idx, char **str)
#define PFMLIB_ERR_INVAL
Definition: pfmlib.h:285
pfm_err_t pfm_find_event_byname(const char *name, unsigned int *idx)
pfm_err_t pfm_get_impl_pmds(pfmlib_regmask_t *impl_pmds)
static int pfm_regmask_clr(pfmlib_regmask_t *h, unsigned int b)
Definition: pfmlib.h:332
static int pfm_regmask_andnot(pfmlib_regmask_t *dst, pfmlib_regmask_t *h1, pfmlib_regmask_t *h2)
Definition: pfmlib.h:386
pfm_err_t pfm_get_cycle_event(pfmlib_event_t *e)
#define __PFMLIB_REGMASK_EL(g)
Definition: pfmlib.h:309
pfm_err_t pfm_initialize(void)
static int pfm_regmask_and(pfmlib_regmask_t *dst, pfmlib_regmask_t *h1, pfmlib_regmask_t *h2)
Definition: pfmlib.h:373
pfm_err_t pfm_get_impl_counters(pfmlib_regmask_t *impl_counters)
static int pfm_regmask_isset(pfmlib_regmask_t *h, unsigned int b)
Definition: pfmlib.h:313
pfm_err_t pfm_get_num_pmcs(unsigned int *num)
pfm_err_t pfm_find_full_event(const char *str, pfmlib_event_t *e)
pfm_err_t pfm_get_max_event_name_len(size_t *len)
pfm_err_t pfm_get_pmu_type(int *type)
pfm_err_t pfm_find_event_bycode_next(int code, unsigned int start, unsigned int *next)
#define PFMLIB_REG_MAX
Definition: pfmlib.h:66
pfm_err_t pfm_get_event_code(unsigned int idx, int *code)
pfm_err_t pfm_get_num_event_masks(unsigned int event_idx, unsigned int *count)
static int pfm_regmask_or(pfmlib_regmask_t *dst, pfmlib_regmask_t *h1, pfmlib_regmask_t *h2)
Definition: pfmlib.h:399
pfm_err_t pfm_get_event_mask_code(unsigned int idx, unsigned int mask_idx, unsigned int *code)
pfm_err_t pfm_get_version(unsigned int *version)
pfm_err_t pfm_find_event(const char *str, unsigned int *idx)
#define __PFMLIB_REGMASK_MASK(g)
Definition: pfmlib.h:310
pfm_err_t pfm_set_options(pfmlib_options_t *opt)
pfm_err_t pfm_get_num_counters(unsigned int *num)
#define PFMLIB_REG_BV
Definition: pfmlib.h:72
pfm_err_t pfm_get_impl_pmcs(pfmlib_regmask_t *impl_pmcs)
#define pfmlib_popcnt
const char * fmt
Definition: pscanf.h:10
const char * name
Definition: rocs.c:225
int
Definition: sde_internal.h:89
unsigned int num_masks
Definition: pfmlib.h:90
unsigned long flags
Definition: pfmlib.h:88
unsigned int plm
Definition: pfmlib.h:87
unsigned int event
Definition: pfmlib.h:86
unsigned int pfp_dfl_plm
Definition: pfmlib.h:110
pfmlib_regmask_t pfp_unavail_pmcs
Definition: pfmlib.h:114
unsigned int pfp_flags
Definition: pfmlib.h:111
unsigned int reserved1
Definition: pfmlib.h:112
unsigned int pfp_event_count
Definition: pfmlib.h:109
unsigned int pfm_reserved
Definition: pfmlib.h:140
unsigned int pfm_verbose
Definition: pfmlib.h:139
unsigned int pfm_debug
Definition: pfmlib.h:138
unsigned int pfp_pmc_count
Definition: pfmlib.h:127
unsigned int pfp_pmd_count
Definition: pfmlib.h:128
unsigned int reg_reserved1
Definition: pfmlib.h:101
unsigned long long reg_value
Definition: pfmlib.h:98
unsigned int reg_num
Definition: pfmlib.h:100
unsigned long reg_alt_addr
Definition: pfmlib.h:102
unsigned long long reg_addr
Definition: pfmlib.h:99
pfmlib_regmask_bits_t bits[PFMLIB_REG_BV]
Definition: pfmlib.h:76