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