b48a2770d4
Add support to allocate Power8 and 9 PMCs. Submitted by: Leonardo Bianconi <leonardo.bianconi@eldorado.org.br> Reviewed by: mhorne Sponsored by: Instituto de Pesquisas Eldorado (eldorado.org.br) Differential Revision: https://reviews.freebsd.org/D31109
98 lines
2.3 KiB
C
98 lines
2.3 KiB
C
/*-
|
|
* This file is in the public domain.
|
|
*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
#ifndef _MACHINE_PMC_MDEP_H_
|
|
#define _MACHINE_PMC_MDEP_H_
|
|
|
|
#define PMC_MDEP_CLASS_INDEX_POWERPC 1
|
|
|
|
union pmc_md_op_pmcallocate {
|
|
uint32_t pm_event;
|
|
uint64_t __pad[4];
|
|
};
|
|
|
|
/* Logging */
|
|
#ifdef __powerpc64__
|
|
#define PMCLOG_READADDR PMCLOG_READ64
|
|
#define PMCLOG_EMITADDR PMCLOG_EMIT64
|
|
#else
|
|
#define PMCLOG_READADDR PMCLOG_READ32
|
|
#define PMCLOG_EMITADDR PMCLOG_EMIT32
|
|
#endif
|
|
|
|
#define mtpmr(reg, val) \
|
|
__asm __volatile("mtpmr %0,%1" : : "K"(reg), "r"(val))
|
|
#define mfpmr(reg) \
|
|
( { register_t val; \
|
|
__asm __volatile("mfpmr %0,%1" : "=r"(val) : "K"(reg)); \
|
|
val; } )
|
|
|
|
#define PMR_PMC0 16
|
|
#define PMR_PMC1 17
|
|
#define PMR_PMC2 18
|
|
#define PMR_PMC3 19
|
|
#define PMR_PMLCa0 144
|
|
#define PMLCax_FC 0x80000000
|
|
#define PMLCax_FCS 0x40000000
|
|
#define PMLCax_FCU 0x20000000
|
|
#define PMLCax_FCM1 0x10000000
|
|
#define PMLCax_FCM0 0x08000000
|
|
#define PMLCax_CE 0x04000000
|
|
#define PMLCax_EVENT(x) ((x) << 16)
|
|
#define PMLCax_FCGS1 0x00000002
|
|
#define PMLCax_FCGS0 0x00000001
|
|
#define PMR_PMLCa1 145
|
|
#define PMR_PMLCa2 146
|
|
#define PMR_PMLCa3 147
|
|
#define PMR_PMLCb0 272
|
|
#define PMLCbx_TRIGONCTL(x) ((x) << 28)
|
|
#define PMLCbx_TRIGOFFCTL(x) ((x) << 24)
|
|
#define PMLCbx_PMCC 0x00800000
|
|
#define PMLCbx_PMP(x) ((x) << 13)
|
|
#define PMLCbx_TREHMUL(x) ((x) << 8)
|
|
#define PMLCbx_TRESHOLD(x) ((x) << 0)
|
|
#define PMR_PMLCb1 273
|
|
#define PMR_PMLCb2 274
|
|
#define PMR_PMLCb3 275
|
|
#define PMR_PMGC0 400
|
|
#define PMGC_FAC 0x80000000
|
|
#define PMGC_PMIE 0x40000000
|
|
#define PMGC_FCECE 0x20000000
|
|
#define PMGC_TBSEL(x) ((x) << 11)
|
|
#define PMGC_TBEE 0x00000100
|
|
#define PMR_UPMC0 0
|
|
#define PMR_UPMC1 1
|
|
#define PMR_UPMC2 2
|
|
#define PMR_UPMC3 3
|
|
#define PMR_UPMLCa0 128
|
|
#define PMR_UPMLCa1 129
|
|
#define PMR_UPMLCa2 130
|
|
#define PMR_UPMLCa3 131
|
|
#define PMR_UPMLCb0 256
|
|
#define PMR_UPMLCb1 257
|
|
#define PMR_UPMLCb2 258
|
|
#define PMR_UPMLCb3 259
|
|
#define PMR_UPMGC0 384
|
|
|
|
#if _KERNEL
|
|
|
|
struct pmc_md_powerpc_pmc {
|
|
uint64_t pm_powerpc_overflowcnt;
|
|
uint32_t pm_powerpc_evsel;
|
|
};
|
|
|
|
union pmc_md_pmc {
|
|
struct pmc_md_powerpc_pmc pm_powerpc;
|
|
};
|
|
|
|
#define PMC_TRAPFRAME_TO_PC(TF) ((TF)->srr0)
|
|
#define PMC_TRAPFRAME_TO_FP(TF) ((TF)->fixreg[1])
|
|
#define PMC_TRAPFRAME_TO_SP(TF) (0)
|
|
|
|
#endif
|
|
|
|
#endif /* !_MACHINE_PMC_MDEP_H_ */
|