1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef SPR_COMMON_H
20#define SPR_COMMON_H
21
22#define SPR_NOACCESS (&spr_noaccess)
23
24#ifdef CONFIG_TCG
25# define USR_ARG(X) X,
26# ifdef CONFIG_USER_ONLY
27# define SYS_ARG(X)
28# else
29# define SYS_ARG(X) X,
30# endif
31#else
32# define USR_ARG(X)
33# define SYS_ARG(X)
34#endif
35#ifdef CONFIG_KVM
36# define KVM_ARG(X) X,
37#else
38# define KVM_ARG(X)
39#endif
40
41typedef void spr_callback(DisasContext *, int, int);
42
43void _spr_register(CPUPPCState *env, int num, const char *name,
44 USR_ARG(spr_callback *uea_read)
45 USR_ARG(spr_callback *uea_write)
46 SYS_ARG(spr_callback *oea_read)
47 SYS_ARG(spr_callback *oea_write)
48 SYS_ARG(spr_callback *hea_read)
49 SYS_ARG(spr_callback *hea_write)
50 KVM_ARG(uint64_t one_reg_id)
51 target_ulong initial_value);
52
53
54#define spr_register_kvm_hv(env, num, name, uea_read, uea_write, \
55 oea_read, oea_write, hea_read, hea_write, \
56 one_reg_id, initial_value) \
57 _spr_register(env, num, name, \
58 USR_ARG(uea_read) USR_ARG(uea_write) \
59 SYS_ARG(oea_read) SYS_ARG(oea_write) \
60 SYS_ARG(hea_read) SYS_ARG(hea_write) \
61 KVM_ARG(one_reg_id) initial_value)
62
63
64#define spr_register_kvm(env, num, name, uea_read, uea_write, \
65 oea_read, oea_write, one_reg_id, ival) \
66 spr_register_kvm_hv(env, num, name, uea_read, uea_write, oea_read, \
67 oea_write, oea_read, oea_write, one_reg_id, ival)
68
69
70#define spr_register_hv(env, num, name, uea_read, uea_write, \
71 oea_read, oea_write, hea_read, hea_write, ival) \
72 spr_register_kvm_hv(env, num, name, uea_read, uea_write, oea_read, \
73 oea_write, hea_read, hea_write, 0, ival)
74
75#define spr_register(env, num, name, uea_read, uea_write, \
76 oea_read, oea_write, ival) \
77 spr_register_kvm(env, num, name, uea_read, uea_write, \
78 oea_read, oea_write, 0, ival)
79
80
81void spr_noaccess(DisasContext *ctx, int gprn, int sprn);
82void spr_read_generic(DisasContext *ctx, int gprn, int sprn);
83void spr_write_generic(DisasContext *ctx, int sprn, int gprn);
84void spr_write_MMCR0(DisasContext *ctx, int sprn, int gprn);
85void spr_write_MMCR1(DisasContext *ctx, int sprn, int gprn);
86void spr_write_PMC(DisasContext *ctx, int sprn, int gprn);
87void spr_write_CTRL(DisasContext *ctx, int sprn, int gprn);
88void spr_read_xer(DisasContext *ctx, int gprn, int sprn);
89void spr_write_xer(DisasContext *ctx, int sprn, int gprn);
90void spr_read_lr(DisasContext *ctx, int gprn, int sprn);
91void spr_write_lr(DisasContext *ctx, int sprn, int gprn);
92void spr_read_ctr(DisasContext *ctx, int gprn, int sprn);
93void spr_write_ctr(DisasContext *ctx, int sprn, int gprn);
94void spr_read_ureg(DisasContext *ctx, int gprn, int sprn);
95void spr_read_MMCR0_ureg(DisasContext *ctx, int gprn, int sprn);
96void spr_read_MMCR2_ureg(DisasContext *ctx, int gprn, int sprn);
97void spr_read_PMC(DisasContext *ctx, int gprn, int sprn);
98void spr_read_PMC14_ureg(DisasContext *ctx, int gprn, int sprn);
99void spr_read_PMC56_ureg(DisasContext *ctx, int gprn, int sprn);
100void spr_read_tbl(DisasContext *ctx, int gprn, int sprn);
101void spr_read_tbu(DisasContext *ctx, int gprn, int sprn);
102void spr_read_atbl(DisasContext *ctx, int gprn, int sprn);
103void spr_read_atbu(DisasContext *ctx, int gprn, int sprn);
104void spr_read_spefscr(DisasContext *ctx, int gprn, int sprn);
105void spr_write_spefscr(DisasContext *ctx, int sprn, int gprn);
106void spr_write_MMCR0_ureg(DisasContext *ctx, int sprn, int gprn);
107void spr_write_MMCR2_ureg(DisasContext *ctx, int sprn, int gprn);
108void spr_write_PMC14_ureg(DisasContext *ctx, int sprn, int gprn);
109void spr_write_PMC56_ureg(DisasContext *ctx, int sprn, int gprn);
110
111#ifndef CONFIG_USER_ONLY
112void spr_write_generic32(DisasContext *ctx, int sprn, int gprn);
113void spr_write_clear(DisasContext *ctx, int sprn, int gprn);
114void spr_access_nop(DisasContext *ctx, int sprn, int gprn);
115void spr_read_decr(DisasContext *ctx, int gprn, int sprn);
116void spr_write_decr(DisasContext *ctx, int sprn, int gprn);
117void spr_write_tbl(DisasContext *ctx, int sprn, int gprn);
118void spr_write_tbu(DisasContext *ctx, int sprn, int gprn);
119void spr_write_atbl(DisasContext *ctx, int sprn, int gprn);
120void spr_write_atbu(DisasContext *ctx, int sprn, int gprn);
121void spr_read_ibat(DisasContext *ctx, int gprn, int sprn);
122void spr_read_ibat_h(DisasContext *ctx, int gprn, int sprn);
123void spr_write_ibatu(DisasContext *ctx, int sprn, int gprn);
124void spr_write_ibatu_h(DisasContext *ctx, int sprn, int gprn);
125void spr_write_ibatl(DisasContext *ctx, int sprn, int gprn);
126void spr_write_ibatl_h(DisasContext *ctx, int sprn, int gprn);
127void spr_read_dbat(DisasContext *ctx, int gprn, int sprn);
128void spr_read_dbat_h(DisasContext *ctx, int gprn, int sprn);
129void spr_write_dbatu(DisasContext *ctx, int sprn, int gprn);
130void spr_write_dbatu_h(DisasContext *ctx, int sprn, int gprn);
131void spr_write_dbatl(DisasContext *ctx, int sprn, int gprn);
132void spr_write_dbatl_h(DisasContext *ctx, int sprn, int gprn);
133void spr_write_sdr1(DisasContext *ctx, int sprn, int gprn);
134void spr_read_40x_pit(DisasContext *ctx, int gprn, int sprn);
135void spr_write_40x_pit(DisasContext *ctx, int sprn, int gprn);
136void spr_write_40x_dbcr0(DisasContext *ctx, int sprn, int gprn);
137void spr_write_40x_sler(DisasContext *ctx, int sprn, int gprn);
138void spr_write_40x_tcr(DisasContext *ctx, int sprn, int gprn);
139void spr_write_40x_tsr(DisasContext *ctx, int sprn, int gprn);
140void spr_write_40x_pid(DisasContext *ctx, int sprn, int gprn);
141void spr_write_booke_tcr(DisasContext *ctx, int sprn, int gprn);
142void spr_write_booke_tsr(DisasContext *ctx, int sprn, int gprn);
143void spr_read_403_pbr(DisasContext *ctx, int gprn, int sprn);
144void spr_write_403_pbr(DisasContext *ctx, int sprn, int gprn);
145void spr_write_pir(DisasContext *ctx, int sprn, int gprn);
146void spr_write_excp_prefix(DisasContext *ctx, int sprn, int gprn);
147void spr_write_excp_vector(DisasContext *ctx, int sprn, int gprn);
148void spr_read_thrm(DisasContext *ctx, int gprn, int sprn);
149void spr_write_e500_l1csr0(DisasContext *ctx, int sprn, int gprn);
150void spr_write_e500_l1csr1(DisasContext *ctx, int sprn, int gprn);
151void spr_write_e500_l2csr0(DisasContext *ctx, int sprn, int gprn);
152void spr_write_booke206_mmucsr0(DisasContext *ctx, int sprn, int gprn);
153void spr_write_booke_pid(DisasContext *ctx, int sprn, int gprn);
154void spr_write_eplc(DisasContext *ctx, int sprn, int gprn);
155void spr_write_epsc(DisasContext *ctx, int sprn, int gprn);
156void spr_write_mas73(DisasContext *ctx, int sprn, int gprn);
157void spr_read_mas73(DisasContext *ctx, int gprn, int sprn);
158#ifdef TARGET_PPC64
159void spr_read_cfar(DisasContext *ctx, int gprn, int sprn);
160void spr_write_cfar(DisasContext *ctx, int sprn, int gprn);
161void spr_write_ureg(DisasContext *ctx, int sprn, int gprn);
162void spr_read_purr(DisasContext *ctx, int gprn, int sprn);
163void spr_write_purr(DisasContext *ctx, int sprn, int gprn);
164void spr_read_hdecr(DisasContext *ctx, int gprn, int sprn);
165void spr_write_hdecr(DisasContext *ctx, int sprn, int gprn);
166void spr_read_vtb(DisasContext *ctx, int gprn, int sprn);
167void spr_write_vtb(DisasContext *ctx, int sprn, int gprn);
168void spr_write_tbu40(DisasContext *ctx, int sprn, int gprn);
169void spr_write_pidr(DisasContext *ctx, int sprn, int gprn);
170void spr_write_lpidr(DisasContext *ctx, int sprn, int gprn);
171void spr_read_hior(DisasContext *ctx, int gprn, int sprn);
172void spr_write_hior(DisasContext *ctx, int sprn, int gprn);
173void spr_write_ptcr(DisasContext *ctx, int sprn, int gprn);
174void spr_write_pcr(DisasContext *ctx, int sprn, int gprn);
175void spr_read_dpdes(DisasContext *ctx, int gprn, int sprn);
176void spr_write_dpdes(DisasContext *ctx, int sprn, int gprn);
177void spr_write_amr(DisasContext *ctx, int sprn, int gprn);
178void spr_write_uamor(DisasContext *ctx, int sprn, int gprn);
179void spr_write_iamr(DisasContext *ctx, int sprn, int gprn);
180#endif
181#endif
182
183#ifdef TARGET_PPC64
184void spr_read_prev_upper32(DisasContext *ctx, int gprn, int sprn);
185void spr_write_prev_upper32(DisasContext *ctx, int sprn, int gprn);
186void spr_read_tar(DisasContext *ctx, int gprn, int sprn);
187void spr_write_tar(DisasContext *ctx, int sprn, int gprn);
188void spr_read_tm(DisasContext *ctx, int gprn, int sprn);
189void spr_write_tm(DisasContext *ctx, int sprn, int gprn);
190void spr_read_tm_upper32(DisasContext *ctx, int gprn, int sprn);
191void spr_write_tm_upper32(DisasContext *ctx, int sprn, int gprn);
192void spr_read_ebb(DisasContext *ctx, int gprn, int sprn);
193void spr_write_ebb(DisasContext *ctx, int sprn, int gprn);
194void spr_read_ebb_upper32(DisasContext *ctx, int gprn, int sprn);
195void spr_write_ebb_upper32(DisasContext *ctx, int sprn, int gprn);
196void spr_write_hmer(DisasContext *ctx, int sprn, int gprn);
197void spr_write_lpcr(DisasContext *ctx, int sprn, int gprn);
198#endif
199
200void register_low_BATs(CPUPPCState *env);
201void register_high_BATs(CPUPPCState *env);
202void register_sdr1_sprs(CPUPPCState *env);
203void register_thrm_sprs(CPUPPCState *env);
204void register_usprgh_sprs(CPUPPCState *env);
205void register_non_embedded_sprs(CPUPPCState *env);
206void register_6xx_7xx_soft_tlb(CPUPPCState *env, int nb_tlbs, int nb_ways);
207void register_generic_sprs(PowerPCCPU *cpu);
208
209#endif
210