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