1 /*- 2 * This file is in the public domain. 3 * 4 * $FreeBSD$ 5 */ 6 7 #ifndef _MACHINE_PMC_MDEP_H_ 8 #define _MACHINE_PMC_MDEP_H_ 9 10 #define PMC_MDEP_CLASS_INDEX_POWERPC 1 11 12 union pmc_md_op_pmcallocate { 13 uint32_t pm_event; 14 uint64_t __pad[4]; 15 }; 16 17 /* Logging */ 18 #ifdef __powerpc64__ 19 #define PMCLOG_READADDR PMCLOG_READ64 20 #define PMCLOG_EMITADDR PMCLOG_EMIT64 21 #else 22 #define PMCLOG_READADDR PMCLOG_READ32 23 #define PMCLOG_EMITADDR PMCLOG_EMIT32 24 #endif 25 26 #define mtpmr(reg, val) \ 27 __asm __volatile("mtpmr %0,%1" : : "K"(reg), "r"(val)) 28 #define mfpmr(reg) \ 29 ( { register_t val; \ 30 __asm __volatile("mfpmr %0,%1" : "=r"(val) : "K"(reg)); \ 31 val; } ) 32 33 #define PMR_PMC0 16 34 #define PMR_PMC1 17 35 #define PMR_PMC2 18 36 #define PMR_PMC3 19 37 #define PMR_PMLCa0 144 38 #define PMLCax_FC 0x80000000 39 #define PMLCax_FCS 0x40000000 40 #define PMLCax_FCU 0x20000000 41 #define PMLCax_FCM1 0x10000000 42 #define PMLCax_FCM0 0x08000000 43 #define PMLCax_CE 0x04000000 44 #define PMLCax_EVENT(x) ((x) << 16) 45 #define PMLCax_FCGS1 0x00000002 46 #define PMLCax_FCGS0 0x00000001 47 #define PMR_PMLCa1 145 48 #define PMR_PMLCa2 146 49 #define PMR_PMLCa3 147 50 #define PMR_PMLCb0 272 51 #define PMLCbx_TRIGONCTL(x) ((x) << 28) 52 #define PMLCbx_TRIGOFFCTL(x) ((x) << 24) 53 #define PMLCbx_PMCC 0x00800000 54 #define PMLCbx_PMP(x) ((x) << 13) 55 #define PMLCbx_TREHMUL(x) ((x) << 8) 56 #define PMLCbx_TRESHOLD(x) ((x) << 0) 57 #define PMR_PMLCb1 273 58 #define PMR_PMLCb2 274 59 #define PMR_PMLCb3 275 60 #define PMR_PMGC0 400 61 #define PMGC_FAC 0x80000000 62 #define PMGC_PMIE 0x40000000 63 #define PMGC_FCECE 0x20000000 64 #define PMGC_TBSEL(x) ((x) << 11) 65 #define PMGC_TBEE 0x00000100 66 #define PMR_UPMC0 0 67 #define PMR_UPMC1 1 68 #define PMR_UPMC2 2 69 #define PMR_UPMC3 3 70 #define PMR_UPMLCa0 128 71 #define PMR_UPMLCa1 129 72 #define PMR_UPMLCa2 130 73 #define PMR_UPMLCa3 131 74 #define PMR_UPMLCb0 256 75 #define PMR_UPMLCb1 257 76 #define PMR_UPMLCb2 258 77 #define PMR_UPMLCb3 259 78 #define PMR_UPMGC0 384 79 80 #if _KERNEL 81 82 struct pmc_md_powerpc_pmc { 83 uint64_t pm_powerpc_overflowcnt; 84 uint32_t pm_powerpc_evsel; 85 }; 86 87 union pmc_md_pmc { 88 struct pmc_md_powerpc_pmc pm_powerpc; 89 }; 90 91 #define PMC_TRAPFRAME_TO_PC(TF) ((TF)->srr0) 92 #define PMC_TRAPFRAME_TO_FP(TF) ((TF)->fixreg[1]) 93 #define PMC_TRAPFRAME_TO_SP(TF) (0) 94 95 #endif 96 97 #endif /* !_MACHINE_PMC_MDEP_H_ */ 98