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

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
 * This header file contains obsolete user-level perfmon interface
Packit 577717
 * definitions for the Itanium Processor Family architecture.
Packit 577717
 *
Packit 577717
 * please use replacements as indicated below whenever possible.
Packit 577717
 */
Packit 577717
Packit 577717
#ifndef _PERFMON_COMPAT_H_
Packit 577717
#define _PERFMON_COMPAT_H_
Packit 577717
Packit 577717
#ifndef __ia64__
Packit 577717
#error "you should not include this file on non Itanium platforms"
Packit 577717
#endif
Packit 577717
Packit 577717
/*
Packit 577717
 * old perfmon2 interface for backward compatibility.
Packit 577717
 * Do not use in portable applications.
Packit 577717
 */
Packit 577717
extern int perfmonctl(int fd, int cmd, void *arg, int narg);
Packit 577717
Packit 577717
typedef unsigned char pfm_uuid_t[16];	/* custom sampling buffer identifier type */
Packit 577717
Packit 577717
/*
Packit 577717
 * obsolete perfmon comamnds supported on all CPU models
Packit 577717
 */
Packit 577717
#define PFM_WRITE_PMCS		0x01 
Packit 577717
#define PFM_WRITE_PMDS		0x02 
Packit 577717
#define PFM_READ_PMDS		0x03 
Packit 577717
#define PFM_STOP		0x04
Packit 577717
#define PFM_START		0x05
Packit 577717
#define PFM_ENABLE		0x06 /* obsolete */
Packit 577717
#define PFM_DISABLE		0x07 /* obsolete */
Packit 577717
#define PFM_CREATE_CONTEXT	0x08
Packit 577717
#define PFM_DESTROY_CONTEXT	0x09 /* obsolete use close() */
Packit 577717
#define PFM_RESTART		0x0a
Packit 577717
#define PFM_PROTECT_CONTEXT	0x0b /* obsolete */
Packit 577717
#define PFM_GET_FEATURES	0x0c /* obsolete: use /proc/sys/kernel/perfmon */
Packit 577717
#define PFM_DEBUG		0x0d /* obsolete: use /proc/sys/kernel/perfmon/debug */
Packit 577717
#define PFM_UNPROTECT_CONTEXT	0x0e /* obsolete */
Packit 577717
#define PFM_GET_PMC_RESET_VAL	0x0f /* obsolete: use /proc/perfmon_mappings */
Packit 577717
#define PFM_LOAD_CONTEXT	0x10
Packit 577717
#define PFM_UNLOAD_CONTEXT	0x11
Packit 577717
Packit 577717
/*
Packit 577717
 * PMU model specific commands (may not be supported on all PMU models)
Packit 577717
 */
Packit 577717
#define PFM_WRITE_IBRS		0x20 /* obsolete: use PFM_WRITE_PMCS[256-263] */
Packit 577717
#define PFM_WRITE_DBRS		0x21 /* obsolete: use PFM_WRITE_PMCS[264-271] */
Packit 577717
Packit 577717
/*
Packit 577717
 * argument to PFM_CREATE_CONTEXT
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	pfm_uuid_t     ctx_smpl_buf_id;	 /* which buffer format to use (if needed) */
Packit 577717
	unsigned long  ctx_flags;	 /* noblock/block */
Packit 577717
	unsigned int   ctx_reserved1;	 /* for future use */
Packit 577717
	int	       ctx_fd;		 /* return arg: unique identification for context */
Packit 577717
	void	       *ctx_smpl_vaddr;	 /* return arg: virtual address of sampling buffer, is used */
Packit 577717
	unsigned long  ctx_reserved3[11];/* for future use */
Packit 577717
} pfarg_context_t;
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * argument structure for PFM_WRITE_PMCS/PFM_WRITE_PMDS/PFM_WRITE_PMDS
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	unsigned int	reg_num;	   /* which register */
Packit 577717
	unsigned short	reg_set;	   /* event set for this register */
Packit 577717
	unsigned short	reg_reserved1;	   /* for future use */
Packit 577717
Packit 577717
	unsigned long	reg_value;	   /* initial pmc/pmd value */
Packit 577717
	unsigned long	reg_flags;	   /* input: pmc/pmd flags, return: reg error */
Packit 577717
Packit 577717
	unsigned long	reg_long_reset;	   /* reset after buffer overflow notification */
Packit 577717
	unsigned long	reg_short_reset;   /* reset after counter overflow */
Packit 577717
Packit 577717
	unsigned long	reg_reset_pmds[4]; /* which other counters to reset on overflow */
Packit 577717
	unsigned long	reg_random_seed;   /* seed value when randomization is used */
Packit 577717
	unsigned long	reg_random_mask;   /* bitmask used to limit random value */
Packit 577717
	unsigned long   reg_last_reset_val;/* return: PMD last reset value */
Packit 577717
Packit 577717
	unsigned long	reg_smpl_pmds[4];  	/* which pmds are accessed when PMC overflows */
Packit 577717
	unsigned long	reg_smpl_eventid;  	/* opaque sampling event identifier */
Packit 577717
	unsigned long   reg_ovfl_switch_cnt;	/* how many overflow before switch for next set */
Packit 577717
Packit 577717
	unsigned long   reg_reserved2[2];   /* for future use */
Packit 577717
} pfarg_reg_t;
Packit 577717
Packit 577717
/*
Packit 577717
 * argument to PFM_WRITE_IBRS/PFM_WRITE_DBRS
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	unsigned int	dbreg_num;		/* which debug register */
Packit 577717
	unsigned short	dbreg_set;		/* event set for this register */
Packit 577717
	unsigned short	dbreg_reserved1;	/* for future use */
Packit 577717
	unsigned long	dbreg_value;		/* value for debug register */
Packit 577717
	unsigned long	dbreg_flags;		/* return: dbreg error */
Packit 577717
	unsigned long	dbreg_reserved2[1];	/* for future use */
Packit 577717
} pfarg_dbreg_t;
Packit 577717
Packit 577717
/*
Packit 577717
 * argument to PFM_GET_FEATURES
Packit 577717
 */
Packit 577717
typedef struct {
Packit 577717
	unsigned int	ft_version;	/* perfmon: major [16-31], minor [0-15] */
Packit 577717
	unsigned int	ft_reserved;	/* reserved for future use */
Packit 577717
	unsigned long	reserved[4];	/* for future use */
Packit 577717
} pfarg_features_t;
Packit 577717
Packit 577717
typedef struct {
Packit 577717
	int		msg_type;		/* generic message header */
Packit 577717
	int		msg_ctx_fd;		/* generic message header */
Packit 577717
	unsigned long	msg_ovfl_pmds[4];	/* which PMDs overflowed */
Packit 577717
	unsigned short  msg_active_set;		/* active set at the time of overflow */
Packit 577717
	unsigned short  msg_reserved1;		/* for future use */
Packit 577717
	unsigned int    msg_reserved2;		/* for future use */
Packit 577717
	unsigned long	msg_tstamp;		/* for perf tuning/debug */
Packit 577717
} pfm_ovfl_msg_t;
Packit 577717
Packit 577717
typedef struct {
Packit 577717
	int		msg_type;		/* generic message header */
Packit 577717
	int		msg_ctx_fd;		/* generic message header */
Packit 577717
	unsigned long	msg_tstamp;		/* for perf tuning */
Packit 577717
} pfm_end_msg_t;
Packit 577717
Packit 577717
typedef struct {
Packit 577717
	int		msg_type;		/* type of the message */
Packit 577717
	int		msg_ctx_fd;		/* unique identifier for the context */
Packit 577717
	unsigned long	msg_tstamp;		/* for perf tuning */
Packit 577717
} pfm_gen_msg_t;
Packit 577717
Packit 577717
typedef union {
Packit 577717
	int type;
Packit 577717
	pfm_ovfl_msg_t	pfm_ovfl_msg;
Packit 577717
	pfm_end_msg_t	pfm_end_msg;
Packit 577717
	pfm_gen_msg_t	pfm_gen_msg;
Packit 577717
} pfm_msg_t;
Packit 577717
Packit 577717
/*
Packit 577717
 * PMD/PMC return flags in case of error (ignored on input)
Packit 577717
 *
Packit 577717
 * Those flags are used on output and must be checked in case EINVAL is returned
Packit 577717
 * by a command accepting a vector of values and each has a flag field, such as
Packit 577717
 * pfarg_pmc_t or pfarg_pmd_t.
Packit 577717
 */
Packit 577717
#define PFM_REG_RETFL_NOTAVAIL	(1<<31) /* set if register is implemented but not available */
Packit 577717
#define PFM_REG_RETFL_EINVAL	(1<<30) /* set if register entry is invalid */
Packit 577717
#define PFM_REG_RETFL_MASK	(PFM_REG_RETFL_NOTAVAIL|PFM_REG_RETFL_EINVAL)
Packit 577717
Packit 577717
#define PFM_REG_HAS_ERROR(flag)	(((flag) & PFM_REG_RETFL_MASK) != 0)
Packit 577717
Packit 577717
#endif /* _PERFMON_COMPAT_H_ */