]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/powerpc/include/pmc_mdep.h
contrib/tzdata: import tzdata 2023a
[FreeBSD/FreeBSD.git] / sys / powerpc / include / pmc_mdep.h
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_ */