Blame src/components/perfmon_ia64/perfmon-ia64.h

Packit Service a1973e
#ifndef _PAPI_PERFMON_IA64_H
Packit Service a1973e
#define _PAPI_PERFMON_IA64_H
Packit Service a1973e
/* 
Packit Service a1973e
* File:    perfmon-ia64.h
Packit Service a1973e
* CVS:     $Id$
Packit Service a1973e
* Author:  Philip Mucci
Packit Service a1973e
*          mucci@cs.utk.edu
Packit Service a1973e
*
Packit Service a1973e
*          Kevin London
Packit Service a1973e
*	   london@cs.utk.edu
Packit Service a1973e
*
Packit Service a1973e
* Mods:    Per Ekman
Packit Service a1973e
*          pek@pdc.kth.se
Packit Service a1973e
*/
Packit Service a1973e
Packit Service a1973e
#include <stdio.h>
Packit Service a1973e
#include <stdlib.h>
Packit Service a1973e
#include <stdarg.h>
Packit Service a1973e
#include <unistd.h>
Packit Service a1973e
#include <assert.h>
Packit Service a1973e
#include <errno.h>
Packit Service a1973e
#include <string.h>
Packit Service a1973e
#include <math.h>
Packit Service a1973e
#include <limits.h>
Packit Service a1973e
#include <time.h>
Packit Service a1973e
#include <fcntl.h>
Packit Service a1973e
#include <ctype.h>
Packit Service a1973e
#include <inttypes.h>
Packit Service a1973e
#include <libgen.h>
Packit Service a1973e
#include <sys/syscall.h>
Packit Service a1973e
#include <sys/types.h>
Packit Service a1973e
#include <sys/time.h>
Packit Service a1973e
#include <sys/times.h>
Packit Service a1973e
#include <sys/ucontext.h>
Packit Service a1973e
#include <sys/types.h>
Packit Service a1973e
#include <sys/ipc.h>
Packit Service a1973e
Packit Service a1973e
#if defined(HAVE_MMTIMER)
Packit Service a1973e
#include <sys/ioctl.h>
Packit Service a1973e
#include <sys/mman.h>
Packit Service a1973e
#include <linux/mmtimer.h>
Packit Service a1973e
#ifndef MMTIMER_FULLNAME
Packit Service a1973e
#define MMTIMER_FULLNAME "/dev/mmtimer"
Packit Service a1973e
#endif
Packit Service a1973e
#endif
Packit Service a1973e
Packit Service a1973e
#ifdef __INTEL_COMPILER
Packit Service a1973e
#include <ia64intrin.h>
Packit Service a1973e
#include <ia64regs.h>
Packit Service a1973e
#endif
Packit Service a1973e
Packit Service a1973e
#include "papi_defines.h"
Packit Service a1973e
#include "config.h"
Packit Service a1973e
#include "perfmon/pfmlib.h"
Packit Service a1973e
#include "perfmon/perfmon.h"
Packit Service a1973e
#include "perfmon/perfmon_default_smpl.h"
Packit Service a1973e
#include "perfmon/pfmlib_montecito.h"
Packit Service a1973e
#include "perfmon/pfmlib_itanium2.h"
Packit Service a1973e
#include "perfmon/pfmlib_itanium.h"
Packit Service a1973e
Packit Service a1973e
typedef int ia64_register_t;
Packit Service a1973e
typedef int ia64_register_map_t;
Packit Service a1973e
typedef int ia64_reg_alloc_t;
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
#define NUM_PMCS PFMLIB_MAX_PMCS
Packit Service a1973e
#define NUM_PMDS PFMLIB_MAX_PMDS
Packit Service a1973e
Packit Service a1973e
typedef struct param_t
Packit Service a1973e
{
Packit Service a1973e
	pfarg_reg_t pd[NUM_PMDS];
Packit Service a1973e
	pfarg_reg_t pc[NUM_PMCS];
Packit Service a1973e
	pfmlib_input_param_t inp;
Packit Service a1973e
	pfmlib_output_param_t outp;
Packit Service a1973e
	void *mod_inp;					   /* model specific input parameters to libpfm    */
Packit Service a1973e
	void *mod_outp;					   /* model specific output parameters from libpfm */
Packit Service a1973e
} pfmw_param_t;
Packit Service a1973e
//   #ifdef ITANIUM3
Packit Service a1973e
typedef struct mont_param_t
Packit Service a1973e
{
Packit Service a1973e
	pfmlib_mont_input_param_t mont_input_param;
Packit Service a1973e
	pfmlib_mont_output_param_t mont_output_param;
Packit Service a1973e
} pfmw_mont_param_t;
Packit Service a1973e
//   typedef pfmw_mont_param_t pfmw_ita_param_t;
Packit Service a1973e
//   #elif defined(ITANIUM2)
Packit Service a1973e
typedef struct ita2_param_t
Packit Service a1973e
{
Packit Service a1973e
	pfmlib_ita2_input_param_t ita2_input_param;
Packit Service a1973e
	pfmlib_ita2_output_param_t ita2_output_param;
Packit Service a1973e
} pfmw_ita2_param_t;
Packit Service a1973e
//   typedef pfmw_ita2_param_t pfmw_ita_param_t;
Packit Service a1973e
//   #else
Packit Service a1973e
typedef int pfmw_ita1_param_t;
Packit Service a1973e
//   #endif
Packit Service a1973e
Packit Service a1973e
#define PMU_FIRST_COUNTER  4
Packit Service a1973e
Packit Service a1973e
typedef union
Packit Service a1973e
{
Packit Service a1973e
	pfmw_ita1_param_t ita_param;
Packit Service a1973e
	pfmw_ita2_param_t ita2_param;
Packit Service a1973e
	pfmw_mont_param_t mont_param;
Packit Service a1973e
} pfmw_ita_param_t;
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
#define MAX_COUNTERS 12
Packit Service a1973e
#define MAX_COUNTER_TERMS MAX_COUNTERS
Packit Service a1973e
Packit Service a1973e
typedef struct ia64_control_state
Packit Service a1973e
{
Packit Service a1973e
	/* Which counters to use? Bits encode counters to use, may be duplicates */
Packit Service a1973e
	ia64_register_map_t bits;
Packit Service a1973e
Packit Service a1973e
	pfmw_ita_param_t ita_lib_param;
Packit Service a1973e
Packit Service a1973e
	/* Buffer to pass to kernel to control the counters */
Packit Service a1973e
	pfmw_param_t evt;
Packit Service a1973e
Packit Service a1973e
	long long counters[MAX_COUNTERS];
Packit Service a1973e
	pfarg_reg_t pd[NUM_PMDS];
Packit Service a1973e
Packit Service a1973e
/* sampling buffer address */
Packit Service a1973e
	void *smpl_vaddr;
Packit Service a1973e
	/* Buffer to pass to library to control the counters */
Packit Service a1973e
} ia64_control_state_t;
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
typedef struct itanium_preset_search
Packit Service a1973e
{
Packit Service a1973e
	/* Preset code */
Packit Service a1973e
	int preset;
Packit Service a1973e
	/* Derived code */
Packit Service a1973e
	int derived;
Packit Service a1973e
	/* Strings to look for */
Packit Service a1973e
	char *( findme[MAX_COUNTERS] );
Packit Service a1973e
	char operation[MAX_COUNTERS * 5];
Packit Service a1973e
} itanium_preset_search_t;
Packit Service a1973e
Packit Service a1973e
typedef struct
Packit Service a1973e
{
Packit Service a1973e
	int fd;							   /* file descriptor */
Packit Service a1973e
	pid_t tid;						   /* thread id */
Packit Service a1973e
#if defined(USE_PROC_PTTIMER)
Packit Service a1973e
	int stat_fd;
Packit Service a1973e
#endif
Packit Service a1973e
} ia64_context_t;
Packit Service a1973e
Packit Service a1973e
#undef hwd_context_t
Packit Service a1973e
typedef ia64_context_t hwd_context_t;
Packit Service a1973e
Packit Service a1973e
#include "linux-context.h"
Packit Service a1973e
Packit Service a1973e
//#undef  hwd_ucontext_t
Packit Service a1973e
//typedef struct sigcontext hwd_ucontext_t;
Packit Service a1973e
Packit Service a1973e
/* Override void* definitions from PAPI framework layer */
Packit Service a1973e
/* with typedefs to conform to PAPI component layer code. */
Packit Service a1973e
#undef  hwd_reg_alloc_t
Packit Service a1973e
typedef ia64_reg_alloc_t hwd_reg_alloc_t;
Packit Service a1973e
#undef  hwd_register_t
Packit Service a1973e
typedef ia64_register_t hwd_register_t;
Packit Service a1973e
#undef  hwd_control_state_t
Packit Service a1973e
typedef ia64_control_state_t hwd_control_state_t;
Packit Service a1973e
Packit Service a1973e
#define SMPL_BUF_NENTRIES 64
Packit Service a1973e
#define M_PMD(x)        (1UL<<(x))
Packit Service a1973e
Packit Service a1973e
#define MONT_DEAR_REGS_MASK	    (M_PMD(32)|M_PMD(33)|M_PMD(36))
Packit Service a1973e
#define MONT_ETB_REGS_MASK		(M_PMD(38)| M_PMD(39)| \
Packit Service a1973e
		                 M_PMD(48)|M_PMD(49)|M_PMD(50)|M_PMD(51)|M_PMD(52)|M_PMD(53)|M_PMD(54)|M_PMD(55)|\
Packit Service a1973e
				 M_PMD(56)|M_PMD(57)|M_PMD(58)|M_PMD(59)|M_PMD(60)|M_PMD(61)|M_PMD(62)|M_PMD(63))
Packit Service a1973e
Packit Service a1973e
#define DEAR_REGS_MASK      (M_PMD(2)|M_PMD(3)|M_PMD(17))
Packit Service a1973e
#define BTB_REGS_MASK       (M_PMD(8)|M_PMD(9)|M_PMD(10)|M_PMD(11)|M_PMD(12)|M_PMD(13)|M_PMD(14)|M_PMD(15)|M_PMD(16))
Packit Service a1973e
Packit Service a1973e
#endif /* _PAPI_PERFMON_IA64_H */