161766fe9SRichard Henderson /* 261766fe9SRichard Henderson * PA-RISC emulation cpu definitions for qemu. 361766fe9SRichard Henderson * 461766fe9SRichard Henderson * Copyright (c) 2016 Richard Henderson <rth@twiddle.net> 561766fe9SRichard Henderson * 661766fe9SRichard Henderson * This library is free software; you can redistribute it and/or 761766fe9SRichard Henderson * modify it under the terms of the GNU Lesser General Public 861766fe9SRichard Henderson * License as published by the Free Software Foundation; either 9d6ea4236SChetan Pant * version 2.1 of the License, or (at your option) any later version. 1061766fe9SRichard Henderson * 1161766fe9SRichard Henderson * This library is distributed in the hope that it will be useful, 1261766fe9SRichard Henderson * but WITHOUT ANY WARRANTY; without even the implied warranty of 1361766fe9SRichard Henderson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1461766fe9SRichard Henderson * Lesser General Public License for more details. 1561766fe9SRichard Henderson * 1661766fe9SRichard Henderson * You should have received a copy of the GNU Lesser General Public 1761766fe9SRichard Henderson * License along with this library; if not, see <http://www.gnu.org/licenses/>. 1861766fe9SRichard Henderson */ 1961766fe9SRichard Henderson 2061766fe9SRichard Henderson #ifndef HPPA_CPU_H 2161766fe9SRichard Henderson #define HPPA_CPU_H 2261766fe9SRichard Henderson 2361766fe9SRichard Henderson #include "cpu-qom.h" 2474433bf0SRichard Henderson #include "exec/cpu-defs.h" 2569242e7eSMarc-André Lureau #include "qemu/cpu-float.h" 2661766fe9SRichard Henderson 277b93dab5SRichard Henderson /* PA-RISC 1.x processors have a strong memory model. */ 287b93dab5SRichard Henderson /* ??? While we do not yet implement PA-RISC 2.0, those processors have 297b93dab5SRichard Henderson a weak memory model, but with TLB bits that force ordering on a per-page 307b93dab5SRichard Henderson basis. It's probably easier to fall back to a strong memory model. */ 317b93dab5SRichard Henderson #define TCG_GUEST_DEFAULT_MO TCG_MO_ALL 327b93dab5SRichard Henderson 333d68ee7bSRichard Henderson #define MMU_KERNEL_IDX 0 34c400b6edSHelge Deller #define MMU_PL1_IDX 1 35c400b6edSHelge Deller #define MMU_PL2_IDX 2 363d68ee7bSRichard Henderson #define MMU_USER_IDX 3 373d68ee7bSRichard Henderson #define MMU_PHYS_IDX 4 38c400b6edSHelge Deller 39*c01e5dfbSHelge Deller #define PRIV_TO_MMU_IDX(priv) (priv) 40*c01e5dfbSHelge Deller #define MMU_IDX_TO_PRIV(mmu_idx) (mmu_idx) 41*c01e5dfbSHelge Deller 4261766fe9SRichard Henderson #define TARGET_INSN_START_EXTRA_WORDS 1 4361766fe9SRichard Henderson 448b81968cSMichael Tokarev /* Hardware exceptions, interrupts, faults, and traps. */ 452986721dSRichard Henderson #define EXCP_HPMC 1 /* high priority machine check */ 462986721dSRichard Henderson #define EXCP_POWER_FAIL 2 472986721dSRichard Henderson #define EXCP_RC 3 /* recovery counter */ 482986721dSRichard Henderson #define EXCP_EXT_INTERRUPT 4 /* external interrupt */ 492986721dSRichard Henderson #define EXCP_LPMC 5 /* low priority machine check */ 502986721dSRichard Henderson #define EXCP_ITLB_MISS 6 /* itlb miss / instruction page fault */ 512986721dSRichard Henderson #define EXCP_IMP 7 /* instruction memory protection trap */ 522986721dSRichard Henderson #define EXCP_ILL 8 /* illegal instruction trap */ 532986721dSRichard Henderson #define EXCP_BREAK 9 /* break instruction */ 542986721dSRichard Henderson #define EXCP_PRIV_OPR 10 /* privileged operation trap */ 552986721dSRichard Henderson #define EXCP_PRIV_REG 11 /* privileged register trap */ 562986721dSRichard Henderson #define EXCP_OVERFLOW 12 /* signed overflow trap */ 572986721dSRichard Henderson #define EXCP_COND 13 /* trap-on-condition */ 582986721dSRichard Henderson #define EXCP_ASSIST 14 /* assist exception trap */ 592986721dSRichard Henderson #define EXCP_DTLB_MISS 15 /* dtlb miss / data page fault */ 602986721dSRichard Henderson #define EXCP_NA_ITLB_MISS 16 /* non-access itlb miss */ 612986721dSRichard Henderson #define EXCP_NA_DTLB_MISS 17 /* non-access dtlb miss */ 622986721dSRichard Henderson #define EXCP_DMP 18 /* data memory protection trap */ 632986721dSRichard Henderson #define EXCP_DMB 19 /* data memory break trap */ 642986721dSRichard Henderson #define EXCP_TLB_DIRTY 20 /* tlb dirty bit trap */ 652986721dSRichard Henderson #define EXCP_PAGE_REF 21 /* page reference trap */ 662986721dSRichard Henderson #define EXCP_ASSIST_EMU 22 /* assist emulation trap */ 672986721dSRichard Henderson #define EXCP_HPT 23 /* high-privilege transfer trap */ 682986721dSRichard Henderson #define EXCP_LPT 24 /* low-privilege transfer trap */ 692986721dSRichard Henderson #define EXCP_TB 25 /* taken branch trap */ 702986721dSRichard Henderson #define EXCP_DMAR 26 /* data memory access rights trap */ 712986721dSRichard Henderson #define EXCP_DMPI 27 /* data memory protection id trap */ 722986721dSRichard Henderson #define EXCP_UNALIGN 28 /* unaligned data reference trap */ 732986721dSRichard Henderson #define EXCP_PER_INTERRUPT 29 /* performance monitor interrupt */ 742986721dSRichard Henderson 752986721dSRichard Henderson /* Exceptions for linux-user emulation. */ 762986721dSRichard Henderson #define EXCP_SYSCALL 30 772986721dSRichard Henderson #define EXCP_SYSCALL_LWS 31 7861766fe9SRichard Henderson 794a4554c6SHelge Deller /* Emulated hardware TOC button */ 804a4554c6SHelge Deller #define EXCP_TOC 32 /* TOC = Transfer of control (NMI) */ 814a4554c6SHelge Deller 824a4554c6SHelge Deller #define CPU_INTERRUPT_NMI CPU_INTERRUPT_TGT_EXT_3 /* TOC */ 834a4554c6SHelge Deller 84fa57e327SRichard Henderson /* Taken from Linux kernel: arch/parisc/include/asm/psw.h */ 85fa57e327SRichard Henderson #define PSW_I 0x00000001 86fa57e327SRichard Henderson #define PSW_D 0x00000002 87fa57e327SRichard Henderson #define PSW_P 0x00000004 88fa57e327SRichard Henderson #define PSW_Q 0x00000008 89fa57e327SRichard Henderson #define PSW_R 0x00000010 90fa57e327SRichard Henderson #define PSW_F 0x00000020 91fa57e327SRichard Henderson #define PSW_G 0x00000040 /* PA1.x only */ 92fa57e327SRichard Henderson #define PSW_O 0x00000080 /* PA2.0 only */ 93fa57e327SRichard Henderson #define PSW_CB 0x0000ff00 94fa57e327SRichard Henderson #define PSW_M 0x00010000 95fa57e327SRichard Henderson #define PSW_V 0x00020000 96fa57e327SRichard Henderson #define PSW_C 0x00040000 97fa57e327SRichard Henderson #define PSW_B 0x00080000 98fa57e327SRichard Henderson #define PSW_X 0x00100000 99fa57e327SRichard Henderson #define PSW_N 0x00200000 100fa57e327SRichard Henderson #define PSW_L 0x00400000 101fa57e327SRichard Henderson #define PSW_H 0x00800000 102fa57e327SRichard Henderson #define PSW_T 0x01000000 103fa57e327SRichard Henderson #define PSW_S 0x02000000 104fa57e327SRichard Henderson #define PSW_E 0x04000000 105fa57e327SRichard Henderson #ifdef TARGET_HPPA64 106fa57e327SRichard Henderson #define PSW_W 0x08000000 /* PA2.0 only */ 107fa57e327SRichard Henderson #else 108fa57e327SRichard Henderson #define PSW_W 0 109fa57e327SRichard Henderson #endif 110fa57e327SRichard Henderson #define PSW_Z 0x40000000 /* PA1.x only */ 111fa57e327SRichard Henderson #define PSW_Y 0x80000000 /* PA1.x only */ 112fa57e327SRichard Henderson 113fa57e327SRichard Henderson #define PSW_SM (PSW_W | PSW_E | PSW_O | PSW_G | PSW_F \ 114fa57e327SRichard Henderson | PSW_R | PSW_Q | PSW_P | PSW_D | PSW_I) 115fa57e327SRichard Henderson 116fa57e327SRichard Henderson /* ssm/rsm instructions number PSW_W and PSW_E differently */ 117fa57e327SRichard Henderson #define PSW_SM_I PSW_I /* Enable External Interrupts */ 118fa57e327SRichard Henderson #define PSW_SM_D PSW_D 119fa57e327SRichard Henderson #define PSW_SM_P PSW_P 120fa57e327SRichard Henderson #define PSW_SM_Q PSW_Q /* Enable Interrupt State Collection */ 121fa57e327SRichard Henderson #define PSW_SM_R PSW_R /* Enable Recover Counter Trap */ 122fa57e327SRichard Henderson #ifdef TARGET_HPPA64 123fa57e327SRichard Henderson #define PSW_SM_E 0x100 124fa57e327SRichard Henderson #define PSW_SM_W 0x200 /* PA2.0 only : Enable Wide Mode */ 125fa57e327SRichard Henderson #else 126fa57e327SRichard Henderson #define PSW_SM_E 0 127fa57e327SRichard Henderson #define PSW_SM_W 0 128fa57e327SRichard Henderson #endif 129fa57e327SRichard Henderson 13035136a77SRichard Henderson #define CR_RC 0 131d5de20bdSSven Schnelle #define CR_PID1 8 132d5de20bdSSven Schnelle #define CR_PID2 9 133d5de20bdSSven Schnelle #define CR_PID3 12 134d5de20bdSSven Schnelle #define CR_PID4 13 13535136a77SRichard Henderson #define CR_SCRCCR 10 13635136a77SRichard Henderson #define CR_SAR 11 13735136a77SRichard Henderson #define CR_IVA 14 13835136a77SRichard Henderson #define CR_EIEM 15 13935136a77SRichard Henderson #define CR_IT 16 14035136a77SRichard Henderson #define CR_IIASQ 17 14135136a77SRichard Henderson #define CR_IIAOQ 18 14235136a77SRichard Henderson #define CR_IIR 19 14335136a77SRichard Henderson #define CR_ISR 20 14435136a77SRichard Henderson #define CR_IOR 21 14535136a77SRichard Henderson #define CR_IPSW 22 14635136a77SRichard Henderson #define CR_EIRR 23 14735136a77SRichard Henderson 148eaa3783bSRichard Henderson #if TARGET_REGISTER_BITS == 32 149eaa3783bSRichard Henderson typedef uint32_t target_ureg; 150eaa3783bSRichard Henderson typedef int32_t target_sreg; 151eaa3783bSRichard Henderson #define TREG_FMT_lx "%08"PRIx32 152eaa3783bSRichard Henderson #define TREG_FMT_ld "%"PRId32 153eaa3783bSRichard Henderson #else 154eaa3783bSRichard Henderson typedef uint64_t target_ureg; 155eaa3783bSRichard Henderson typedef int64_t target_sreg; 156eaa3783bSRichard Henderson #define TREG_FMT_lx "%016"PRIx64 157eaa3783bSRichard Henderson #define TREG_FMT_ld "%"PRId64 158eaa3783bSRichard Henderson #endif 159eaa3783bSRichard Henderson 160650cdb2aSRichard Henderson typedef struct { 161650cdb2aSRichard Henderson uint64_t va_b; 162650cdb2aSRichard Henderson uint64_t va_e; 163650cdb2aSRichard Henderson target_ureg pa; 164650cdb2aSRichard Henderson unsigned u : 1; 165650cdb2aSRichard Henderson unsigned t : 1; 166650cdb2aSRichard Henderson unsigned d : 1; 167650cdb2aSRichard Henderson unsigned b : 1; 168650cdb2aSRichard Henderson unsigned page_size : 4; 169650cdb2aSRichard Henderson unsigned ar_type : 3; 170650cdb2aSRichard Henderson unsigned ar_pl1 : 2; 171650cdb2aSRichard Henderson unsigned ar_pl2 : 2; 172650cdb2aSRichard Henderson unsigned entry_valid : 1; 173650cdb2aSRichard Henderson unsigned access_id : 16; 174650cdb2aSRichard Henderson } hppa_tlb_entry; 175650cdb2aSRichard Henderson 1761ea4a06aSPhilippe Mathieu-Daudé typedef struct CPUArchState { 177f8c0fd98SHelge Deller target_ureg iaoq_f; /* front */ 178f8c0fd98SHelge Deller target_ureg iaoq_b; /* back, aka next instruction */ 179f8c0fd98SHelge Deller 180eaa3783bSRichard Henderson target_ureg gr[32]; 18161766fe9SRichard Henderson uint64_t fr[32]; 18233423472SRichard Henderson uint64_t sr[8]; /* stored shifted into place for gva */ 18361766fe9SRichard Henderson 184eaa3783bSRichard Henderson target_ureg psw; /* All psw bits except the following: */ 185eaa3783bSRichard Henderson target_ureg psw_n; /* boolean */ 186eaa3783bSRichard Henderson target_sreg psw_v; /* in most significant bit */ 18761766fe9SRichard Henderson 18861766fe9SRichard Henderson /* Splitting the carry-borrow field into the MSB and "the rest", allows 18961766fe9SRichard Henderson * for "the rest" to be deleted when it is unused, but the MSB is in use. 19061766fe9SRichard Henderson * In addition, it's easier to compute carry-in for bit B+1 than it is to 19161766fe9SRichard Henderson * compute carry-out for bit B (3 vs 4 insns for addition, assuming the 19261766fe9SRichard Henderson * host has the appropriate add-with-carry insn to compute the msb). 19361766fe9SRichard Henderson * Therefore the carry bits are stored as: cb_msb : cb & 0x11111110. 19461766fe9SRichard Henderson */ 195eaa3783bSRichard Henderson target_ureg psw_cb; /* in least significant bit of next nibble */ 196eaa3783bSRichard Henderson target_ureg psw_cb_msb; /* boolean */ 19761766fe9SRichard Henderson 198c301f34eSRichard Henderson uint64_t iasq_f; 199c301f34eSRichard Henderson uint64_t iasq_b; 20061766fe9SRichard Henderson 20161766fe9SRichard Henderson uint32_t fr0_shadow; /* flags, c, ca/cq, rm, d, enables */ 20261766fe9SRichard Henderson float_status fp_status; 20361766fe9SRichard Henderson 20435136a77SRichard Henderson target_ureg cr[32]; /* control registers */ 20535136a77SRichard Henderson target_ureg cr_back[2]; /* back of cr17/cr18 */ 206f49b3537SRichard Henderson target_ureg shadow[7]; /* shadow registers */ 20735136a77SRichard Henderson 208650cdb2aSRichard Henderson /* ??? The number of entries isn't specified by the architecture. */ 209df5c6a50SHelge Deller #define HPPA_TLB_ENTRIES 256 210df5c6a50SHelge Deller #define HPPA_BTLB_ENTRIES 0 211df5c6a50SHelge Deller 212650cdb2aSRichard Henderson /* ??? Implement a unified itlb/dtlb for the moment. */ 213650cdb2aSRichard Henderson /* ??? We should use a more intelligent data structure. */ 214df5c6a50SHelge Deller hppa_tlb_entry tlb[HPPA_TLB_ENTRIES]; 215650cdb2aSRichard Henderson uint32_t tlb_last; 2161ea4a06aSPhilippe Mathieu-Daudé } CPUHPPAState; 21761766fe9SRichard Henderson 21861766fe9SRichard Henderson /** 21961766fe9SRichard Henderson * HPPACPU: 22061766fe9SRichard Henderson * @env: #CPUHPPAState 22161766fe9SRichard Henderson * 22261766fe9SRichard Henderson * An HPPA CPU. 22361766fe9SRichard Henderson */ 224b36e239eSPhilippe Mathieu-Daudé struct ArchCPU { 22561766fe9SRichard Henderson /*< private >*/ 22661766fe9SRichard Henderson CPUState parent_obj; 22761766fe9SRichard Henderson /*< public >*/ 22861766fe9SRichard Henderson 2295b146dc7SRichard Henderson CPUNegativeOffsetState neg; 23061766fe9SRichard Henderson CPUHPPAState env; 23149c29d6cSRichard Henderson QEMUTimer *alarm_timer; 23261766fe9SRichard Henderson }; 23361766fe9SRichard Henderson 23461766fe9SRichard Henderson #include "exec/cpu-all.h" 23561766fe9SRichard Henderson 23661766fe9SRichard Henderson static inline int cpu_mmu_index(CPUHPPAState *env, bool ifetch) 23761766fe9SRichard Henderson { 2383d68ee7bSRichard Henderson #ifdef CONFIG_USER_ONLY 2393d68ee7bSRichard Henderson return MMU_USER_IDX; 2403d68ee7bSRichard Henderson #else 2413d68ee7bSRichard Henderson if (env->psw & (ifetch ? PSW_C : PSW_D)) { 242*c01e5dfbSHelge Deller return PRIV_TO_MMU_IDX(env->iaoq_f & 3); 2433d68ee7bSRichard Henderson } 2443d68ee7bSRichard Henderson return MMU_PHYS_IDX; /* mmu disabled */ 2453d68ee7bSRichard Henderson #endif 24661766fe9SRichard Henderson } 24761766fe9SRichard Henderson 24861766fe9SRichard Henderson void hppa_translate_init(void); 24961766fe9SRichard Henderson 2500dacec87SIgor Mammedov #define CPU_RESOLVING_TYPE TYPE_HPPA_CPU 25161766fe9SRichard Henderson 252c301f34eSRichard Henderson static inline target_ulong hppa_form_gva_psw(target_ureg psw, uint64_t spc, 253c301f34eSRichard Henderson target_ureg off) 254c301f34eSRichard Henderson { 255c301f34eSRichard Henderson #ifdef CONFIG_USER_ONLY 256c301f34eSRichard Henderson return off; 257c301f34eSRichard Henderson #else 258c301f34eSRichard Henderson off &= (psw & PSW_W ? 0x3fffffffffffffffull : 0xffffffffull); 259c301f34eSRichard Henderson return spc | off; 260c301f34eSRichard Henderson #endif 261c301f34eSRichard Henderson } 262c301f34eSRichard Henderson 263c301f34eSRichard Henderson static inline target_ulong hppa_form_gva(CPUHPPAState *env, uint64_t spc, 264c301f34eSRichard Henderson target_ureg off) 265c301f34eSRichard Henderson { 266c301f34eSRichard Henderson return hppa_form_gva_psw(env->psw, spc, off); 267c301f34eSRichard Henderson } 268c301f34eSRichard Henderson 269217d1a5eSRichard Henderson /* 270217d1a5eSRichard Henderson * Since PSW_{I,CB} will never need to be in tb->flags, reuse them. 271494737b7SRichard Henderson * TB_FLAG_SR_SAME indicates that SR4 through SR7 all contain the 272494737b7SRichard Henderson * same value. 273494737b7SRichard Henderson */ 274494737b7SRichard Henderson #define TB_FLAG_SR_SAME PSW_I 275c301f34eSRichard Henderson #define TB_FLAG_PRIV_SHIFT 8 276217d1a5eSRichard Henderson #define TB_FLAG_UNALIGN 0x400 277c301f34eSRichard Henderson 278bb5de525SAnton Johansson static inline void cpu_get_tb_cpu_state(CPUHPPAState *env, vaddr *pc, 279bb5de525SAnton Johansson uint64_t *cs_base, uint32_t *pflags) 28061766fe9SRichard Henderson { 281c301f34eSRichard Henderson uint32_t flags = env->psw_n * PSW_N; 282c301f34eSRichard Henderson 283c301f34eSRichard Henderson /* TB lookup assumes that PC contains the complete virtual address. 284c301f34eSRichard Henderson If we leave space+offset separate, we'll get ITLB misses to an 285c301f34eSRichard Henderson incomplete virtual address. This also means that we must separate 2868b81968cSMichael Tokarev out current cpu privilege from the low bits of IAOQ_F. */ 287c301f34eSRichard Henderson #ifdef CONFIG_USER_ONLY 288ebd0e151SRichard Henderson *pc = env->iaoq_f & -4; 289ebd0e151SRichard Henderson *cs_base = env->iaoq_b & -4; 290217d1a5eSRichard Henderson flags |= TB_FLAG_UNALIGN * !env_cpu(env)->prctl_unalign_sigbus; 291c301f34eSRichard Henderson #else 2923d68ee7bSRichard Henderson /* ??? E, T, H, L, B, P bits need to be here, when implemented. */ 293c301f34eSRichard Henderson flags |= env->psw & (PSW_W | PSW_C | PSW_D); 294c301f34eSRichard Henderson flags |= (env->iaoq_f & 3) << TB_FLAG_PRIV_SHIFT; 295c301f34eSRichard Henderson 296c301f34eSRichard Henderson *pc = (env->psw & PSW_C 297c301f34eSRichard Henderson ? hppa_form_gva_psw(env->psw, env->iasq_f, env->iaoq_f & -4) 298c301f34eSRichard Henderson : env->iaoq_f & -4); 299c301f34eSRichard Henderson *cs_base = env->iasq_f; 300c301f34eSRichard Henderson 301c301f34eSRichard Henderson /* Insert a difference between IAOQ_B and IAOQ_F within the otherwise zero 302c301f34eSRichard Henderson low 32-bits of CS_BASE. This will succeed for all direct branches, 303c301f34eSRichard Henderson which is the primary case we care about -- using goto_tb within a page. 304c301f34eSRichard Henderson Failure is indicated by a zero difference. */ 305c301f34eSRichard Henderson if (env->iasq_f == env->iasq_b) { 306c301f34eSRichard Henderson target_sreg diff = env->iaoq_b - env->iaoq_f; 307c301f34eSRichard Henderson if (TARGET_REGISTER_BITS == 32 || diff == (int32_t)diff) { 308c301f34eSRichard Henderson *cs_base |= (uint32_t)diff; 309c301f34eSRichard Henderson } 310c301f34eSRichard Henderson } 311494737b7SRichard Henderson if ((env->sr[4] == env->sr[5]) 312494737b7SRichard Henderson & (env->sr[4] == env->sr[6]) 313494737b7SRichard Henderson & (env->sr[4] == env->sr[7])) { 314494737b7SRichard Henderson flags |= TB_FLAG_SR_SAME; 315494737b7SRichard Henderson } 316c301f34eSRichard Henderson #endif 317c301f34eSRichard Henderson 318c301f34eSRichard Henderson *pflags = flags; 31961766fe9SRichard Henderson } 32061766fe9SRichard Henderson 321eaa3783bSRichard Henderson target_ureg cpu_hppa_get_psw(CPUHPPAState *env); 322eaa3783bSRichard Henderson void cpu_hppa_put_psw(CPUHPPAState *env, target_ureg); 32361766fe9SRichard Henderson void cpu_hppa_loaded_fr0(CPUHPPAState *env); 32461766fe9SRichard Henderson 325d5de20bdSSven Schnelle #ifdef CONFIG_USER_ONLY 326d5de20bdSSven Schnelle static inline void cpu_hppa_change_prot_id(CPUHPPAState *env) { } 327d5de20bdSSven Schnelle #else 328d5de20bdSSven Schnelle void cpu_hppa_change_prot_id(CPUHPPAState *env); 329d5de20bdSSven Schnelle #endif 330d5de20bdSSven Schnelle 331a010bdbeSAlex Bennée int hppa_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); 33261766fe9SRichard Henderson int hppa_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); 33390c84c56SMarkus Armbruster void hppa_cpu_dump_state(CPUState *cs, FILE *f, int); 334860e0b96SRichard Henderson #ifndef CONFIG_USER_ONLY 3356d2d454aSPhilippe Mathieu-Daudé hwaddr hppa_cpu_get_phys_page_debug(CPUState *cs, vaddr addr); 3363c7bef03SRichard Henderson bool hppa_cpu_tlb_fill(CPUState *cs, vaddr address, int size, 3373c7bef03SRichard Henderson MMUAccessType access_type, int mmu_idx, 3383c7bef03SRichard Henderson bool probe, uintptr_t retaddr); 33968fa1780SPhilippe Mathieu-Daudé void hppa_cpu_do_interrupt(CPUState *cpu); 34068fa1780SPhilippe Mathieu-Daudé bool hppa_cpu_exec_interrupt(CPUState *cpu, int int_req); 341650cdb2aSRichard Henderson int hppa_get_physical_address(CPUHPPAState *env, vaddr addr, int mmu_idx, 342650cdb2aSRichard Henderson int type, hwaddr *pphys, int *pprot); 3434f5f2548SRichard Henderson extern const MemoryRegionOps hppa_io_eir_ops; 3448a9358ccSMarkus Armbruster extern const VMStateDescription vmstate_hppa_cpu; 34549c29d6cSRichard Henderson void hppa_cpu_alarm_timer(void *); 34643e05652SRichard Henderson int hppa_artype_for_page(CPUHPPAState *env, target_ulong vaddr); 347650cdb2aSRichard Henderson #endif 3488905770bSMarc-André Lureau G_NORETURN void hppa_dynamic_excp(CPUHPPAState *env, int excp, uintptr_t ra); 34961766fe9SRichard Henderson 35061766fe9SRichard Henderson #endif /* HPPA_CPU_H */ 351