1a829cec3SBruno Larsen (billionai) /* 2a829cec3SBruno Larsen (billionai) * PowerPC emulation for qemu: read/write callbacks for SPRs 3a829cec3SBruno Larsen (billionai) * 4a829cec3SBruno Larsen (billionai) * Copyright (C) 2021 Instituto de Pesquisas Eldorado 5a829cec3SBruno Larsen (billionai) * 6a829cec3SBruno Larsen (billionai) * This library is free software; you can redistribute it and/or 7a829cec3SBruno Larsen (billionai) * modify it under the terms of the GNU Lesser General Public 8a829cec3SBruno Larsen (billionai) * License as published by the Free Software Foundation; either 9a829cec3SBruno Larsen (billionai) * version 2.1 of the License, or (at your option) any later version. 10a829cec3SBruno Larsen (billionai) * 11a829cec3SBruno Larsen (billionai) * This library is distributed in the hope that it will be useful, 12a829cec3SBruno Larsen (billionai) * but WITHOUT ANY WARRANTY; without even the implied warranty of 13a829cec3SBruno Larsen (billionai) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14a829cec3SBruno Larsen (billionai) * Lesser General Public License for more details. 15a829cec3SBruno Larsen (billionai) * 16a829cec3SBruno Larsen (billionai) * You should have received a copy of the GNU Lesser General Public 17a829cec3SBruno Larsen (billionai) * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18a829cec3SBruno Larsen (billionai) */ 1999e964efSFabiano Rosas #ifndef SPR_COMMON_H 2099e964efSFabiano Rosas #define SPR_COMMON_H 21a829cec3SBruno Larsen (billionai) 223e770bf7SBruno Larsen (billionai) #define SPR_NOACCESS (&spr_noaccess) 233e770bf7SBruno Larsen (billionai) 24a829cec3SBruno Larsen (billionai) /* prototypes for readers and writers for SPRs */ 25a829cec3SBruno Larsen (billionai) void spr_noaccess(DisasContext *ctx, int gprn, int sprn); 26a829cec3SBruno Larsen (billionai) void spr_read_generic(DisasContext *ctx, int gprn, int sprn); 27a829cec3SBruno Larsen (billionai) void spr_write_generic(DisasContext *ctx, int sprn, int gprn); 28c2eff582SDaniel Henrique Barboza void spr_write_MMCR0(DisasContext *ctx, int sprn, int gprn); 29a6f91249SDaniel Henrique Barboza void spr_write_MMCR1(DisasContext *ctx, int sprn, int gprn); 30308b9fadSDaniel Henrique Barboza void spr_write_PMC(DisasContext *ctx, int sprn, int gprn); 317aeac354SDaniel Henrique Barboza void spr_write_CTRL(DisasContext *ctx, int sprn, int gprn); 32a829cec3SBruno Larsen (billionai) void spr_read_xer(DisasContext *ctx, int gprn, int sprn); 33a829cec3SBruno Larsen (billionai) void spr_write_xer(DisasContext *ctx, int sprn, int gprn); 34a829cec3SBruno Larsen (billionai) void spr_read_lr(DisasContext *ctx, int gprn, int sprn); 35a829cec3SBruno Larsen (billionai) void spr_write_lr(DisasContext *ctx, int sprn, int gprn); 36a829cec3SBruno Larsen (billionai) void spr_read_ctr(DisasContext *ctx, int gprn, int sprn); 37a829cec3SBruno Larsen (billionai) void spr_write_ctr(DisasContext *ctx, int sprn, int gprn); 38a829cec3SBruno Larsen (billionai) void spr_read_ureg(DisasContext *ctx, int gprn, int sprn); 39565cb109SGustavo Romero void spr_read_MMCR0_ureg(DisasContext *ctx, int gprn, int sprn); 407b3ecf16SDaniel Henrique Barboza void spr_read_MMCR2_ureg(DisasContext *ctx, int gprn, int sprn); 41308b9fadSDaniel Henrique Barboza void spr_read_PMC(DisasContext *ctx, int gprn, int sprn); 42cedf7069SDaniel Henrique Barboza void spr_read_PMC14_ureg(DisasContext *ctx, int gprn, int sprn); 43cedf7069SDaniel Henrique Barboza void spr_read_PMC56_ureg(DisasContext *ctx, int gprn, int sprn); 44a829cec3SBruno Larsen (billionai) void spr_read_tbl(DisasContext *ctx, int gprn, int sprn); 45a829cec3SBruno Larsen (billionai) void spr_read_tbu(DisasContext *ctx, int gprn, int sprn); 46a829cec3SBruno Larsen (billionai) void spr_read_atbl(DisasContext *ctx, int gprn, int sprn); 47a829cec3SBruno Larsen (billionai) void spr_read_atbu(DisasContext *ctx, int gprn, int sprn); 48a829cec3SBruno Larsen (billionai) void spr_read_spefscr(DisasContext *ctx, int gprn, int sprn); 49a829cec3SBruno Larsen (billionai) void spr_write_spefscr(DisasContext *ctx, int sprn, int gprn); 50565cb109SGustavo Romero void spr_write_MMCR0_ureg(DisasContext *ctx, int sprn, int gprn); 517b3ecf16SDaniel Henrique Barboza void spr_write_MMCR2_ureg(DisasContext *ctx, int sprn, int gprn); 52cedf7069SDaniel Henrique Barboza void spr_write_PMC14_ureg(DisasContext *ctx, int sprn, int gprn); 53cedf7069SDaniel Henrique Barboza void spr_write_PMC56_ureg(DisasContext *ctx, int sprn, int gprn); 54a829cec3SBruno Larsen (billionai) 55a829cec3SBruno Larsen (billionai) #ifndef CONFIG_USER_ONLY 56a829cec3SBruno Larsen (billionai) void spr_write_generic32(DisasContext *ctx, int sprn, int gprn); 57a829cec3SBruno Larsen (billionai) void spr_write_clear(DisasContext *ctx, int sprn, int gprn); 58a829cec3SBruno Larsen (billionai) void spr_access_nop(DisasContext *ctx, int sprn, int gprn); 59a829cec3SBruno Larsen (billionai) void spr_read_decr(DisasContext *ctx, int gprn, int sprn); 60a829cec3SBruno Larsen (billionai) void spr_write_decr(DisasContext *ctx, int sprn, int gprn); 61a829cec3SBruno Larsen (billionai) void spr_write_tbl(DisasContext *ctx, int sprn, int gprn); 62a829cec3SBruno Larsen (billionai) void spr_write_tbu(DisasContext *ctx, int sprn, int gprn); 63a829cec3SBruno Larsen (billionai) void spr_write_atbl(DisasContext *ctx, int sprn, int gprn); 64a829cec3SBruno Larsen (billionai) void spr_write_atbu(DisasContext *ctx, int sprn, int gprn); 65a829cec3SBruno Larsen (billionai) void spr_read_ibat(DisasContext *ctx, int gprn, int sprn); 66a829cec3SBruno Larsen (billionai) void spr_read_ibat_h(DisasContext *ctx, int gprn, int sprn); 67a829cec3SBruno Larsen (billionai) void spr_write_ibatu(DisasContext *ctx, int sprn, int gprn); 68a829cec3SBruno Larsen (billionai) void spr_write_ibatu_h(DisasContext *ctx, int sprn, int gprn); 69a829cec3SBruno Larsen (billionai) void spr_write_ibatl(DisasContext *ctx, int sprn, int gprn); 70a829cec3SBruno Larsen (billionai) void spr_write_ibatl_h(DisasContext *ctx, int sprn, int gprn); 71a829cec3SBruno Larsen (billionai) void spr_read_dbat(DisasContext *ctx, int gprn, int sprn); 72a829cec3SBruno Larsen (billionai) void spr_read_dbat_h(DisasContext *ctx, int gprn, int sprn); 73a829cec3SBruno Larsen (billionai) void spr_write_dbatu(DisasContext *ctx, int sprn, int gprn); 74a829cec3SBruno Larsen (billionai) void spr_write_dbatu_h(DisasContext *ctx, int sprn, int gprn); 75a829cec3SBruno Larsen (billionai) void spr_write_dbatl(DisasContext *ctx, int sprn, int gprn); 76a829cec3SBruno Larsen (billionai) void spr_write_dbatl_h(DisasContext *ctx, int sprn, int gprn); 77a829cec3SBruno Larsen (billionai) void spr_write_sdr1(DisasContext *ctx, int sprn, int gprn); 78a829cec3SBruno Larsen (billionai) void spr_read_40x_pit(DisasContext *ctx, int gprn, int sprn); 79a829cec3SBruno Larsen (billionai) void spr_write_40x_pit(DisasContext *ctx, int sprn, int gprn); 80a829cec3SBruno Larsen (billionai) void spr_write_40x_dbcr0(DisasContext *ctx, int sprn, int gprn); 81a829cec3SBruno Larsen (billionai) void spr_write_40x_sler(DisasContext *ctx, int sprn, int gprn); 82cbd8f17dSCédric Le Goater void spr_write_40x_tcr(DisasContext *ctx, int sprn, int gprn); 83cbd8f17dSCédric Le Goater void spr_write_40x_tsr(DisasContext *ctx, int sprn, int gprn); 84dd69d140SCédric Le Goater void spr_write_40x_pid(DisasContext *ctx, int sprn, int gprn); 85a829cec3SBruno Larsen (billionai) void spr_write_booke_tcr(DisasContext *ctx, int sprn, int gprn); 86a829cec3SBruno Larsen (billionai) void spr_write_booke_tsr(DisasContext *ctx, int sprn, int gprn); 87a829cec3SBruno Larsen (billionai) void spr_read_403_pbr(DisasContext *ctx, int gprn, int sprn); 88a829cec3SBruno Larsen (billionai) void spr_write_403_pbr(DisasContext *ctx, int sprn, int gprn); 89a829cec3SBruno Larsen (billionai) void spr_write_pir(DisasContext *ctx, int sprn, int gprn); 90a829cec3SBruno Larsen (billionai) void spr_write_excp_prefix(DisasContext *ctx, int sprn, int gprn); 91a829cec3SBruno Larsen (billionai) void spr_write_excp_vector(DisasContext *ctx, int sprn, int gprn); 92a829cec3SBruno Larsen (billionai) void spr_read_thrm(DisasContext *ctx, int gprn, int sprn); 93a829cec3SBruno Larsen (billionai) void spr_write_e500_l1csr0(DisasContext *ctx, int sprn, int gprn); 94a829cec3SBruno Larsen (billionai) void spr_write_e500_l1csr1(DisasContext *ctx, int sprn, int gprn); 95a829cec3SBruno Larsen (billionai) void spr_write_e500_l2csr0(DisasContext *ctx, int sprn, int gprn); 96a829cec3SBruno Larsen (billionai) void spr_write_booke206_mmucsr0(DisasContext *ctx, int sprn, int gprn); 97a829cec3SBruno Larsen (billionai) void spr_write_booke_pid(DisasContext *ctx, int sprn, int gprn); 98a829cec3SBruno Larsen (billionai) void spr_write_eplc(DisasContext *ctx, int sprn, int gprn); 99a829cec3SBruno Larsen (billionai) void spr_write_epsc(DisasContext *ctx, int sprn, int gprn); 100a829cec3SBruno Larsen (billionai) void spr_write_mas73(DisasContext *ctx, int sprn, int gprn); 101a829cec3SBruno Larsen (billionai) void spr_read_mas73(DisasContext *ctx, int gprn, int sprn); 102a829cec3SBruno Larsen (billionai) #ifdef TARGET_PPC64 103a829cec3SBruno Larsen (billionai) void spr_read_cfar(DisasContext *ctx, int gprn, int sprn); 104a829cec3SBruno Larsen (billionai) void spr_write_cfar(DisasContext *ctx, int sprn, int gprn); 105a829cec3SBruno Larsen (billionai) void spr_write_ureg(DisasContext *ctx, int sprn, int gprn); 106a829cec3SBruno Larsen (billionai) void spr_read_purr(DisasContext *ctx, int gprn, int sprn); 107a829cec3SBruno Larsen (billionai) void spr_write_purr(DisasContext *ctx, int sprn, int gprn); 108a829cec3SBruno Larsen (billionai) void spr_read_hdecr(DisasContext *ctx, int gprn, int sprn); 109a829cec3SBruno Larsen (billionai) void spr_write_hdecr(DisasContext *ctx, int sprn, int gprn); 110a829cec3SBruno Larsen (billionai) void spr_read_vtb(DisasContext *ctx, int gprn, int sprn); 111a829cec3SBruno Larsen (billionai) void spr_write_vtb(DisasContext *ctx, int sprn, int gprn); 112a829cec3SBruno Larsen (billionai) void spr_write_tbu40(DisasContext *ctx, int sprn, int gprn); 113a829cec3SBruno Larsen (billionai) void spr_write_pidr(DisasContext *ctx, int sprn, int gprn); 114a829cec3SBruno Larsen (billionai) void spr_write_lpidr(DisasContext *ctx, int sprn, int gprn); 115a829cec3SBruno Larsen (billionai) void spr_read_hior(DisasContext *ctx, int gprn, int sprn); 116a829cec3SBruno Larsen (billionai) void spr_write_hior(DisasContext *ctx, int sprn, int gprn); 117a829cec3SBruno Larsen (billionai) void spr_write_ptcr(DisasContext *ctx, int sprn, int gprn); 118a829cec3SBruno Larsen (billionai) void spr_write_pcr(DisasContext *ctx, int sprn, int gprn); 119a829cec3SBruno Larsen (billionai) void spr_read_dpdes(DisasContext *ctx, int gprn, int sprn); 120a829cec3SBruno Larsen (billionai) void spr_write_dpdes(DisasContext *ctx, int sprn, int gprn); 121a829cec3SBruno Larsen (billionai) void spr_write_amr(DisasContext *ctx, int sprn, int gprn); 122a829cec3SBruno Larsen (billionai) void spr_write_uamor(DisasContext *ctx, int sprn, int gprn); 123a829cec3SBruno Larsen (billionai) void spr_write_iamr(DisasContext *ctx, int sprn, int gprn); 124a829cec3SBruno Larsen (billionai) #endif 125a829cec3SBruno Larsen (billionai) #endif 126a829cec3SBruno Larsen (billionai) 127a829cec3SBruno Larsen (billionai) #ifdef TARGET_PPC64 128a829cec3SBruno Larsen (billionai) void spr_read_prev_upper32(DisasContext *ctx, int gprn, int sprn); 129a829cec3SBruno Larsen (billionai) void spr_write_prev_upper32(DisasContext *ctx, int sprn, int gprn); 130a829cec3SBruno Larsen (billionai) void spr_read_tar(DisasContext *ctx, int gprn, int sprn); 131a829cec3SBruno Larsen (billionai) void spr_write_tar(DisasContext *ctx, int sprn, int gprn); 132a829cec3SBruno Larsen (billionai) void spr_read_tm(DisasContext *ctx, int gprn, int sprn); 133a829cec3SBruno Larsen (billionai) void spr_write_tm(DisasContext *ctx, int sprn, int gprn); 134a829cec3SBruno Larsen (billionai) void spr_read_tm_upper32(DisasContext *ctx, int gprn, int sprn); 135a829cec3SBruno Larsen (billionai) void spr_write_tm_upper32(DisasContext *ctx, int sprn, int gprn); 136a829cec3SBruno Larsen (billionai) void spr_read_ebb(DisasContext *ctx, int gprn, int sprn); 137a829cec3SBruno Larsen (billionai) void spr_write_ebb(DisasContext *ctx, int sprn, int gprn); 138a829cec3SBruno Larsen (billionai) void spr_read_ebb_upper32(DisasContext *ctx, int gprn, int sprn); 139a829cec3SBruno Larsen (billionai) void spr_write_ebb_upper32(DisasContext *ctx, int sprn, int gprn); 140a829cec3SBruno Larsen (billionai) void spr_write_hmer(DisasContext *ctx, int sprn, int gprn); 141a829cec3SBruno Larsen (billionai) void spr_write_lpcr(DisasContext *ctx, int sprn, int gprn); 142a829cec3SBruno Larsen (billionai) #endif 143a829cec3SBruno Larsen (billionai) 144*917ea438SFabiano Rosas void register_low_BATs(CPUPPCState *env); 145*917ea438SFabiano Rosas void register_high_BATs(CPUPPCState *env); 146*917ea438SFabiano Rosas void register_sdr1_sprs(CPUPPCState *env); 147*917ea438SFabiano Rosas void register_thrm_sprs(CPUPPCState *env); 148*917ea438SFabiano Rosas void register_usprgh_sprs(CPUPPCState *env); 149*917ea438SFabiano Rosas void register_non_embedded_sprs(CPUPPCState *env); 150*917ea438SFabiano Rosas void register_6xx_7xx_soft_tlb(CPUPPCState *env, int nb_tlbs, int nb_ways); 151*917ea438SFabiano Rosas 152a829cec3SBruno Larsen (billionai) #endif 153