Files
m241Neelima/vxworks-6.9/target/h/arch/i86/perMonLib.h
T
2026-07-30 11:19:44 +05:30

267 lines
7.0 KiB
C

/* perMonLib.h - Performance Monitoring mechanism definitions header file */
/* Copyright 2001 Wind River Systems, Inc. */
/*
modification history
--------------------
01a,30jul01,hdn written
*/
#ifndef __INCperMonLibh
#define __INCperMonLibh
#ifdef __cplusplus
extern "C" {
#endif
/* performance monitoring, number of counters, etc */
#define PM_N_COUNTER 18
#define EVENT_N_ESCR 2
#define EVENT_N_COUNTER 3
#define MSR_N_ESCR 8
/* performance monitoring event name/no */
#define PM_BRANCH_RETIRED 0
#define PM_MISPRED_BRANCH_RETIRED 1
#define PM_TC_DELIVER_MODE 2
#define PM_BPU_FETCH_REQUEST 3
#define PM_ITLB_REFERENCE 4
#define PM_MEMORY_CANCEL 5
#define PM_MEMORY_COMPLETE 6
#define PM_LOAD_PORT_REPLAY 7
#define PM_STORE_PORT_REPLAY 8
#define PM_MOB_LOAD_REPLAY 9
#define PM_PAGE_WALK_TYPE 10
#define PM_BSQ_2NDL_CACHE_REF 11
#define PM_IOQ_ALLOCATION 12
#define PM_FSB_DATA_ACTIVITY 13
#define PM_BSQ_ALLOCATION 14
#define PM_X87_ASSIST 15
#define PM_SSE_INPUT_ASSIST 16
#define PM_PACKED_SP_UOP 17
#define PM_PACKED_DP_UOP 18
#define PM_SCALAR_SP_UOP 19
#define PM_SCALAR_DP_UOP 20
#define PM_64BIT_MMX_UOP 21
#define PM_128BIT_MMX_UOP 22
#define PM_X87_FP_UOP 23
#define PM_X87_SIMD_MOVES_UOP 24
#define PM_MACHINE_CLEAR 25
#define PM_FRONT_END_EVENT 26
#define PM_EXECUTION_EVENT 27
#define PM_REPLAY_EVENT 28
#define PM_INSTR_RETIRED 29
#define PM_UOPS_RETIRED 30
/* metrics available for Front_end Tagging */
#define FRONT_MEMORY_LOADS 0
#define FRONT_MEMORY_STORES 1
/* metrics available for Execution Tagging */
#define EXEC_PACKED_SP_RETIRED 0
#define EXEC_PACKED_DP_RETIRED 1
#define EXEC_SCALAR_SP_RETIRED 2
#define EXEC_SCALAR_DP_RETIRED 3
#define EXEC_128BIT_MMX_RETIRED 4
#define EXEC_64BIT_MMX_RETIRED 5
#define EXEC_X87_FP_RETIRED 6
#define EXEC_X87_SIMD_MM_RETIRED 7
/* metrics available for Replay Tagging */
#define REPLAY_1CACHE_LOAD_MISS_RETIRED 0
#define REPLAY_2CACHE_LOAD_MISS_RETIRED 1
#define REPLAY_DTLB_LOAD_MISS_RETIRED 2
#define REPLAY_DTLB_STORE_MISS_RETIRED 3
#define REPLAY_DTLB_ALL_MISS_RETIRED 4
#define REPLAY_MOB_LOAD_REPLAY_RETIRED 5
#define REPLAY_SPLIT_LOAD_RETIRED 6
#define REPLAY_SPLIT_STORE_RETIRED 7
/* event mask available for Replay Tagging */
#define PARTIAL_DATA 0x10
#define UNALIGN_ADDR 0x20
#define SPLIT_LD 0x02
#define SPLIT_ST 0x02
/* CCCR bit definitions */
#define CCCR_ENABLE 0x00001000
#define CCCR_ENABLE_NOT 0xffffefff
#define CCCR_ESCR_SELECT 0x0000e000
#define CCCR_RSVD 0x00030000
#define CCCR_COMPARE 0x00040000
#define CCCR_COMPLIMENT 0x00080000
#define CCCR_THRESHOLD 0x00f00000
#define CCCR_EDGE 0x01000000
#define CCCR_FORCE_OVF 0x02000000
#define CCCR_OVF_PMI 0x04000000
#define CCCR_CASCADE 0x40000000
#define CCCR_OVF 0x80000000
/* ESCR bit definitions */
#define ESCR_USR 0x00000004
#define ESCR_OS 0x00000008
#define ESCR_TAG_ENABLE 0x00000010
#define ESCR_TAG_VALUE 0x000001e0
#define ESCR_EVENT_MASK 0x01fffe00
#define ESCR_EVENT_SELECT 0x7e000000
/* Replay Event Mask definitions */
#define REPLAY_NBOGUS 0x00000001
#define REPLAY_BOGUS 0x00000002
/* Execution Event Mask definitions */
#define EXEC_NBOGUS0 0x00000001
#define EXEC_NBOGUS1 0x00000002
#define EXEC_NBOGUS2 0x00000004
#define EXEC_NBOGUS3 0x00000008
#define EXEC_BOGUS0 0x00000010
#define EXEC_BOGUS1 0x00000020
#define EXEC_BOGUS2 0x00000040
#define EXEC_BOGUS3 0x00000080
#ifndef _ASMLANGUAGE
typedef struct perMonMsr /* PM CCCR-ESCR table */
{
short counter;
short cccr;
short escr[MSR_N_ESCR];
} PER_MON_MSR;
typedef struct perMonMsrUse /* PM MSRs selected and its value */
{
BOOL used;
int escrMsr;
int counterValue;
int cccrValue;
int escrValue;
int pebsEnable;
int pebsMatrix;
} PER_MON_MSR_USE;
typedef struct perMonEvent /* PM event table */
{
char * name;
short escr[EVENT_N_ESCR];
char counterNo[EVENT_N_ESCR][EVENT_N_COUNTER];
int eventSelect;
int eventMask;
int cccrSelect;
BOOL pebs;
} PER_MON_EVENT;
typedef struct perMonReplayTag /* Replay Tagging Metrics table */
{
char * name;
int pebsEnable;
int pebsMatrix;
int upEvent;
int upEventMask;
int eventMask;
} PER_MON_REPLAY_TAG;
typedef struct perMonExecTag /* Execution Tagging Metrics table */
{
char * name;
int upEvent;
int upEventMask;
int upTagValue;
int eventMask;
} PER_MON_EXEC_TAG;
/* function declarations */
#if defined(__STDC__) || defined(__cplusplus)
extern void perMonLibInit (void);
extern STATUS perMonInt (void);
extern int perMonCget32 (int counterNo);
extern long long int perMonCget40 (int counterNo);
extern void perMonCenable (int cccr);
extern void perMonCdisable (int cccr);
extern void perMonIntEnable (void);
extern void perMonIntDisable (void);
extern int perMonCccrGet (int counterNo, PER_MON_MSR_USE * pMsrUse);
extern void perMonCccrSet (int counterNo, int value,
PER_MON_MSR_USE *pMsrUse);
extern int perMonEscrGet (int counterNo, PER_MON_MSR_USE *pMsrUse);
extern void perMonEscrSet (int counterNo, int value,
PER_MON_MSR_USE *pMsrUse);
extern void perMonOsSet (int counterNo, PER_MON_MSR_USE * pMsrUse);
extern void perMonUsrSet (int counterNo, PER_MON_MSR_USE * pMsrUse);
extern void perMonIntSet (int counterNo, PER_MON_MSR_USE * pMsrUse);
extern void perMonIntClear (int counterNo, PER_MON_MSR_USE * pMsrUse);
extern void perMonCset (int counterNo, long long int * pValue);
extern void perMonCstart (int counterNo);
extern void perMonCstop (int counterNo);
extern STATUS perMonEventSelect (int event, int escrMsr, int counterNo,
int eventMask, int * pCounterMsr,
int * pCccrMsr, int * pCccrValue,
int * pEscrValue);
extern STATUS perMonReplaySelect (int metric, int * pUpEvent, int * pUpEventM,
int * pPebsEnable, int * pPebsMatrix,
int * pEventMask);
extern STATUS perMonExecSelect (int metric, int * pUpEvent, int * pUpEventM,
int * pUpTagValue, int * pEventMask);
extern STATUS perMonEventSet (int event, int escrMsr, int counterNo,
int eventMask, int metric, int upEventNo,
int upEscrMsr, int upCounterNo,
PER_MON_MSR_USE * pMsrUse);
extern STATUS perMonMsrSet (PER_MON_MSR_USE * pMsrUse);
#else /* __STDC__ */
extern void perMonLibInit ();
extern STATUS perMonInt ();
extern int perMonCget32 ();
extern long long int perMonCget40 ();
extern void perMonCenable ();
extern void perMonCdisable ();
extern void perMonIntEnable ();
extern void perMonIntDisable ();
extern int perMonCccrGet ();
extern void perMonCccrSet ();
extern int perMonEscrGet ();
extern void perMonEscrSet ();
extern void perMonOsSet ();
extern void perMonUsrSet ();
extern void perMonIntSet ();
extern void perMonIntClear ();
extern void perMonCset ();
extern void perMonCstart ();
extern void perMonCstop ();
extern STATUS perMonEventSelect ();
extern STATUS perMonReplaySelect ();
extern STATUS perMonExecSelect ();
extern STATUS perMonEventSet ();
extern STATUS perMonMsrSet ();
#endif /* __STDC__ */
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
}
#endif
#endif /* __INCperMonLibh */