xref: /qemu/target/hppa/cpu.h (revision fa824d99f9b5c6f5246b8ddc6d7b794d4413e5f4)
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 
332ad04500SHelge Deller #define MMU_KERNEL_IDX   11
342ad04500SHelge Deller #define MMU_PL1_IDX      12
352ad04500SHelge Deller #define MMU_PL2_IDX      13
362ad04500SHelge Deller #define MMU_USER_IDX     14
372ad04500SHelge Deller #define MMU_PHYS_IDX     15
38c400b6edSHelge Deller 
392ad04500SHelge Deller #define PRIV_TO_MMU_IDX(priv)    (MMU_KERNEL_IDX + (priv))
402ad04500SHelge Deller #define MMU_IDX_TO_PRIV(mmu_idx) ((mmu_idx) - MMU_KERNEL_IDX)
41c01e5dfbSHelge Deller 
4261766fe9SRichard Henderson #define TARGET_INSN_START_EXTRA_WORDS 1
4361766fe9SRichard Henderson 
4488b7ad10SHelge Deller /* No need to flush MMU_PHYS_IDX  */
4588b7ad10SHelge Deller #define HPPA_MMU_FLUSH_MASK                             \
4688b7ad10SHelge Deller         (1 << MMU_KERNEL_IDX | 1 << MMU_PL1_IDX |       \
4788b7ad10SHelge Deller          1 << MMU_PL2_IDX    | 1 << MMU_USER_IDX)
4888b7ad10SHelge Deller 
498b81968cSMichael Tokarev /* Hardware exceptions, interrupts, faults, and traps.  */
502986721dSRichard Henderson #define EXCP_HPMC                1  /* high priority machine check */
512986721dSRichard Henderson #define EXCP_POWER_FAIL          2
522986721dSRichard Henderson #define EXCP_RC                  3  /* recovery counter */
532986721dSRichard Henderson #define EXCP_EXT_INTERRUPT       4  /* external interrupt */
542986721dSRichard Henderson #define EXCP_LPMC                5  /* low priority machine check */
552986721dSRichard Henderson #define EXCP_ITLB_MISS           6  /* itlb miss / instruction page fault */
562986721dSRichard Henderson #define EXCP_IMP                 7  /* instruction memory protection trap */
572986721dSRichard Henderson #define EXCP_ILL                 8  /* illegal instruction trap */
582986721dSRichard Henderson #define EXCP_BREAK               9  /* break instruction */
592986721dSRichard Henderson #define EXCP_PRIV_OPR            10 /* privileged operation trap */
602986721dSRichard Henderson #define EXCP_PRIV_REG            11 /* privileged register trap */
612986721dSRichard Henderson #define EXCP_OVERFLOW            12 /* signed overflow trap */
622986721dSRichard Henderson #define EXCP_COND                13 /* trap-on-condition */
632986721dSRichard Henderson #define EXCP_ASSIST              14 /* assist exception trap */
642986721dSRichard Henderson #define EXCP_DTLB_MISS           15 /* dtlb miss / data page fault */
652986721dSRichard Henderson #define EXCP_NA_ITLB_MISS        16 /* non-access itlb miss */
662986721dSRichard Henderson #define EXCP_NA_DTLB_MISS        17 /* non-access dtlb miss */
672986721dSRichard Henderson #define EXCP_DMP                 18 /* data memory protection trap */
682986721dSRichard Henderson #define EXCP_DMB                 19 /* data memory break trap */
692986721dSRichard Henderson #define EXCP_TLB_DIRTY           20 /* tlb dirty bit trap */
702986721dSRichard Henderson #define EXCP_PAGE_REF            21 /* page reference trap */
712986721dSRichard Henderson #define EXCP_ASSIST_EMU          22 /* assist emulation trap */
722986721dSRichard Henderson #define EXCP_HPT                 23 /* high-privilege transfer trap */
732986721dSRichard Henderson #define EXCP_LPT                 24 /* low-privilege transfer trap */
742986721dSRichard Henderson #define EXCP_TB                  25 /* taken branch trap */
752986721dSRichard Henderson #define EXCP_DMAR                26 /* data memory access rights trap */
762986721dSRichard Henderson #define EXCP_DMPI                27 /* data memory protection id trap */
772986721dSRichard Henderson #define EXCP_UNALIGN             28 /* unaligned data reference trap */
782986721dSRichard Henderson #define EXCP_PER_INTERRUPT       29 /* performance monitor interrupt */
792986721dSRichard Henderson 
802986721dSRichard Henderson /* Exceptions for linux-user emulation.  */
812986721dSRichard Henderson #define EXCP_SYSCALL             30
822986721dSRichard Henderson #define EXCP_SYSCALL_LWS         31
8361766fe9SRichard Henderson 
844a4554c6SHelge Deller /* Emulated hardware TOC button */
854a4554c6SHelge Deller #define EXCP_TOC                 32 /* TOC = Transfer of control (NMI) */
864a4554c6SHelge Deller 
874a4554c6SHelge Deller #define CPU_INTERRUPT_NMI       CPU_INTERRUPT_TGT_EXT_3         /* TOC */
884a4554c6SHelge Deller 
89fa57e327SRichard Henderson /* Taken from Linux kernel: arch/parisc/include/asm/psw.h */
90fa57e327SRichard Henderson #define PSW_I            0x00000001
91fa57e327SRichard Henderson #define PSW_D            0x00000002
92fa57e327SRichard Henderson #define PSW_P            0x00000004
93fa57e327SRichard Henderson #define PSW_Q            0x00000008
94fa57e327SRichard Henderson #define PSW_R            0x00000010
95fa57e327SRichard Henderson #define PSW_F            0x00000020
96fa57e327SRichard Henderson #define PSW_G            0x00000040 /* PA1.x only */
97fa57e327SRichard Henderson #define PSW_O            0x00000080 /* PA2.0 only */
98fa57e327SRichard Henderson #define PSW_CB           0x0000ff00
99fa57e327SRichard Henderson #define PSW_M            0x00010000
100fa57e327SRichard Henderson #define PSW_V            0x00020000
101fa57e327SRichard Henderson #define PSW_C            0x00040000
102fa57e327SRichard Henderson #define PSW_B            0x00080000
103fa57e327SRichard Henderson #define PSW_X            0x00100000
104fa57e327SRichard Henderson #define PSW_N            0x00200000
105fa57e327SRichard Henderson #define PSW_L            0x00400000
106fa57e327SRichard Henderson #define PSW_H            0x00800000
107fa57e327SRichard Henderson #define PSW_T            0x01000000
108fa57e327SRichard Henderson #define PSW_S            0x02000000
109fa57e327SRichard Henderson #define PSW_E            0x04000000
110fa57e327SRichard Henderson #ifdef TARGET_HPPA64
111fa57e327SRichard Henderson #define PSW_W            0x08000000 /* PA2.0 only */
112fa57e327SRichard Henderson #else
113fa57e327SRichard Henderson #define PSW_W            0
114fa57e327SRichard Henderson #endif
115fa57e327SRichard Henderson #define PSW_Z            0x40000000 /* PA1.x only */
116fa57e327SRichard Henderson #define PSW_Y            0x80000000 /* PA1.x only */
117fa57e327SRichard Henderson 
118fa57e327SRichard Henderson #define PSW_SM (PSW_W | PSW_E | PSW_O | PSW_G | PSW_F \
119fa57e327SRichard Henderson                | PSW_R | PSW_Q | PSW_P | PSW_D | PSW_I)
120fa57e327SRichard Henderson 
121fa57e327SRichard Henderson /* ssm/rsm instructions number PSW_W and PSW_E differently */
122fa57e327SRichard Henderson #define PSW_SM_I         PSW_I      /* Enable External Interrupts */
123fa57e327SRichard Henderson #define PSW_SM_D         PSW_D
124fa57e327SRichard Henderson #define PSW_SM_P         PSW_P
125fa57e327SRichard Henderson #define PSW_SM_Q         PSW_Q      /* Enable Interrupt State Collection */
126fa57e327SRichard Henderson #define PSW_SM_R         PSW_R      /* Enable Recover Counter Trap */
127fa57e327SRichard Henderson #ifdef TARGET_HPPA64
128fa57e327SRichard Henderson #define PSW_SM_E         0x100
129fa57e327SRichard Henderson #define PSW_SM_W         0x200      /* PA2.0 only : Enable Wide Mode */
130fa57e327SRichard Henderson #else
131fa57e327SRichard Henderson #define PSW_SM_E         0
132fa57e327SRichard Henderson #define PSW_SM_W         0
133fa57e327SRichard Henderson #endif
134fa57e327SRichard Henderson 
13535136a77SRichard Henderson #define CR_RC            0
136d5de20bdSSven Schnelle #define CR_PID1          8
137d5de20bdSSven Schnelle #define CR_PID2          9
138d5de20bdSSven Schnelle #define CR_PID3          12
139d5de20bdSSven Schnelle #define CR_PID4          13
14035136a77SRichard Henderson #define CR_SCRCCR        10
14135136a77SRichard Henderson #define CR_SAR           11
14235136a77SRichard Henderson #define CR_IVA           14
14335136a77SRichard Henderson #define CR_EIEM          15
14435136a77SRichard Henderson #define CR_IT            16
14535136a77SRichard Henderson #define CR_IIASQ         17
14635136a77SRichard Henderson #define CR_IIAOQ         18
14735136a77SRichard Henderson #define CR_IIR           19
14835136a77SRichard Henderson #define CR_ISR           20
14935136a77SRichard Henderson #define CR_IOR           21
15035136a77SRichard Henderson #define CR_IPSW          22
15135136a77SRichard Henderson #define CR_EIRR          23
15235136a77SRichard Henderson 
153eaa3783bSRichard Henderson #if TARGET_REGISTER_BITS == 32
154eaa3783bSRichard Henderson typedef uint32_t target_ureg;
155eaa3783bSRichard Henderson typedef int32_t  target_sreg;
156eaa3783bSRichard Henderson #define TREG_FMT_lx   "%08"PRIx32
157eaa3783bSRichard Henderson #define TREG_FMT_ld   "%"PRId32
158eaa3783bSRichard Henderson #else
159eaa3783bSRichard Henderson typedef uint64_t target_ureg;
160eaa3783bSRichard Henderson typedef int64_t  target_sreg;
161eaa3783bSRichard Henderson #define TREG_FMT_lx   "%016"PRIx64
162eaa3783bSRichard Henderson #define TREG_FMT_ld   "%"PRId64
163eaa3783bSRichard Henderson #endif
164eaa3783bSRichard Henderson 
165650cdb2aSRichard Henderson typedef struct {
166650cdb2aSRichard Henderson     uint64_t va_b;
167650cdb2aSRichard Henderson     uint64_t va_e;
168650cdb2aSRichard Henderson     target_ureg pa;
169650cdb2aSRichard Henderson     unsigned u : 1;
170650cdb2aSRichard Henderson     unsigned t : 1;
171650cdb2aSRichard Henderson     unsigned d : 1;
172650cdb2aSRichard Henderson     unsigned b : 1;
173650cdb2aSRichard Henderson     unsigned page_size : 4;
174650cdb2aSRichard Henderson     unsigned ar_type : 3;
175650cdb2aSRichard Henderson     unsigned ar_pl1 : 2;
176650cdb2aSRichard Henderson     unsigned ar_pl2 : 2;
177650cdb2aSRichard Henderson     unsigned entry_valid : 1;
178650cdb2aSRichard Henderson     unsigned access_id : 16;
179650cdb2aSRichard Henderson } hppa_tlb_entry;
180650cdb2aSRichard Henderson 
1811ea4a06aSPhilippe Mathieu-Daudé typedef struct CPUArchState {
182f8c0fd98SHelge Deller     target_ureg iaoq_f;      /* front */
183f8c0fd98SHelge Deller     target_ureg iaoq_b;      /* back, aka next instruction */
184f8c0fd98SHelge Deller 
185eaa3783bSRichard Henderson     target_ureg gr[32];
18661766fe9SRichard Henderson     uint64_t fr[32];
18733423472SRichard Henderson     uint64_t sr[8];          /* stored shifted into place for gva */
18861766fe9SRichard Henderson 
189eaa3783bSRichard Henderson     target_ureg psw;         /* All psw bits except the following:  */
190eaa3783bSRichard Henderson     target_ureg psw_n;       /* boolean */
191eaa3783bSRichard Henderson     target_sreg psw_v;       /* in most significant bit */
19261766fe9SRichard Henderson 
19361766fe9SRichard Henderson     /* Splitting the carry-borrow field into the MSB and "the rest", allows
19461766fe9SRichard Henderson      * for "the rest" to be deleted when it is unused, but the MSB is in use.
19561766fe9SRichard Henderson      * In addition, it's easier to compute carry-in for bit B+1 than it is to
19661766fe9SRichard Henderson      * compute carry-out for bit B (3 vs 4 insns for addition, assuming the
19761766fe9SRichard Henderson      * host has the appropriate add-with-carry insn to compute the msb).
19861766fe9SRichard Henderson      * Therefore the carry bits are stored as: cb_msb : cb & 0x11111110.
19961766fe9SRichard Henderson      */
200eaa3783bSRichard Henderson     target_ureg psw_cb;      /* in least significant bit of next nibble */
201eaa3783bSRichard Henderson     target_ureg psw_cb_msb;  /* boolean */
20261766fe9SRichard Henderson 
203c301f34eSRichard Henderson     uint64_t iasq_f;
204c301f34eSRichard Henderson     uint64_t iasq_b;
20561766fe9SRichard Henderson 
20661766fe9SRichard Henderson     uint32_t fr0_shadow;     /* flags, c, ca/cq, rm, d, enables */
20761766fe9SRichard Henderson     float_status fp_status;
20861766fe9SRichard Henderson 
20935136a77SRichard Henderson     target_ureg cr[32];      /* control registers */
21035136a77SRichard Henderson     target_ureg cr_back[2];  /* back of cr17/cr18 */
211f49b3537SRichard Henderson     target_ureg shadow[7];   /* shadow registers */
21235136a77SRichard Henderson 
213650cdb2aSRichard Henderson     /* ??? The number of entries isn't specified by the architecture.  */
214711212acSHelge Deller #ifdef TARGET_HPPA64
215711212acSHelge Deller #define HPPA_BTLB_FIXED         0       /* BTLBs are not supported in 64-bit machines */
216711212acSHelge Deller #else
217711212acSHelge Deller #define HPPA_BTLB_FIXED         16
218711212acSHelge Deller #endif
219711212acSHelge Deller #define HPPA_BTLB_VARIABLE      0
220df5c6a50SHelge Deller #define HPPA_TLB_ENTRIES        256
221711212acSHelge Deller #define HPPA_BTLB_ENTRIES       (HPPA_BTLB_FIXED + HPPA_BTLB_VARIABLE)
222df5c6a50SHelge Deller 
223650cdb2aSRichard Henderson     /* ??? Implement a unified itlb/dtlb for the moment.  */
224650cdb2aSRichard Henderson     /* ??? We should use a more intelligent data structure.  */
225df5c6a50SHelge Deller     hppa_tlb_entry tlb[HPPA_TLB_ENTRIES];
226650cdb2aSRichard Henderson     uint32_t tlb_last;
2271ea4a06aSPhilippe Mathieu-Daudé } CPUHPPAState;
22861766fe9SRichard Henderson 
22961766fe9SRichard Henderson /**
23061766fe9SRichard Henderson  * HPPACPU:
23161766fe9SRichard Henderson  * @env: #CPUHPPAState
23261766fe9SRichard Henderson  *
23361766fe9SRichard Henderson  * An HPPA CPU.
23461766fe9SRichard Henderson  */
235b36e239eSPhilippe Mathieu-Daudé struct ArchCPU {
23661766fe9SRichard Henderson     /*< private >*/
23761766fe9SRichard Henderson     CPUState parent_obj;
23861766fe9SRichard Henderson     /*< public >*/
23961766fe9SRichard Henderson 
2405b146dc7SRichard Henderson     CPUNegativeOffsetState neg;
24161766fe9SRichard Henderson     CPUHPPAState env;
24249c29d6cSRichard Henderson     QEMUTimer *alarm_timer;
24361766fe9SRichard Henderson };
24461766fe9SRichard Henderson 
24561766fe9SRichard Henderson #include "exec/cpu-all.h"
24661766fe9SRichard Henderson 
24761766fe9SRichard Henderson static inline int cpu_mmu_index(CPUHPPAState *env, bool ifetch)
24861766fe9SRichard Henderson {
2493d68ee7bSRichard Henderson #ifdef CONFIG_USER_ONLY
2503d68ee7bSRichard Henderson     return MMU_USER_IDX;
2513d68ee7bSRichard Henderson #else
2523d68ee7bSRichard Henderson     if (env->psw & (ifetch ? PSW_C : PSW_D)) {
253c01e5dfbSHelge Deller         return PRIV_TO_MMU_IDX(env->iaoq_f & 3);
2543d68ee7bSRichard Henderson     }
2553d68ee7bSRichard Henderson     return MMU_PHYS_IDX;  /* mmu disabled */
2563d68ee7bSRichard Henderson #endif
25761766fe9SRichard Henderson }
25861766fe9SRichard Henderson 
25961766fe9SRichard Henderson void hppa_translate_init(void);
26061766fe9SRichard Henderson 
2610dacec87SIgor Mammedov #define CPU_RESOLVING_TYPE TYPE_HPPA_CPU
26261766fe9SRichard Henderson 
263c301f34eSRichard Henderson static inline target_ulong hppa_form_gva_psw(target_ureg psw, uint64_t spc,
264c301f34eSRichard Henderson                                              target_ureg off)
265c301f34eSRichard Henderson {
266c301f34eSRichard Henderson #ifdef CONFIG_USER_ONLY
267c301f34eSRichard Henderson     return off;
268c301f34eSRichard Henderson #else
269c301f34eSRichard Henderson     off &= (psw & PSW_W ? 0x3fffffffffffffffull : 0xffffffffull);
270c301f34eSRichard Henderson     return spc | off;
271c301f34eSRichard Henderson #endif
272c301f34eSRichard Henderson }
273c301f34eSRichard Henderson 
274c301f34eSRichard Henderson static inline target_ulong hppa_form_gva(CPUHPPAState *env, uint64_t spc,
275c301f34eSRichard Henderson                                          target_ureg off)
276c301f34eSRichard Henderson {
277c301f34eSRichard Henderson     return hppa_form_gva_psw(env->psw, spc, off);
278c301f34eSRichard Henderson }
279c301f34eSRichard Henderson 
280217d1a5eSRichard Henderson /*
281217d1a5eSRichard Henderson  * Since PSW_{I,CB} will never need to be in tb->flags, reuse them.
282494737b7SRichard Henderson  * TB_FLAG_SR_SAME indicates that SR4 through SR7 all contain the
283494737b7SRichard Henderson  * same value.
284494737b7SRichard Henderson  */
285494737b7SRichard Henderson #define TB_FLAG_SR_SAME     PSW_I
286c301f34eSRichard Henderson #define TB_FLAG_PRIV_SHIFT  8
287217d1a5eSRichard Henderson #define TB_FLAG_UNALIGN     0x400
288c301f34eSRichard Henderson 
289bb5de525SAnton Johansson static inline void cpu_get_tb_cpu_state(CPUHPPAState *env, vaddr *pc,
290bb5de525SAnton Johansson                                         uint64_t *cs_base, uint32_t *pflags)
29161766fe9SRichard Henderson {
292c301f34eSRichard Henderson     uint32_t flags = env->psw_n * PSW_N;
293c301f34eSRichard Henderson 
294c301f34eSRichard Henderson     /* TB lookup assumes that PC contains the complete virtual address.
295c301f34eSRichard Henderson        If we leave space+offset separate, we'll get ITLB misses to an
296c301f34eSRichard Henderson        incomplete virtual address.  This also means that we must separate
2978b81968cSMichael Tokarev        out current cpu privilege from the low bits of IAOQ_F.  */
298c301f34eSRichard Henderson #ifdef CONFIG_USER_ONLY
299ebd0e151SRichard Henderson     *pc = env->iaoq_f & -4;
300ebd0e151SRichard Henderson     *cs_base = env->iaoq_b & -4;
301217d1a5eSRichard Henderson     flags |= TB_FLAG_UNALIGN * !env_cpu(env)->prctl_unalign_sigbus;
302c301f34eSRichard Henderson #else
3033d68ee7bSRichard Henderson     /* ??? E, T, H, L, B, P bits need to be here, when implemented.  */
304c301f34eSRichard Henderson     flags |= env->psw & (PSW_W | PSW_C | PSW_D);
305c301f34eSRichard Henderson     flags |= (env->iaoq_f & 3) << TB_FLAG_PRIV_SHIFT;
306c301f34eSRichard Henderson 
307c301f34eSRichard Henderson     *pc = (env->psw & PSW_C
308c301f34eSRichard Henderson            ? hppa_form_gva_psw(env->psw, env->iasq_f, env->iaoq_f & -4)
309c301f34eSRichard Henderson            : env->iaoq_f & -4);
310c301f34eSRichard Henderson     *cs_base = env->iasq_f;
311c301f34eSRichard Henderson 
312c301f34eSRichard Henderson     /* Insert a difference between IAOQ_B and IAOQ_F within the otherwise zero
313c301f34eSRichard Henderson        low 32-bits of CS_BASE.  This will succeed for all direct branches,
314c301f34eSRichard Henderson        which is the primary case we care about -- using goto_tb within a page.
315c301f34eSRichard Henderson        Failure is indicated by a zero difference.  */
316c301f34eSRichard Henderson     if (env->iasq_f == env->iasq_b) {
317c301f34eSRichard Henderson         target_sreg diff = env->iaoq_b - env->iaoq_f;
318c301f34eSRichard Henderson         if (TARGET_REGISTER_BITS == 32 || diff == (int32_t)diff) {
319c301f34eSRichard Henderson             *cs_base |= (uint32_t)diff;
320c301f34eSRichard Henderson         }
321c301f34eSRichard Henderson     }
322494737b7SRichard Henderson     if ((env->sr[4] == env->sr[5])
323494737b7SRichard Henderson         & (env->sr[4] == env->sr[6])
324494737b7SRichard Henderson         & (env->sr[4] == env->sr[7])) {
325494737b7SRichard Henderson         flags |= TB_FLAG_SR_SAME;
326494737b7SRichard Henderson     }
327c301f34eSRichard Henderson #endif
328c301f34eSRichard Henderson 
329c301f34eSRichard Henderson     *pflags = flags;
33061766fe9SRichard Henderson }
33161766fe9SRichard Henderson 
332eaa3783bSRichard Henderson target_ureg cpu_hppa_get_psw(CPUHPPAState *env);
333eaa3783bSRichard Henderson void cpu_hppa_put_psw(CPUHPPAState *env, target_ureg);
33461766fe9SRichard Henderson void cpu_hppa_loaded_fr0(CPUHPPAState *env);
33561766fe9SRichard Henderson 
336d5de20bdSSven Schnelle #ifdef CONFIG_USER_ONLY
337d5de20bdSSven Schnelle static inline void cpu_hppa_change_prot_id(CPUHPPAState *env) { }
338d5de20bdSSven Schnelle #else
339d5de20bdSSven Schnelle void cpu_hppa_change_prot_id(CPUHPPAState *env);
340d5de20bdSSven Schnelle #endif
341d5de20bdSSven Schnelle 
342a010bdbeSAlex Bennée int hppa_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
34361766fe9SRichard Henderson int hppa_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
34490c84c56SMarkus Armbruster void hppa_cpu_dump_state(CPUState *cs, FILE *f, int);
345860e0b96SRichard Henderson #ifndef CONFIG_USER_ONLY
3466d2d454aSPhilippe Mathieu-Daudé hwaddr hppa_cpu_get_phys_page_debug(CPUState *cs, vaddr addr);
3473c7bef03SRichard Henderson bool hppa_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
3483c7bef03SRichard Henderson                        MMUAccessType access_type, int mmu_idx,
3493c7bef03SRichard Henderson                        bool probe, uintptr_t retaddr);
35068fa1780SPhilippe Mathieu-Daudé void hppa_cpu_do_interrupt(CPUState *cpu);
35168fa1780SPhilippe Mathieu-Daudé bool hppa_cpu_exec_interrupt(CPUState *cpu, int int_req);
352650cdb2aSRichard Henderson int hppa_get_physical_address(CPUHPPAState *env, vaddr addr, int mmu_idx,
353*fa824d99SHelge Deller                               int type, hwaddr *pphys, int *pprot,
354*fa824d99SHelge Deller                               hppa_tlb_entry **tlb_entry);
3554f5f2548SRichard Henderson extern const MemoryRegionOps hppa_io_eir_ops;
3568a9358ccSMarkus Armbruster extern const VMStateDescription vmstate_hppa_cpu;
35749c29d6cSRichard Henderson void hppa_cpu_alarm_timer(void *);
35843e05652SRichard Henderson int hppa_artype_for_page(CPUHPPAState *env, target_ulong vaddr);
359650cdb2aSRichard Henderson #endif
3608905770bSMarc-André Lureau G_NORETURN void hppa_dynamic_excp(CPUHPPAState *env, int excp, uintptr_t ra);
36161766fe9SRichard Henderson 
36261766fe9SRichard Henderson #endif /* HPPA_CPU_H */
363