xref: /plan9-contrib/sys/src/9k/386/pmc.h (revision 9ef1f84b659abcb917c5c090acbce0772e494f21)
1*9ef1f84bSDavid du Colombier typedef struct PmcCtl PmcCtl;
2*9ef1f84bSDavid du Colombier typedef struct PmcCtr PmcCtr;
3*9ef1f84bSDavid du Colombier typedef struct PmcCtlCtrId PmcCtlCtrId;
4*9ef1f84bSDavid du Colombier 
5*9ef1f84bSDavid du Colombier /*
6*9ef1f84bSDavid du Colombier  * HW performance counters
7*9ef1f84bSDavid du Colombier  */
8*9ef1f84bSDavid du Colombier struct PmcCtl {
9*9ef1f84bSDavid du Colombier 	u32int coreno;
10*9ef1f84bSDavid du Colombier 	int enab;
11*9ef1f84bSDavid du Colombier 	int user;
12*9ef1f84bSDavid du Colombier 	int os;
13*9ef1f84bSDavid du Colombier 	int nodesc;
14*9ef1f84bSDavid du Colombier 	char descstr[KNAMELEN];
15*9ef1f84bSDavid du Colombier };
16*9ef1f84bSDavid du Colombier 
17*9ef1f84bSDavid du Colombier struct PmcCtr{
18*9ef1f84bSDavid du Colombier 	int stale;
19*9ef1f84bSDavid du Colombier 	Rendez r;
20*9ef1f84bSDavid du Colombier 	u64int ctr;
21*9ef1f84bSDavid du Colombier 	int ctrset;
22*9ef1f84bSDavid du Colombier 	PmcCtl;
23*9ef1f84bSDavid du Colombier 	int ctlset;
24*9ef1f84bSDavid du Colombier };
25*9ef1f84bSDavid du Colombier 
26*9ef1f84bSDavid du Colombier enum {
27*9ef1f84bSDavid du Colombier 	PmcMaxCtrs = 4,
28*9ef1f84bSDavid du Colombier };
29*9ef1f84bSDavid du Colombier 
30*9ef1f84bSDavid du Colombier struct PmcCore{
31*9ef1f84bSDavid du Colombier 	Lock;
32*9ef1f84bSDavid du Colombier 	PmcCtr ctr[PmcMaxCtrs];
33*9ef1f84bSDavid du Colombier };
34*9ef1f84bSDavid du Colombier 
35*9ef1f84bSDavid du Colombier struct PmcCtlCtrId {
36*9ef1f84bSDavid du Colombier 	char portdesc[KNAMELEN];
37*9ef1f84bSDavid du Colombier 	char archdesc[KNAMELEN];
38*9ef1f84bSDavid du Colombier };
39*9ef1f84bSDavid du Colombier 
40*9ef1f84bSDavid du Colombier enum {
41*9ef1f84bSDavid du Colombier 	PmcIgn = 0,
42*9ef1f84bSDavid du Colombier 	PmcGet = 1,
43*9ef1f84bSDavid du Colombier 	PmcSet = 2,
44*9ef1f84bSDavid du Colombier };
45*9ef1f84bSDavid du Colombier 
46*9ef1f84bSDavid du Colombier enum {
47*9ef1f84bSDavid du Colombier 	PmcCtlNullval = 0xdead,
48*9ef1f84bSDavid du Colombier };
49*9ef1f84bSDavid du Colombier 
50*9ef1f84bSDavid du Colombier extern int pmcnregs(void);
51*9ef1f84bSDavid du Colombier extern void pmcinitctl(PmcCtl*);
52*9ef1f84bSDavid du Colombier extern int pmcsetctl(u32int, PmcCtl*, u32int);
53*9ef1f84bSDavid du Colombier extern int pmctrans(PmcCtl*);
54*9ef1f84bSDavid du Colombier extern int pmcgetctl(u32int, PmcCtl*, u32int);
55*9ef1f84bSDavid du Colombier extern int pmcdescstr(char*, int);
56*9ef1f84bSDavid du Colombier extern u64int pmcgetctr(u32int, u32int);
57*9ef1f84bSDavid du Colombier extern int pmcsetctr(u32int, u64int, u32int);
58*9ef1f84bSDavid du Colombier 
59*9ef1f84bSDavid du Colombier extern void pmcconfigure(void);
60