|
Packit Service |
a1973e |
/* $Id: ppc.h,v 1.2 2005/04/09 10:25:47 mikpe Exp $
|
|
Packit Service |
a1973e |
* PPC32-specific code for performance counters library.
|
|
Packit Service |
a1973e |
*
|
|
Packit Service |
a1973e |
* Copyright (C) 2004 Mikael Pettersson
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
#ifndef __LIB_PERFCTR_PPC_H
|
|
Packit Service |
a1973e |
#define __LIB_PERFCTR_PPC_H
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
static __inline__ unsigned long get_tbl(void)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
unsigned long tbl;
|
|
Packit Service |
a1973e |
asm volatile("mftb %0" : "=r" (tbl));
|
|
Packit Service |
a1973e |
return tbl;
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
#define rdtscl(x) do { (x) = get_tbl(); } while(0)
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#define SPRN_PVR 0x11F
|
|
Packit Service |
a1973e |
#define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF)
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#define SPRN_UPMC1 0x3A9
|
|
Packit Service |
a1973e |
#define SPRN_UPMC2 0x3AA
|
|
Packit Service |
a1973e |
#define SPRN_UPMC3 0x3AD
|
|
Packit Service |
a1973e |
#define SPRN_UPMC4 0x3AE
|
|
Packit Service |
a1973e |
#define SPRN_UPMC5 0x3A1
|
|
Packit Service |
a1973e |
#define SPRN_UPMC6 0x3A2
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#define __stringify_1(x) #x
|
|
Packit Service |
a1973e |
#define __stringify(x) __stringify_1(x)
|
|
Packit Service |
a1973e |
#define mfspr(rn) ({unsigned int rval; \
|
|
Packit Service |
a1973e |
asm volatile("mfspr %0," __stringify(rn) \
|
|
Packit Service |
a1973e |
: "=r" (rval)); rval; })
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
static __inline__ unsigned int read_pmc(unsigned int pmc)
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
switch( pmc ) {
|
|
Packit Service |
a1973e |
default: /* impossible, but silences gcc warning */
|
|
Packit Service |
a1973e |
case 0:
|
|
Packit Service |
a1973e |
return mfspr(SPRN_UPMC1);
|
|
Packit Service |
a1973e |
case 1:
|
|
Packit Service |
a1973e |
return mfspr(SPRN_UPMC2);
|
|
Packit Service |
a1973e |
case 2:
|
|
Packit Service |
a1973e |
return mfspr(SPRN_UPMC3);
|
|
Packit Service |
a1973e |
case 3:
|
|
Packit Service |
a1973e |
return mfspr(SPRN_UPMC4);
|
|
Packit Service |
a1973e |
case 4:
|
|
Packit Service |
a1973e |
return mfspr(SPRN_UPMC5);
|
|
Packit Service |
a1973e |
case 5:
|
|
Packit Service |
a1973e |
return mfspr(SPRN_UPMC6);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
#define rdpmcl(pmc,x) do { (x) = read_pmc((pmc)); } while(0)
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#define vperfctr_has_rdpmc(vperfctr) ((vperfctr)->have_rdpmc)
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
extern void perfctr_info_cpu_init(struct perfctr_info*);
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#endif /* __LIB_PERFCTR_PPC_H */
|