Blame src/libpfm-3.y/include/perfmon/perfmon_v2.h

Packit 577717
/*
Packit 577717
 * This file contains the user level interface description for
Packit 577717
 * the perfmon-2.x interface on Linux.
Packit 577717
 *
Packit 577717
 * Copyright (c) 2001-2006 Hewlett-Packard Development Company, L.P.
Packit 577717
 * Contributed by Stephane Eranian <eranian@hpl.hp.com>
Packit 577717
 */
Packit 577717
#ifndef __PERFMON_V2_H__
Packit 577717
#define __PERFMON_V2_H__
Packit 577717
Packit 577717
#ifndef __PERFMON_H__
Packit 577717
#error "this file should never be included directly, use perfmon.h instead"
Packit 577717
#endif
Packit 577717
Packit 577717
/*
Packit 577717
 * argument to v2.3 and onward pfm_create_context()
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	uint32_t	ctx_flags;	   /* noblock/block/syswide */
Packit 577717
	uint32_t	ctx_reserved1;	   /* for future use */
Packit 577717
	uint64_t	ctx_reserved3[7];  /* for future use */
Packit 577717
} pfarg_ctx_t;
Packit 577717
Packit 577717
/*
Packit 577717
 * argument for pfm_write_pmcs()
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	uint16_t reg_num;	   			/* which register */
Packit 577717
	uint16_t reg_set;	   			/* event set for this register */
Packit 577717
	uint32_t reg_flags;	   			/* REGFL flags */
Packit 577717
	uint64_t reg_value;	   			/* pmc value */
Packit 577717
	uint64_t reg_reserved2[4];			/* for future use */
Packit 577717
} pfarg_pmc_t;
Packit 577717
Packit 577717
/*
Packit 577717
 * argument pfm_write_pmds() and pfm_read_pmds()
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	uint16_t reg_num;	   	/* which register */
Packit 577717
	uint16_t reg_set;	   	/* event set for this register */
Packit 577717
	uint32_t reg_flags;	   	/* REGFL flags */
Packit 577717
	uint64_t reg_value;	   	/* initial pmc/pmd value */
Packit 577717
	uint64_t reg_long_reset;	/* reset after buffer overflow notification */
Packit 577717
	uint64_t reg_short_reset;   	/* reset after counter overflow */
Packit 577717
	uint64_t reg_last_reset_val;	/* return: PMD last reset value */
Packit 577717
	uint64_t reg_ovfl_switch_cnt;	/* how many overflow before switch for next set */
Packit 577717
	uint64_t reg_reset_pmds[PFM_PMD_BV]; /* which other PMDS to reset on overflow */
Packit 577717
	uint64_t reg_smpl_pmds[PFM_PMD_BV];  /* which other PMDS to record when the associated PMD overflows */
Packit 577717
	uint64_t reg_smpl_eventid;  	/* opaque sampling event identifier */
Packit 577717
	uint64_t reg_random_mask; 	/* bitmask used to limit random value */
Packit 577717
	uint32_t reg_random_seed;   	/* seed for randomization (DEPRECATED) */
Packit 577717
	uint32_t reg_reserved2[7];	/* for future use */
Packit 577717
} pfarg_pmd_t;
Packit 577717
Packit 577717
/*
Packit 577717
 * optional argument to pfm_start(), pass NULL if no arg needed
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	uint16_t start_set;		/* event set to start with */
Packit 577717
	uint16_t start_reserved1;	/* for future use */
Packit 577717
	uint32_t start_reserved2;	/* for future use */
Packit 577717
	uint64_t reserved3[3];		/* for future use */
Packit 577717
} pfarg_start_t;
Packit 577717
Packit 577717
/*
Packit 577717
 * argument to pfm_load_context()
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	uint32_t	load_pid;          /* thread or CPU to attach to */
Packit 577717
	uint16_t        load_set;          /* set to load first */
Packit 577717
	uint16_t        load_reserved1;    /* for future use */
Packit 577717
	uint64_t        load_reserved2[3]; /* for future use */
Packit 577717
} pfarg_load_t;
Packit 577717
Packit 577717
#ifndef PFMLIB_OLD_PFMV2
Packit 577717
typedef struct {
Packit 577717
	uint16_t	set_id;		  /* which set */
Packit 577717
	uint16_t	set_reserved1;	  /* for future use */
Packit 577717
	uint32_t    	set_flags; 	  /* SETFL flags */
Packit 577717
	uint64_t	set_timeout;	  /* requested/effective switch timeout in nsecs */
Packit 577717
	uint64_t	reserved[6];	  /* for future use */
Packit 577717
} pfarg_setdesc_t;
Packit 577717
Packit 577717
typedef struct {
Packit 577717
        uint16_t	set_id;             /* which set */
Packit 577717
        uint16_t	set_reserved1;      /* for future use */
Packit 577717
        uint32_t	set_flags;          /* for future use */
Packit 577717
        uint64_t 	set_ovfl_pmds[PFM_PMD_BV]; /* out: last ovfl PMDs */
Packit 577717
        uint64_t	set_runs;           /* out: #times set was active */
Packit 577717
        uint64_t	set_timeout;        /* out: leftover switch timeout (nsecs) */
Packit 577717
	uint64_t	set_act_duration;	    /* out: time set was active (nsecs) */
Packit 577717
	uint64_t	set_avail_pmcs[PFM_PMC_BV]; /* out: available PMCs */
Packit 577717
	uint64_t	set_avail_pmds[PFM_PMD_BV]; /* out: available PMDs */
Packit 577717
        uint64_t	set_reserved3[6];   /* for future use */
Packit 577717
} pfarg_setinfo_t;
Packit 577717
#endif
Packit 577717
Packit 577717
Packit 577717
#ifdef PFMLIB_OLD_PFMV2
Packit 577717
Packit 577717
/*
Packit 577717
 * argument to pfm_create_evtsets()/pfm_delete_evtsets()
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
 	uint16_t	set_id;		  /* which set */
Packit 577717
	uint16_t	set_id_next;	  /* next set to go to (must use PFM_SETFL_EXPL_NEXT) */
Packit 577717
 	uint32_t    	set_flags; 	  /* SETFL flags */
Packit 577717
 	uint64_t	set_timeout;	  /* requested switch timeout in nsecs */
Packit 577717
	uint64_t	set_mmap_offset;  /* cookie to pass as mmap offset to access 64-bit virtual PMD */
Packit 577717
	uint64_t	reserved[5];	  /* for future use */
Packit 577717
} pfarg_setdesc_t;
Packit 577717
Packit 577717
/*
Packit 577717
 * argument to pfm_getinfo_evtsets()
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	uint16_t	set_id;             /* which set */
Packit 577717
	uint16_t	set_id_next;        /* output: next set to go to (must use PFM_SETFL_EXPL_NEXT) */
Packit 577717
	uint32_t	set_flags;          /* output: SETFL flags */
Packit 577717
	uint64_t 	set_ovfl_pmds[PFM_PMD_BV]; /* output: last ovfl PMDs which triggered a switch from set */
Packit 577717
	uint64_t	set_runs;           /* output: number of times the set was active */
Packit 577717
	uint64_t	set_timeout;        /* output:effective/leftover switch timeout in nsecs */
Packit 577717
	uint64_t	set_act_duration;   /* number of cycles set was active (syswide only) */
Packit 577717
	uint64_t	set_mmap_offset;    /* cookie to pass as mmap offset to access 64-bit virtual PMD */
Packit 577717
	uint64_t	set_avail_pmcs[PFM_PMC_BV];
Packit 577717
	uint64_t	set_avail_pmds[PFM_PMD_BV];
Packit 577717
	uint64_t	reserved[4];        /* for future use */
Packit 577717
} pfarg_setinfo_t;
Packit 577717
Packit 577717
#ifdef __crayx2
Packit 577717
#define PFM_MAX_HW_PMDS 512
Packit 577717
#else
Packit 577717
#define PFM_MAX_HW_PMDS 256
Packit 577717
#endif
Packit 577717
#define PFM_HW_PMD_BV   PFM_BVSIZE(PFM_MAX_HW_PMDS)
Packit 577717
Packit 577717
typedef struct {
Packit 577717
	uint32_t 	msg_type;		/* PFM_MSG_OVFL */
Packit 577717
	uint32_t 	msg_ovfl_pid;		/* process id */
Packit 577717
	uint64_t	msg_ovfl_pmds[PFM_HW_PMD_BV];/* which PMDs overflowed */
Packit 577717
	uint16_t 	msg_active_set;		/* active set at the time of overflow */
Packit 577717
	uint16_t 	msg_ovfl_cpu;		/* cpu on which the overflow occurred */
Packit 577717
	uint32_t	msg_ovfl_tid;		/* thread id */
Packit 577717
	uint64_t	msg_ovfl_ip;		/* instruction pointer where overflow interrupt happened */
Packit 577717
} pfarg_ovfl_msg_t;
Packit 577717
Packit 577717
#endif /* PFMLIB_OLD_PFMV2 */
Packit 577717
Packit 577717
extern os_err_t pfm_create_context(pfarg_ctx_t *ctx, char *smpl_name,
Packit 577717
                                    void *smpl_arg, size_t smpl_size);
Packit 577717
extern os_err_t pfm_write_pmcs(int fd, pfarg_pmc_t *pmcs, int count);
Packit 577717
extern os_err_t pfm_write_pmds(int fd, pfarg_pmd_t *pmds, int count);
Packit 577717
extern os_err_t pfm_read_pmds(int fd, pfarg_pmd_t *pmds, int count);
Packit 577717
extern os_err_t pfm_load_context(int fd, pfarg_load_t *load);
Packit 577717
extern os_err_t pfm_start(int fd, pfarg_start_t *start);
Packit 577717
extern os_err_t pfm_stop(int fd);
Packit 577717
extern os_err_t pfm_restart(int fd);
Packit 577717
extern os_err_t pfm_create_evtsets(int fd, pfarg_setdesc_t *setd, int count);
Packit 577717
extern os_err_t pfm_getinfo_evtsets(int fd, pfarg_setinfo_t *info, int count);
Packit 577717
extern os_err_t pfm_delete_evtsets(int fd, pfarg_setdesc_t *setd, int count);
Packit 577717
extern os_err_t pfm_unload_context(int fd);
Packit 577717
Packit 577717
#endif /* _PERFMON_V2_H */