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