Blame src/libpfm4/lib/pfmlib_power_priv.h

Packit Service a1973e
/****************************/
Packit Service a1973e
/* THIS IS OPEN SOURCE CODE */
Packit Service a1973e
/****************************/
Packit Service a1973e
Packit Service a1973e
#ifndef __PFMLIB_POWER_PRIV_H__
Packit Service a1973e
#define __PFMLIB_POWER_PRIV_H__
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
* File:    pfmlib_power_priv.h
Packit Service a1973e
* CVS:
Packit Service a1973e
* Author:  Corey Ashford
Packit Service a1973e
*          cjashfor@us.ibm.com
Packit Service a1973e
* Mods:    <your name here>
Packit Service a1973e
*          <your email address>
Packit Service a1973e
*
Packit Service a1973e
* (C) Copyright IBM Corporation, 2009.  All Rights Reserved.
Packit Service a1973e
* Contributed by Corey Ashford <cjashfor.ibm.com>
Packit Service a1973e
*
Packit Service a1973e
*/
Packit Service a1973e
typedef struct {
Packit Service a1973e
   uint64_t pme_code;
Packit Service a1973e
   const char *pme_name;
Packit Service a1973e
   const char *pme_short_desc;
Packit Service a1973e
   const char *pme_long_desc;
Packit Service a1973e
} pme_power_entry_t;
Packit Service a1973e
Packit Service a1973e
typedef struct {
Packit Service a1973e
   const char *pme_name;
Packit Service a1973e
   const char *pme_desc;
Packit Service a1973e
   unsigned pme_code;
Packit Service a1973e
   uint64_t pme_modmsk;
Packit Service a1973e
} pme_torrent_entry_t;
Packit Service a1973e
Packit Service a1973e
/* Attribute "type "for PowerBus MCD events */
Packit Service a1973e
#define TORRENT_ATTR_MCD_TYPE		0
Packit Service a1973e
/* Attribute "sel" for PowerBus bus utilization events */
Packit Service a1973e
#define TORRENT_ATTR_UTIL_SEL		1
Packit Service a1973e
/* Attribute "lo_cmp" for PowerBus utilization events */
Packit Service a1973e
#define TORRENT_ATTR_UTIL_LO_CMP	2
Packit Service a1973e
/* Attribute "hi_cmp" for PowerBus utilization events */
Packit Service a1973e
#define TORRENT_ATTR_UTIL_HI_CMP	3
Packit Service a1973e
Packit Service a1973e
#define _TORRENT_ATTR_MCD_TYPE		(1 << TORRENT_ATTR_MCD_TYPE)
Packit Service a1973e
#define _TORRENT_ATTR_MCD		(_TORRENT_ATTR_MCD_TYPE)
Packit Service a1973e
#define _TORRENT_ATTR_UTIL_SEL		(1 << TORRENT_ATTR_UTIL_SEL)
Packit Service a1973e
#define _TORRENT_ATTR_UTIL_LO_CMP	(1 << TORRENT_ATTR_UTIL_LO_CMP)
Packit Service a1973e
#define _TORRENT_ATTR_UTIL_HI_CMP	(1 << TORRENT_ATTR_UTIL_HI_CMP)
Packit Service a1973e
#define _TORRENT_ATTR_UTIL_LO		(_TORRENT_ATTR_UTIL_SEL | \
Packit Service a1973e
					_TORRENT_ATTR_UTIL_LO_CMP)
Packit Service a1973e
#define _TORRENT_ATTR_UTIL_HI		(_TORRENT_ATTR_UTIL_SEL | \
Packit Service a1973e
					_TORRENT_ATTR_UTIL_HI_CMP)
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * These definitions were taken from the reg.h file which, until Linux
Packit Service a1973e
 * 2.6.18, resided in /usr/include/asm-ppc64.  Most of the unneeded
Packit Service a1973e
 * definitions have been removed, but there are still a few in this file
Packit Service a1973e
 * that are currently unused by libpfm.
Packit Service a1973e
 */
Packit Service a1973e
Packit Service a1973e
#ifndef _POWER_REG_H
Packit Service a1973e
#define _POWER_REG_H
Packit Service a1973e
Packit Service a1973e
#define __stringify_1(x)	#x
Packit Service a1973e
#define __stringify(x)		__stringify_1(x)
Packit Service a1973e
Packit Service a1973e
#ifdef __powerpc__
Packit Service a1973e
#define mfspr(rn)	({unsigned long rval; \
Packit Service a1973e
			asm volatile("mfspr %0," __stringify(rn) \
Packit Service a1973e
				: "=r" (rval)); rval;})
Packit Service a1973e
#else
Packit Service a1973e
#define mfspr(rn)	(0)
Packit Service a1973e
#endif
Packit Service a1973e
Packit Service a1973e
/* Special Purpose Registers (SPRNs)*/
Packit Service a1973e
#define SPRN_PVR	0x11F	/* Processor Version Register */
Packit Service a1973e
Packit Service a1973e
/* Processor Version Register (PVR) field extraction */
Packit Service a1973e
Packit Service a1973e
#define PVR_VER(pvr)	(((pvr) >>  16) & 0xFFFF)	/* Version field */
Packit Service a1973e
#define PVR_REV(pvr)	(((pvr) >>   0) & 0xFFFF)	/* Revision field */
Packit Service a1973e
Packit Service a1973e
#define __is_processor(pv)	(PVR_VER(mfspr(SPRN_PVR)) == (pv))
Packit Service a1973e
Packit Service a1973e
/* 64-bit processors */
Packit Service a1973e
#define PV_POWER4	0x0035
Packit Service a1973e
#define PV_POWER4p	0x0038
Packit Service a1973e
#define PV_970		0x0039
Packit Service a1973e
#define PV_POWER5	0x003A
Packit Service a1973e
#define PV_POWER5p	0x003B
Packit Service a1973e
#define PV_970FX	0x003C
Packit Service a1973e
#define PV_POWER6	0x003E
Packit Service a1973e
#define PV_POWER7	0x003F
Packit Service a1973e
#define PV_POWER7p	0x004a
Packit Service a1973e
#define PV_970MP	0x0044
Packit Service a1973e
#define PV_970GX	0x0045
Packit Service a1973e
#define PV_POWER8E	0x004b
Packit Service a1973e
#define PV_POWER8NVL	0x004c
Packit Service a1973e
#define PV_POWER8	0x004d
Packit Service a1973e
#define PV_POWER9	0x004e
Packit Service a1973e
Packit Service a1973e
#define POWER_PLM (PFM_PLM0|PFM_PLM3)
Packit Service a1973e
#define POWER8_PLM (POWER_PLM|PFM_PLMH)
Packit Service a1973e
#define POWER9_PLM (POWER_PLM|PFM_PLMH)
Packit Service a1973e
Packit Service a1973e
extern int pfm_gen_powerpc_get_event_info(void *this, int pidx, pfm_event_info_t *info);
Packit Service a1973e
extern int pfm_gen_powerpc_get_event_attr_info(void *this, int pidx, int umask_idx, pfmlib_event_attr_info_t *info);
Packit Service a1973e
extern int pfm_gen_powerpc_get_encoding(void *this, pfmlib_event_desc_t *e);
Packit Service a1973e
extern int pfm_gen_powerpc_get_event_first(void *this);
Packit Service a1973e
extern int pfm_gen_powerpc_get_event_next(void *this, int idx);
Packit Service a1973e
extern int pfm_gen_powerpc_event_is_valid(void *this, int pidx);
Packit Service a1973e
extern int pfm_gen_powerpc_validate_table(void *this, FILE *fp);
Packit Service a1973e
extern void pfm_gen_powerpc_perf_validate_pattrs(void *this, pfmlib_event_desc_t *e);
Packit Service a1973e
Packit Service a1973e
extern int pfm_gen_powerpc_get_perf_encoding(void *this, pfmlib_event_desc_t *e);
Packit Service a1973e
extern int pfm_gen_powerpc_get_nest_perf_encoding(void *this, pfmlib_event_desc_t *e);
Packit Service a1973e
#endif /* _POWER_REG_H */
Packit Service a1973e
#endif
Packit Service a1973e