xref: /qemu/target/hppa/cpu.h (revision 5b146dc716cfd247f99556c04e6e46fbd67565a0)
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
961766fe9SRichard Henderson  * version 2 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 "qemu-common.h"
2461766fe9SRichard Henderson #include "cpu-qom.h"
2574433bf0SRichard Henderson #include "exec/cpu-defs.h"
2661766fe9SRichard Henderson 
2761766fe9SRichard Henderson 
287b93dab5SRichard Henderson /* PA-RISC 1.x processors have a strong memory model.  */
297b93dab5SRichard Henderson /* ??? While we do not yet implement PA-RISC 2.0, those processors have
307b93dab5SRichard Henderson    a weak memory model, but with TLB bits that force ordering on a per-page
317b93dab5SRichard Henderson    basis.  It's probably easier to fall back to a strong memory model.  */
327b93dab5SRichard Henderson #define TCG_GUEST_DEFAULT_MO        TCG_MO_ALL
337b93dab5SRichard Henderson 
3461766fe9SRichard Henderson #define ALIGNED_ONLY
353d68ee7bSRichard Henderson #define MMU_KERNEL_IDX   0
363d68ee7bSRichard Henderson #define MMU_USER_IDX     3
373d68ee7bSRichard Henderson #define MMU_PHYS_IDX     4
3861766fe9SRichard Henderson #define TARGET_INSN_START_EXTRA_WORDS 1
3961766fe9SRichard Henderson 
402986721dSRichard Henderson /* Hardware exceptions, interupts, faults, and traps.  */
412986721dSRichard Henderson #define EXCP_HPMC                1  /* high priority machine check */
422986721dSRichard Henderson #define EXCP_POWER_FAIL          2
432986721dSRichard Henderson #define EXCP_RC                  3  /* recovery counter */
442986721dSRichard Henderson #define EXCP_EXT_INTERRUPT       4  /* external interrupt */
452986721dSRichard Henderson #define EXCP_LPMC                5  /* low priority machine check */
462986721dSRichard Henderson #define EXCP_ITLB_MISS           6  /* itlb miss / instruction page fault */
472986721dSRichard Henderson #define EXCP_IMP                 7  /* instruction memory protection trap */
482986721dSRichard Henderson #define EXCP_ILL                 8  /* illegal instruction trap */
492986721dSRichard Henderson #define EXCP_BREAK               9  /* break instruction */
502986721dSRichard Henderson #define EXCP_PRIV_OPR            10 /* privileged operation trap */
512986721dSRichard Henderson #define EXCP_PRIV_REG            11 /* privileged register trap */
522986721dSRichard Henderson #define EXCP_OVERFLOW            12 /* signed overflow trap */
532986721dSRichard Henderson #define EXCP_COND                13 /* trap-on-condition */
542986721dSRichard Henderson #define EXCP_ASSIST              14 /* assist exception trap */
552986721dSRichard Henderson #define EXCP_DTLB_MISS           15 /* dtlb miss / data page fault */
562986721dSRichard Henderson #define EXCP_NA_ITLB_MISS        16 /* non-access itlb miss */
572986721dSRichard Henderson #define EXCP_NA_DTLB_MISS        17 /* non-access dtlb miss */
582986721dSRichard Henderson #define EXCP_DMP                 18 /* data memory protection trap */
592986721dSRichard Henderson #define EXCP_DMB                 19 /* data memory break trap */
602986721dSRichard Henderson #define EXCP_TLB_DIRTY           20 /* tlb dirty bit trap */
612986721dSRichard Henderson #define EXCP_PAGE_REF            21 /* page reference trap */
622986721dSRichard Henderson #define EXCP_ASSIST_EMU          22 /* assist emulation trap */
632986721dSRichard Henderson #define EXCP_HPT                 23 /* high-privilege transfer trap */
642986721dSRichard Henderson #define EXCP_LPT                 24 /* low-privilege transfer trap */
652986721dSRichard Henderson #define EXCP_TB                  25 /* taken branch trap */
662986721dSRichard Henderson #define EXCP_DMAR                26 /* data memory access rights trap */
672986721dSRichard Henderson #define EXCP_DMPI                27 /* data memory protection id trap */
682986721dSRichard Henderson #define EXCP_UNALIGN             28 /* unaligned data reference trap */
692986721dSRichard Henderson #define EXCP_PER_INTERRUPT       29 /* performance monitor interrupt */
702986721dSRichard Henderson 
712986721dSRichard Henderson /* Exceptions for linux-user emulation.  */
722986721dSRichard Henderson #define EXCP_SYSCALL             30
732986721dSRichard Henderson #define EXCP_SYSCALL_LWS         31
7461766fe9SRichard Henderson 
75fa57e327SRichard Henderson /* Taken from Linux kernel: arch/parisc/include/asm/psw.h */
76fa57e327SRichard Henderson #define PSW_I            0x00000001
77fa57e327SRichard Henderson #define PSW_D            0x00000002
78fa57e327SRichard Henderson #define PSW_P            0x00000004
79fa57e327SRichard Henderson #define PSW_Q            0x00000008
80fa57e327SRichard Henderson #define PSW_R            0x00000010
81fa57e327SRichard Henderson #define PSW_F            0x00000020
82fa57e327SRichard Henderson #define PSW_G            0x00000040 /* PA1.x only */
83fa57e327SRichard Henderson #define PSW_O            0x00000080 /* PA2.0 only */
84fa57e327SRichard Henderson #define PSW_CB           0x0000ff00
85fa57e327SRichard Henderson #define PSW_M            0x00010000
86fa57e327SRichard Henderson #define PSW_V            0x00020000
87fa57e327SRichard Henderson #define PSW_C            0x00040000
88fa57e327SRichard Henderson #define PSW_B            0x00080000
89fa57e327SRichard Henderson #define PSW_X            0x00100000
90fa57e327SRichard Henderson #define PSW_N            0x00200000
91fa57e327SRichard Henderson #define PSW_L            0x00400000
92fa57e327SRichard Henderson #define PSW_H            0x00800000
93fa57e327SRichard Henderson #define PSW_T            0x01000000
94fa57e327SRichard Henderson #define PSW_S            0x02000000
95fa57e327SRichard Henderson #define PSW_E            0x04000000
96fa57e327SRichard Henderson #ifdef TARGET_HPPA64
97fa57e327SRichard Henderson #define PSW_W            0x08000000 /* PA2.0 only */
98fa57e327SRichard Henderson #else
99fa57e327SRichard Henderson #define PSW_W            0
100fa57e327SRichard Henderson #endif
101fa57e327SRichard Henderson #define PSW_Z            0x40000000 /* PA1.x only */
102fa57e327SRichard Henderson #define PSW_Y            0x80000000 /* PA1.x only */
103fa57e327SRichard Henderson 
104fa57e327SRichard Henderson #define PSW_SM (PSW_W | PSW_E | PSW_O | PSW_G | PSW_F \
105fa57e327SRichard Henderson                | PSW_R | PSW_Q | PSW_P | PSW_D | PSW_I)
106fa57e327SRichard Henderson 
107fa57e327SRichard Henderson /* ssm/rsm instructions number PSW_W and PSW_E differently */
108fa57e327SRichard Henderson #define PSW_SM_I         PSW_I      /* Enable External Interrupts */
109fa57e327SRichard Henderson #define PSW_SM_D         PSW_D
110fa57e327SRichard Henderson #define PSW_SM_P         PSW_P
111fa57e327SRichard Henderson #define PSW_SM_Q         PSW_Q      /* Enable Interrupt State Collection */
112fa57e327SRichard Henderson #define PSW_SM_R         PSW_R      /* Enable Recover Counter Trap */
113fa57e327SRichard Henderson #ifdef TARGET_HPPA64
114fa57e327SRichard Henderson #define PSW_SM_E         0x100
115fa57e327SRichard Henderson #define PSW_SM_W         0x200      /* PA2.0 only : Enable Wide Mode */
116fa57e327SRichard Henderson #else
117fa57e327SRichard Henderson #define PSW_SM_E         0
118fa57e327SRichard Henderson #define PSW_SM_W         0
119fa57e327SRichard Henderson #endif
120fa57e327SRichard Henderson 
12135136a77SRichard Henderson #define CR_RC            0
122d5de20bdSSven Schnelle #define CR_PID1          8
123d5de20bdSSven Schnelle #define CR_PID2          9
124d5de20bdSSven Schnelle #define CR_PID3          12
125d5de20bdSSven Schnelle #define CR_PID4          13
12635136a77SRichard Henderson #define CR_SCRCCR        10
12735136a77SRichard Henderson #define CR_SAR           11
12835136a77SRichard Henderson #define CR_IVA           14
12935136a77SRichard Henderson #define CR_EIEM          15
13035136a77SRichard Henderson #define CR_IT            16
13135136a77SRichard Henderson #define CR_IIASQ         17
13235136a77SRichard Henderson #define CR_IIAOQ         18
13335136a77SRichard Henderson #define CR_IIR           19
13435136a77SRichard Henderson #define CR_ISR           20
13535136a77SRichard Henderson #define CR_IOR           21
13635136a77SRichard Henderson #define CR_IPSW          22
13735136a77SRichard Henderson #define CR_EIRR          23
13835136a77SRichard Henderson 
13961766fe9SRichard Henderson typedef struct CPUHPPAState CPUHPPAState;
14061766fe9SRichard Henderson 
141eaa3783bSRichard Henderson #if TARGET_REGISTER_BITS == 32
142eaa3783bSRichard Henderson typedef uint32_t target_ureg;
143eaa3783bSRichard Henderson typedef int32_t  target_sreg;
144eaa3783bSRichard Henderson #define TREG_FMT_lx   "%08"PRIx32
145eaa3783bSRichard Henderson #define TREG_FMT_ld   "%"PRId32
146eaa3783bSRichard Henderson #else
147eaa3783bSRichard Henderson typedef uint64_t target_ureg;
148eaa3783bSRichard Henderson typedef int64_t  target_sreg;
149eaa3783bSRichard Henderson #define TREG_FMT_lx   "%016"PRIx64
150eaa3783bSRichard Henderson #define TREG_FMT_ld   "%"PRId64
151eaa3783bSRichard Henderson #endif
152eaa3783bSRichard Henderson 
153650cdb2aSRichard Henderson typedef struct {
154650cdb2aSRichard Henderson     uint64_t va_b;
155650cdb2aSRichard Henderson     uint64_t va_e;
156650cdb2aSRichard Henderson     target_ureg pa;
157650cdb2aSRichard Henderson     unsigned u : 1;
158650cdb2aSRichard Henderson     unsigned t : 1;
159650cdb2aSRichard Henderson     unsigned d : 1;
160650cdb2aSRichard Henderson     unsigned b : 1;
161650cdb2aSRichard Henderson     unsigned page_size : 4;
162650cdb2aSRichard Henderson     unsigned ar_type : 3;
163650cdb2aSRichard Henderson     unsigned ar_pl1 : 2;
164650cdb2aSRichard Henderson     unsigned ar_pl2 : 2;
165650cdb2aSRichard Henderson     unsigned entry_valid : 1;
166650cdb2aSRichard Henderson     unsigned access_id : 16;
167650cdb2aSRichard Henderson } hppa_tlb_entry;
168650cdb2aSRichard Henderson 
16961766fe9SRichard Henderson struct CPUHPPAState {
170eaa3783bSRichard Henderson     target_ureg gr[32];
17161766fe9SRichard Henderson     uint64_t fr[32];
17233423472SRichard Henderson     uint64_t sr[8];          /* stored shifted into place for gva */
17361766fe9SRichard Henderson 
174eaa3783bSRichard Henderson     target_ureg psw;         /* All psw bits except the following:  */
175eaa3783bSRichard Henderson     target_ureg psw_n;       /* boolean */
176eaa3783bSRichard Henderson     target_sreg psw_v;       /* in most significant bit */
17761766fe9SRichard Henderson 
17861766fe9SRichard Henderson     /* Splitting the carry-borrow field into the MSB and "the rest", allows
17961766fe9SRichard Henderson      * for "the rest" to be deleted when it is unused, but the MSB is in use.
18061766fe9SRichard Henderson      * In addition, it's easier to compute carry-in for bit B+1 than it is to
18161766fe9SRichard Henderson      * compute carry-out for bit B (3 vs 4 insns for addition, assuming the
18261766fe9SRichard Henderson      * host has the appropriate add-with-carry insn to compute the msb).
18361766fe9SRichard Henderson      * Therefore the carry bits are stored as: cb_msb : cb & 0x11111110.
18461766fe9SRichard Henderson      */
185eaa3783bSRichard Henderson     target_ureg psw_cb;      /* in least significant bit of next nibble */
186eaa3783bSRichard Henderson     target_ureg psw_cb_msb;  /* boolean */
18761766fe9SRichard Henderson 
188eaa3783bSRichard Henderson     target_ureg iaoq_f;      /* front */
189eaa3783bSRichard Henderson     target_ureg iaoq_b;      /* back, aka next instruction */
190c301f34eSRichard Henderson     uint64_t iasq_f;
191c301f34eSRichard Henderson     uint64_t iasq_b;
19261766fe9SRichard Henderson 
19361766fe9SRichard Henderson     uint32_t fr0_shadow;     /* flags, c, ca/cq, rm, d, enables */
19461766fe9SRichard Henderson     float_status fp_status;
19561766fe9SRichard Henderson 
19635136a77SRichard Henderson     target_ureg cr[32];      /* control registers */
19735136a77SRichard Henderson     target_ureg cr_back[2];  /* back of cr17/cr18 */
198f49b3537SRichard Henderson     target_ureg shadow[7];   /* shadow registers */
19935136a77SRichard Henderson 
20061766fe9SRichard Henderson     /* Those resources are used only in QEMU core */
20161766fe9SRichard Henderson     CPU_COMMON
202650cdb2aSRichard Henderson 
203650cdb2aSRichard Henderson     /* ??? The number of entries isn't specified by the architecture.  */
204650cdb2aSRichard Henderson     /* ??? Implement a unified itlb/dtlb for the moment.  */
205650cdb2aSRichard Henderson     /* ??? We should use a more intelligent data structure.  */
206650cdb2aSRichard Henderson     hppa_tlb_entry tlb[256];
207650cdb2aSRichard Henderson     uint32_t tlb_last;
20861766fe9SRichard Henderson };
20961766fe9SRichard Henderson 
21061766fe9SRichard Henderson /**
21161766fe9SRichard Henderson  * HPPACPU:
21261766fe9SRichard Henderson  * @env: #CPUHPPAState
21361766fe9SRichard Henderson  *
21461766fe9SRichard Henderson  * An HPPA CPU.
21561766fe9SRichard Henderson  */
21661766fe9SRichard Henderson struct HPPACPU {
21761766fe9SRichard Henderson     /*< private >*/
21861766fe9SRichard Henderson     CPUState parent_obj;
21961766fe9SRichard Henderson     /*< public >*/
22061766fe9SRichard Henderson 
221*5b146dc7SRichard Henderson     CPUNegativeOffsetState neg;
22261766fe9SRichard Henderson     CPUHPPAState env;
22349c29d6cSRichard Henderson     QEMUTimer *alarm_timer;
22461766fe9SRichard Henderson };
22561766fe9SRichard Henderson 
22661766fe9SRichard Henderson 
2274f7c64b3SRichard Henderson typedef CPUHPPAState CPUArchState;
2282161a612SRichard Henderson typedef HPPACPU ArchCPU;
2294f7c64b3SRichard Henderson 
23061766fe9SRichard Henderson #include "exec/cpu-all.h"
23161766fe9SRichard Henderson 
23261766fe9SRichard Henderson static inline int cpu_mmu_index(CPUHPPAState *env, bool ifetch)
23361766fe9SRichard Henderson {
2343d68ee7bSRichard Henderson #ifdef CONFIG_USER_ONLY
2353d68ee7bSRichard Henderson     return MMU_USER_IDX;
2363d68ee7bSRichard Henderson #else
2373d68ee7bSRichard Henderson     if (env->psw & (ifetch ? PSW_C : PSW_D)) {
2383d68ee7bSRichard Henderson         return env->iaoq_f & 3;
2393d68ee7bSRichard Henderson     }
2403d68ee7bSRichard Henderson     return MMU_PHYS_IDX;  /* mmu disabled */
2413d68ee7bSRichard Henderson #endif
24261766fe9SRichard Henderson }
24361766fe9SRichard Henderson 
24461766fe9SRichard Henderson void hppa_translate_init(void);
24561766fe9SRichard Henderson 
2460dacec87SIgor Mammedov #define CPU_RESOLVING_TYPE TYPE_HPPA_CPU
24761766fe9SRichard Henderson 
2480442428aSMarkus Armbruster void hppa_cpu_list(void);
24961766fe9SRichard Henderson 
250c301f34eSRichard Henderson static inline target_ulong hppa_form_gva_psw(target_ureg psw, uint64_t spc,
251c301f34eSRichard Henderson                                              target_ureg off)
252c301f34eSRichard Henderson {
253c301f34eSRichard Henderson #ifdef CONFIG_USER_ONLY
254c301f34eSRichard Henderson     return off;
255c301f34eSRichard Henderson #else
256c301f34eSRichard Henderson     off &= (psw & PSW_W ? 0x3fffffffffffffffull : 0xffffffffull);
257c301f34eSRichard Henderson     return spc | off;
258c301f34eSRichard Henderson #endif
259c301f34eSRichard Henderson }
260c301f34eSRichard Henderson 
261c301f34eSRichard Henderson static inline target_ulong hppa_form_gva(CPUHPPAState *env, uint64_t spc,
262c301f34eSRichard Henderson                                          target_ureg off)
263c301f34eSRichard Henderson {
264c301f34eSRichard Henderson     return hppa_form_gva_psw(env->psw, spc, off);
265c301f34eSRichard Henderson }
266c301f34eSRichard Henderson 
267494737b7SRichard Henderson /* Since PSW_{I,CB} will never need to be in tb->flags, reuse them.
268494737b7SRichard Henderson  * TB_FLAG_SR_SAME indicates that SR4 through SR7 all contain the
269494737b7SRichard Henderson  * same value.
270494737b7SRichard Henderson  */
271494737b7SRichard Henderson #define TB_FLAG_SR_SAME     PSW_I
272c301f34eSRichard Henderson #define TB_FLAG_PRIV_SHIFT  8
273c301f34eSRichard Henderson 
27461766fe9SRichard Henderson static inline void cpu_get_tb_cpu_state(CPUHPPAState *env, target_ulong *pc,
27561766fe9SRichard Henderson                                         target_ulong *cs_base,
27661766fe9SRichard Henderson                                         uint32_t *pflags)
27761766fe9SRichard Henderson {
278c301f34eSRichard Henderson     uint32_t flags = env->psw_n * PSW_N;
279c301f34eSRichard Henderson 
280c301f34eSRichard Henderson     /* TB lookup assumes that PC contains the complete virtual address.
281c301f34eSRichard Henderson        If we leave space+offset separate, we'll get ITLB misses to an
282c301f34eSRichard Henderson        incomplete virtual address.  This also means that we must separate
283c301f34eSRichard Henderson        out current cpu priviledge from the low bits of IAOQ_F.  */
284c301f34eSRichard Henderson #ifdef CONFIG_USER_ONLY
285ebd0e151SRichard Henderson     *pc = env->iaoq_f & -4;
286ebd0e151SRichard Henderson     *cs_base = env->iaoq_b & -4;
287c301f34eSRichard Henderson #else
2883d68ee7bSRichard Henderson     /* ??? E, T, H, L, B, P bits need to be here, when implemented.  */
289c301f34eSRichard Henderson     flags |= env->psw & (PSW_W | PSW_C | PSW_D);
290c301f34eSRichard Henderson     flags |= (env->iaoq_f & 3) << TB_FLAG_PRIV_SHIFT;
291c301f34eSRichard Henderson 
292c301f34eSRichard Henderson     *pc = (env->psw & PSW_C
293c301f34eSRichard Henderson            ? hppa_form_gva_psw(env->psw, env->iasq_f, env->iaoq_f & -4)
294c301f34eSRichard Henderson            : env->iaoq_f & -4);
295c301f34eSRichard Henderson     *cs_base = env->iasq_f;
296c301f34eSRichard Henderson 
297c301f34eSRichard Henderson     /* Insert a difference between IAOQ_B and IAOQ_F within the otherwise zero
298c301f34eSRichard Henderson        low 32-bits of CS_BASE.  This will succeed for all direct branches,
299c301f34eSRichard Henderson        which is the primary case we care about -- using goto_tb within a page.
300c301f34eSRichard Henderson        Failure is indicated by a zero difference.  */
301c301f34eSRichard Henderson     if (env->iasq_f == env->iasq_b) {
302c301f34eSRichard Henderson         target_sreg diff = env->iaoq_b - env->iaoq_f;
303c301f34eSRichard Henderson         if (TARGET_REGISTER_BITS == 32 || diff == (int32_t)diff) {
304c301f34eSRichard Henderson             *cs_base |= (uint32_t)diff;
305c301f34eSRichard Henderson         }
306c301f34eSRichard Henderson     }
307494737b7SRichard Henderson     if ((env->sr[4] == env->sr[5])
308494737b7SRichard Henderson         & (env->sr[4] == env->sr[6])
309494737b7SRichard Henderson         & (env->sr[4] == env->sr[7])) {
310494737b7SRichard Henderson         flags |= TB_FLAG_SR_SAME;
311494737b7SRichard Henderson     }
312c301f34eSRichard Henderson #endif
313c301f34eSRichard Henderson 
314c301f34eSRichard Henderson     *pflags = flags;
31561766fe9SRichard Henderson }
31661766fe9SRichard Henderson 
317eaa3783bSRichard Henderson target_ureg cpu_hppa_get_psw(CPUHPPAState *env);
318eaa3783bSRichard Henderson void cpu_hppa_put_psw(CPUHPPAState *env, target_ureg);
31961766fe9SRichard Henderson void cpu_hppa_loaded_fr0(CPUHPPAState *env);
32061766fe9SRichard Henderson 
321d5de20bdSSven Schnelle #ifdef CONFIG_USER_ONLY
322d5de20bdSSven Schnelle static inline void cpu_hppa_change_prot_id(CPUHPPAState *env) { }
323d5de20bdSSven Schnelle #else
324d5de20bdSSven Schnelle void cpu_hppa_change_prot_id(CPUHPPAState *env);
325d5de20bdSSven Schnelle #endif
326d5de20bdSSven Schnelle 
32761766fe9SRichard Henderson #define cpu_signal_handler cpu_hppa_signal_handler
32861766fe9SRichard Henderson 
32961766fe9SRichard Henderson int cpu_hppa_signal_handler(int host_signum, void *pinfo, void *puc);
330813dff13SHelge Deller hwaddr hppa_cpu_get_phys_page_debug(CPUState *cs, vaddr addr);
33161766fe9SRichard Henderson int hppa_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
33261766fe9SRichard Henderson int hppa_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
33361766fe9SRichard Henderson void hppa_cpu_do_interrupt(CPUState *cpu);
33461766fe9SRichard Henderson bool hppa_cpu_exec_interrupt(CPUState *cpu, int int_req);
33590c84c56SMarkus Armbruster void hppa_cpu_dump_state(CPUState *cs, FILE *f, int);
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);
3393c7bef03SRichard Henderson #ifndef CONFIG_USER_ONLY
340650cdb2aSRichard Henderson int hppa_get_physical_address(CPUHPPAState *env, vaddr addr, int mmu_idx,
341650cdb2aSRichard Henderson                               int type, hwaddr *pphys, int *pprot);
3424f5f2548SRichard Henderson extern const MemoryRegionOps hppa_io_eir_ops;
343c643603aSRichard Henderson extern const struct VMStateDescription vmstate_hppa_cpu;
34449c29d6cSRichard Henderson void hppa_cpu_alarm_timer(void *);
34543e05652SRichard Henderson int hppa_artype_for_page(CPUHPPAState *env, target_ulong vaddr);
346650cdb2aSRichard Henderson #endif
3472dfcca9fSRichard Henderson void QEMU_NORETURN hppa_dynamic_excp(CPUHPPAState *env, int excp, uintptr_t ra);
34861766fe9SRichard Henderson 
34961766fe9SRichard Henderson #endif /* HPPA_CPU_H */
350