Statistics
| Branch: | Revision:

root / target-ppc / cpu.h @ abf28337

History | View | Annotate | Download (51.2 kB)

1 79aceca5 bellard
/*
2 3fc6c082 bellard
 *  PowerPC emulation cpu definitions for qemu.
3 5fafdf24 ths
 *
4 76a66253 j_mayer
 *  Copyright (c) 2003-2007 Jocelyn Mayer
5 79aceca5 bellard
 *
6 79aceca5 bellard
 * This library is free software; you can redistribute it and/or
7 79aceca5 bellard
 * modify it under the terms of the GNU Lesser General Public
8 79aceca5 bellard
 * License as published by the Free Software Foundation; either
9 79aceca5 bellard
 * version 2 of the License, or (at your option) any later version.
10 79aceca5 bellard
 *
11 79aceca5 bellard
 * This library is distributed in the hope that it will be useful,
12 79aceca5 bellard
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 79aceca5 bellard
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 79aceca5 bellard
 * Lesser General Public License for more details.
15 79aceca5 bellard
 *
16 79aceca5 bellard
 * You should have received a copy of the GNU Lesser General Public
17 79aceca5 bellard
 * License along with this library; if not, write to the Free Software
18 79aceca5 bellard
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 79aceca5 bellard
 */
20 79aceca5 bellard
#if !defined (__CPU_PPC_H__)
21 79aceca5 bellard
#define __CPU_PPC_H__
22 79aceca5 bellard
23 3fc6c082 bellard
#include "config.h"
24 de270b3c j_mayer
#include <inttypes.h>
25 3fc6c082 bellard
26 76a66253 j_mayer
#if defined (TARGET_PPC64)
27 76a66253 j_mayer
typedef uint64_t ppc_gpr_t;
28 0487d6a8 j_mayer
#define TARGET_GPR_BITS  64
29 d9d7210c j_mayer
#define TARGET_LONG_BITS 64
30 76a66253 j_mayer
#define REGX "%016" PRIx64
31 35cdaad6 j_mayer
#define TARGET_PAGE_BITS 12
32 35cdaad6 j_mayer
#elif defined(TARGET_PPCEMB)
33 8b67546f j_mayer
/* BookE have 36 bits physical address space */
34 e96efcfc j_mayer
#define TARGET_PHYS_ADDR_BITS 64
35 76a66253 j_mayer
/* GPR are 64 bits: used by vector extension */
36 76a66253 j_mayer
typedef uint64_t ppc_gpr_t;
37 0487d6a8 j_mayer
#define TARGET_GPR_BITS  64
38 d9d7210c j_mayer
#define TARGET_LONG_BITS 32
39 1b9eb036 j_mayer
#define REGX "%016" PRIx64
40 d9d7210c j_mayer
#if defined(CONFIG_USER_ONLY)
41 d9d7210c j_mayer
/* It looks like a lot of Linux programs assume page size
42 d9d7210c j_mayer
 * is 4kB long. This is evil, but we have to deal with it...
43 d9d7210c j_mayer
 */
44 d9d7210c j_mayer
#define TARGET_PAGE_BITS 12
45 d9d7210c j_mayer
#else
46 35cdaad6 j_mayer
/* Pages can be 1 kB small */
47 35cdaad6 j_mayer
#define TARGET_PAGE_BITS 10
48 d9d7210c j_mayer
#endif
49 d9d7210c j_mayer
#else
50 d9d7210c j_mayer
#if (HOST_LONG_BITS >= 64)
51 d9d7210c j_mayer
/* When using 64 bits temporary registers,
52 d9d7210c j_mayer
 * we can use 64 bits GPR with no extra cost
53 d9d7210c j_mayer
 * It's even an optimization as it will prevent
54 d9d7210c j_mayer
 * the compiler to do unuseful masking in the micro-ops.
55 d9d7210c j_mayer
 */
56 d9d7210c j_mayer
typedef uint64_t ppc_gpr_t;
57 d9d7210c j_mayer
#define TARGET_GPR_BITS  64
58 71c8b8fd j_mayer
#define REGX "%08" PRIx64
59 76a66253 j_mayer
#else
60 76a66253 j_mayer
typedef uint32_t ppc_gpr_t;
61 0487d6a8 j_mayer
#define TARGET_GPR_BITS  32
62 71c8b8fd j_mayer
#define REGX "%08" PRIx32
63 d9d7210c j_mayer
#endif
64 d9d7210c j_mayer
#define TARGET_LONG_BITS 32
65 35cdaad6 j_mayer
#define TARGET_PAGE_BITS 12
66 76a66253 j_mayer
#endif
67 3cf1e035 bellard
68 79aceca5 bellard
#include "cpu-defs.h"
69 79aceca5 bellard
70 e96efcfc j_mayer
#define ADDRX TARGET_FMT_lx
71 e96efcfc j_mayer
#define PADDRX TARGET_FMT_plx
72 e96efcfc j_mayer
73 79aceca5 bellard
#include <setjmp.h>
74 79aceca5 bellard
75 4ecc3190 bellard
#include "softfloat.h"
76 4ecc3190 bellard
77 1fddef4b bellard
#define TARGET_HAS_ICE 1
78 1fddef4b bellard
79 76a66253 j_mayer
#if defined (TARGET_PPC64)
80 76a66253 j_mayer
#define ELF_MACHINE     EM_PPC64
81 76a66253 j_mayer
#else
82 76a66253 j_mayer
#define ELF_MACHINE     EM_PPC
83 76a66253 j_mayer
#endif
84 9042c0e2 ths
85 3fc6c082 bellard
/*****************************************************************************/
86 a750fc0b j_mayer
/* MMU model                                                                 */
87 3fc6c082 bellard
enum {
88 a750fc0b j_mayer
    POWERPC_MMU_UNKNOWN    = 0,
89 a750fc0b j_mayer
    /* Standard 32 bits PowerPC MMU                            */
90 a750fc0b j_mayer
    POWERPC_MMU_32B,
91 a750fc0b j_mayer
    /* PowerPC 6xx MMU with software TLB                       */
92 a750fc0b j_mayer
    POWERPC_MMU_SOFT_6xx,
93 a750fc0b j_mayer
    /* PowerPC 74xx MMU with software TLB                      */
94 a750fc0b j_mayer
    POWERPC_MMU_SOFT_74xx,
95 a750fc0b j_mayer
    /* PowerPC 4xx MMU with software TLB                       */
96 a750fc0b j_mayer
    POWERPC_MMU_SOFT_4xx,
97 a750fc0b j_mayer
    /* PowerPC 4xx MMU with software TLB and zones protections */
98 a750fc0b j_mayer
    POWERPC_MMU_SOFT_4xx_Z,
99 a750fc0b j_mayer
    /* PowerPC 4xx MMU in real mode only                       */
100 a750fc0b j_mayer
    POWERPC_MMU_REAL_4xx,
101 a750fc0b j_mayer
    /* BookE MMU model                                         */
102 a750fc0b j_mayer
    POWERPC_MMU_BOOKE,
103 a750fc0b j_mayer
    /* BookE FSL MMU model                                     */
104 a750fc0b j_mayer
    POWERPC_MMU_BOOKE_FSL,
105 faadf50e j_mayer
    /* PowerPC 601 MMU model (specific BATs format)            */
106 faadf50e j_mayer
    POWERPC_MMU_601,
107 00af685f j_mayer
#if defined(TARGET_PPC64)
108 12de9a39 j_mayer
    /* 64 bits PowerPC MMU                                     */
109 00af685f j_mayer
    POWERPC_MMU_64B,
110 00af685f j_mayer
#endif /* defined(TARGET_PPC64) */
111 3fc6c082 bellard
};
112 3fc6c082 bellard
113 3fc6c082 bellard
/*****************************************************************************/
114 a750fc0b j_mayer
/* Exception model                                                           */
115 3fc6c082 bellard
enum {
116 a750fc0b j_mayer
    POWERPC_EXCP_UNKNOWN   = 0,
117 3fc6c082 bellard
    /* Standard PowerPC exception model */
118 a750fc0b j_mayer
    POWERPC_EXCP_STD,
119 2662a059 j_mayer
    /* PowerPC 40x exception model      */
120 a750fc0b j_mayer
    POWERPC_EXCP_40x,
121 2662a059 j_mayer
    /* PowerPC 601 exception model      */
122 a750fc0b j_mayer
    POWERPC_EXCP_601,
123 2662a059 j_mayer
    /* PowerPC 602 exception model      */
124 a750fc0b j_mayer
    POWERPC_EXCP_602,
125 2662a059 j_mayer
    /* PowerPC 603 exception model      */
126 a750fc0b j_mayer
    POWERPC_EXCP_603,
127 a750fc0b j_mayer
    /* PowerPC 603e exception model     */
128 a750fc0b j_mayer
    POWERPC_EXCP_603E,
129 a750fc0b j_mayer
    /* PowerPC G2 exception model       */
130 a750fc0b j_mayer
    POWERPC_EXCP_G2,
131 2662a059 j_mayer
    /* PowerPC 604 exception model      */
132 a750fc0b j_mayer
    POWERPC_EXCP_604,
133 2662a059 j_mayer
    /* PowerPC 7x0 exception model      */
134 a750fc0b j_mayer
    POWERPC_EXCP_7x0,
135 2662a059 j_mayer
    /* PowerPC 7x5 exception model      */
136 a750fc0b j_mayer
    POWERPC_EXCP_7x5,
137 2662a059 j_mayer
    /* PowerPC 74xx exception model     */
138 a750fc0b j_mayer
    POWERPC_EXCP_74xx,
139 2662a059 j_mayer
    /* BookE exception model            */
140 a750fc0b j_mayer
    POWERPC_EXCP_BOOKE,
141 00af685f j_mayer
#if defined(TARGET_PPC64)
142 00af685f j_mayer
    /* PowerPC 970 exception model      */
143 00af685f j_mayer
    POWERPC_EXCP_970,
144 00af685f j_mayer
#endif /* defined(TARGET_PPC64) */
145 a750fc0b j_mayer
};
146 a750fc0b j_mayer
147 a750fc0b j_mayer
/*****************************************************************************/
148 e1833e1f j_mayer
/* Exception vectors definitions                                             */
149 e1833e1f j_mayer
enum {
150 e1833e1f j_mayer
    POWERPC_EXCP_NONE    = -1,
151 e1833e1f j_mayer
    /* The 64 first entries are used by the PowerPC embedded specification   */
152 e1833e1f j_mayer
    POWERPC_EXCP_CRITICAL = 0,  /* Critical input                            */
153 e1833e1f j_mayer
    POWERPC_EXCP_MCHECK   = 1,  /* Machine check exception                   */
154 e1833e1f j_mayer
    POWERPC_EXCP_DSI      = 2,  /* Data storage exception                    */
155 e1833e1f j_mayer
    POWERPC_EXCP_ISI      = 3,  /* Instruction storage exception             */
156 e1833e1f j_mayer
    POWERPC_EXCP_EXTERNAL = 4,  /* External input                            */
157 e1833e1f j_mayer
    POWERPC_EXCP_ALIGN    = 5,  /* Alignment exception                       */
158 e1833e1f j_mayer
    POWERPC_EXCP_PROGRAM  = 6,  /* Program exception                         */
159 e1833e1f j_mayer
    POWERPC_EXCP_FPU      = 7,  /* Floating-point unavailable exception      */
160 e1833e1f j_mayer
    POWERPC_EXCP_SYSCALL  = 8,  /* System call exception                     */
161 e1833e1f j_mayer
    POWERPC_EXCP_APU      = 9,  /* Auxiliary processor unavailable           */
162 e1833e1f j_mayer
    POWERPC_EXCP_DECR     = 10, /* Decrementer exception                     */
163 e1833e1f j_mayer
    POWERPC_EXCP_FIT      = 11, /* Fixed-interval timer interrupt            */
164 e1833e1f j_mayer
    POWERPC_EXCP_WDT      = 12, /* Watchdog timer interrupt                  */
165 e1833e1f j_mayer
    POWERPC_EXCP_DTLB     = 13, /* Data TLB error                            */
166 e1833e1f j_mayer
    POWERPC_EXCP_ITLB     = 14, /* Instruction TLB error                     */
167 e1833e1f j_mayer
    POWERPC_EXCP_DEBUG    = 15, /* Debug interrupt                           */
168 e1833e1f j_mayer
    /* Vectors 16 to 31 are reserved                                         */
169 e1833e1f j_mayer
#if defined(TARGET_PPCEMB)
170 e1833e1f j_mayer
    POWERPC_EXCP_SPEU     = 32, /* SPE/embedded floating-point unavailable   */
171 e1833e1f j_mayer
    POWERPC_EXCP_EFPDI    = 33, /* Embedded floating-point data interrupt    */
172 e1833e1f j_mayer
    POWERPC_EXCP_EFPRI    = 34, /* Embedded floating-point round interrupt   */
173 e1833e1f j_mayer
    POWERPC_EXCP_EPERFM   = 35, /* Embedded performance monitor interrupt    */
174 e1833e1f j_mayer
    POWERPC_EXCP_DOORI    = 36, /* Embedded doorbell interrupt               */
175 e1833e1f j_mayer
    POWERPC_EXCP_DOORCI   = 37, /* Embedded doorbell critical interrupt      */
176 e1833e1f j_mayer
#endif /* defined(TARGET_PPCEMB) */
177 e1833e1f j_mayer
    /* Vectors 38 to 63 are reserved                                         */
178 e1833e1f j_mayer
    /* Exceptions defined in the PowerPC server specification                */
179 e1833e1f j_mayer
    POWERPC_EXCP_RESET    = 64, /* System reset exception                    */
180 e1833e1f j_mayer
#if defined(TARGET_PPC64) /* PowerPC 64 */
181 e1833e1f j_mayer
    POWERPC_EXCP_DSEG     = 65, /* Data segment exception                    */
182 e1833e1f j_mayer
    POWERPC_EXCP_ISEG     = 66, /* Instruction segment exception             */
183 e1833e1f j_mayer
#endif /* defined(TARGET_PPC64) */
184 e1833e1f j_mayer
#if defined(TARGET_PPC64H) /* PowerPC 64 with hypervisor mode support */
185 e1833e1f j_mayer
    POWERPC_EXCP_HDECR    = 67, /* Hypervisor decrementer exception          */
186 e1833e1f j_mayer
#endif /* defined(TARGET_PPC64H) */
187 e1833e1f j_mayer
    POWERPC_EXCP_TRACE    = 68, /* Trace exception                           */
188 e1833e1f j_mayer
#if defined(TARGET_PPC64H) /* PowerPC 64 with hypervisor mode support */
189 e1833e1f j_mayer
    POWERPC_EXCP_HDSI     = 69, /* Hypervisor data storage exception         */
190 e1833e1f j_mayer
    POWERPC_EXCP_HISI     = 70, /* Hypervisor instruction storage exception  */
191 e1833e1f j_mayer
    POWERPC_EXCP_HDSEG    = 71, /* Hypervisor data segment exception         */
192 e1833e1f j_mayer
    POWERPC_EXCP_HISEG    = 72, /* Hypervisor instruction segment exception  */
193 e1833e1f j_mayer
#endif /* defined(TARGET_PPC64H) */
194 e1833e1f j_mayer
    POWERPC_EXCP_VPU      = 73, /* Vector unavailable exception              */
195 e1833e1f j_mayer
    /* 40x specific exceptions                                               */
196 e1833e1f j_mayer
    POWERPC_EXCP_PIT      = 74, /* Programmable interval timer interrupt     */
197 e1833e1f j_mayer
    /* 601 specific exceptions                                               */
198 e1833e1f j_mayer
    POWERPC_EXCP_IO       = 75, /* IO error exception                        */
199 e1833e1f j_mayer
    POWERPC_EXCP_RUNM     = 76, /* Run mode exception                        */
200 e1833e1f j_mayer
    /* 602 specific exceptions                                               */
201 e1833e1f j_mayer
    POWERPC_EXCP_EMUL     = 77, /* Emulation trap exception                  */
202 e1833e1f j_mayer
    /* 602/603 specific exceptions                                           */
203 e1833e1f j_mayer
    POWERPC_EXCP_IFTLB    = 78, /* Instruction fetch TLB error               */
204 e1833e1f j_mayer
    POWERPC_EXCP_DLTLB    = 79, /* Data load TLB miss                        */
205 e1833e1f j_mayer
    POWERPC_EXCP_DSTLB    = 80, /* Data store TLB miss                       */
206 e1833e1f j_mayer
    /* Exceptions available on most PowerPC                                  */
207 e1833e1f j_mayer
    POWERPC_EXCP_FPA      = 81, /* Floating-point assist exception           */
208 e1833e1f j_mayer
    POWERPC_EXCP_IABR     = 82, /* Instruction address breakpoint            */
209 e1833e1f j_mayer
    POWERPC_EXCP_SMI      = 83, /* System management interrupt               */
210 e1833e1f j_mayer
    POWERPC_EXCP_PERFM    = 84, /* Embedded performance monitor interrupt    */
211 e1833e1f j_mayer
    /* 7xx/74xx specific exceptions                                          */
212 e1833e1f j_mayer
    POWERPC_EXCP_THERM    = 85, /* Thermal interrupt                         */
213 e1833e1f j_mayer
    /* 74xx specific exceptions                                              */
214 e1833e1f j_mayer
    POWERPC_EXCP_VPUA     = 86, /* Vector assist exception                   */
215 e1833e1f j_mayer
    /* 970FX specific exceptions                                             */
216 e1833e1f j_mayer
    POWERPC_EXCP_SOFTP    = 87, /* Soft patch exception                      */
217 e1833e1f j_mayer
    POWERPC_EXCP_MAINT    = 88, /* Maintenance exception                     */
218 e1833e1f j_mayer
    /* EOL                                                                   */
219 e1833e1f j_mayer
    POWERPC_EXCP_NB       = 96,
220 e1833e1f j_mayer
    /* Qemu exceptions: used internally during code translation              */
221 e1833e1f j_mayer
    POWERPC_EXCP_STOP         = 0x200, /* stop translation                   */
222 e1833e1f j_mayer
    POWERPC_EXCP_BRANCH       = 0x201, /* branch instruction                 */
223 e1833e1f j_mayer
    /* Qemu exceptions: special cases we want to stop translation            */
224 e1833e1f j_mayer
    POWERPC_EXCP_SYNC         = 0x202, /* context synchronizing instruction  */
225 e1833e1f j_mayer
    POWERPC_EXCP_SYSCALL_USER = 0x203, /* System call in user mode only      */
226 e1833e1f j_mayer
};
227 e1833e1f j_mayer
228 e1833e1f j_mayer
/* Exceptions error codes                                                    */
229 e1833e1f j_mayer
enum {
230 e1833e1f j_mayer
    /* Exception subtypes for POWERPC_EXCP_ALIGN                             */
231 e1833e1f j_mayer
    POWERPC_EXCP_ALIGN_FP      = 0x01,  /* FP alignment exception            */
232 e1833e1f j_mayer
    POWERPC_EXCP_ALIGN_LST     = 0x02,  /* Unaligned mult/extern load/store  */
233 e1833e1f j_mayer
    POWERPC_EXCP_ALIGN_LE      = 0x03,  /* Multiple little-endian access     */
234 e1833e1f j_mayer
    POWERPC_EXCP_ALIGN_PROT    = 0x04,  /* Access cross protection boundary  */
235 e1833e1f j_mayer
    POWERPC_EXCP_ALIGN_BAT     = 0x05,  /* Access cross a BAT/seg boundary   */
236 e1833e1f j_mayer
    POWERPC_EXCP_ALIGN_CACHE   = 0x06,  /* Impossible dcbz access            */
237 e1833e1f j_mayer
    /* Exception subtypes for POWERPC_EXCP_PROGRAM                           */
238 e1833e1f j_mayer
    /* FP exceptions                                                         */
239 e1833e1f j_mayer
    POWERPC_EXCP_FP            = 0x10,
240 e1833e1f j_mayer
    POWERPC_EXCP_FP_OX         = 0x01,  /* FP overflow                       */
241 e1833e1f j_mayer
    POWERPC_EXCP_FP_UX         = 0x02,  /* FP underflow                      */
242 e1833e1f j_mayer
    POWERPC_EXCP_FP_ZX         = 0x03,  /* FP divide by zero                 */
243 e1833e1f j_mayer
    POWERPC_EXCP_FP_XX         = 0x04,  /* FP inexact                        */
244 7c58044c j_mayer
    POWERPC_EXCP_FP_VXSNAN     = 0x05,  /* FP invalid SNaN op                */
245 e1833e1f j_mayer
    POWERPC_EXCP_FP_VXISI      = 0x06,  /* FP invalid infinite subtraction   */
246 e1833e1f j_mayer
    POWERPC_EXCP_FP_VXIDI      = 0x07,  /* FP invalid infinite divide        */
247 e1833e1f j_mayer
    POWERPC_EXCP_FP_VXZDZ      = 0x08,  /* FP invalid zero divide            */
248 e1833e1f j_mayer
    POWERPC_EXCP_FP_VXIMZ      = 0x09,  /* FP invalid infinite * zero        */
249 e1833e1f j_mayer
    POWERPC_EXCP_FP_VXVC       = 0x0A,  /* FP invalid compare                */
250 e1833e1f j_mayer
    POWERPC_EXCP_FP_VXSOFT     = 0x0B,  /* FP invalid operation              */
251 e1833e1f j_mayer
    POWERPC_EXCP_FP_VXSQRT     = 0x0C,  /* FP invalid square root            */
252 e1833e1f j_mayer
    POWERPC_EXCP_FP_VXCVI      = 0x0D,  /* FP invalid integer conversion     */
253 e1833e1f j_mayer
    /* Invalid instruction                                                   */
254 e1833e1f j_mayer
    POWERPC_EXCP_INVAL         = 0x20,
255 e1833e1f j_mayer
    POWERPC_EXCP_INVAL_INVAL   = 0x01,  /* Invalid instruction               */
256 e1833e1f j_mayer
    POWERPC_EXCP_INVAL_LSWX    = 0x02,  /* Invalid lswx instruction          */
257 e1833e1f j_mayer
    POWERPC_EXCP_INVAL_SPR     = 0x03,  /* Invalid SPR access                */
258 e1833e1f j_mayer
    POWERPC_EXCP_INVAL_FP      = 0x04,  /* Unimplemented mandatory fp instr  */
259 e1833e1f j_mayer
    /* Privileged instruction                                                */
260 e1833e1f j_mayer
    POWERPC_EXCP_PRIV          = 0x30,
261 e1833e1f j_mayer
    POWERPC_EXCP_PRIV_OPC      = 0x01,  /* Privileged operation exception    */
262 e1833e1f j_mayer
    POWERPC_EXCP_PRIV_REG      = 0x02,  /* Privileged register exception     */
263 e1833e1f j_mayer
    /* Trap                                                                  */
264 e1833e1f j_mayer
    POWERPC_EXCP_TRAP          = 0x40,
265 e1833e1f j_mayer
};
266 e1833e1f j_mayer
267 e1833e1f j_mayer
/*****************************************************************************/
268 a750fc0b j_mayer
/* Input pins model                                                          */
269 a750fc0b j_mayer
enum {
270 a750fc0b j_mayer
    PPC_FLAGS_INPUT_UNKNOWN = 0,
271 2662a059 j_mayer
    /* PowerPC 6xx bus                  */
272 a750fc0b j_mayer
    PPC_FLAGS_INPUT_6xx,
273 2662a059 j_mayer
    /* BookE bus                        */
274 a750fc0b j_mayer
    PPC_FLAGS_INPUT_BookE,
275 a750fc0b j_mayer
    /* PowerPC 405 bus                  */
276 a750fc0b j_mayer
    PPC_FLAGS_INPUT_405,
277 2662a059 j_mayer
    /* PowerPC 970 bus                  */
278 a750fc0b j_mayer
    PPC_FLAGS_INPUT_970,
279 a750fc0b j_mayer
    /* PowerPC 401 bus                  */
280 a750fc0b j_mayer
    PPC_FLAGS_INPUT_401,
281 3fc6c082 bellard
};
282 3fc6c082 bellard
283 a750fc0b j_mayer
#define PPC_INPUT(env) (env->bus_model)
284 3fc6c082 bellard
285 be147d08 j_mayer
/*****************************************************************************/
286 3fc6c082 bellard
typedef struct ppc_def_t ppc_def_t;
287 a750fc0b j_mayer
typedef struct opc_handler_t opc_handler_t;
288 79aceca5 bellard
289 3fc6c082 bellard
/*****************************************************************************/
290 3fc6c082 bellard
/* Types used to describe some PowerPC registers */
291 3fc6c082 bellard
typedef struct CPUPPCState CPUPPCState;
292 9fddaa0c bellard
typedef struct ppc_tb_t ppc_tb_t;
293 3fc6c082 bellard
typedef struct ppc_spr_t ppc_spr_t;
294 3fc6c082 bellard
typedef struct ppc_dcr_t ppc_dcr_t;
295 a9d9eb8f j_mayer
typedef union ppc_avr_t ppc_avr_t;
296 1d0a48fb j_mayer
typedef union ppc_tlb_t ppc_tlb_t;
297 76a66253 j_mayer
298 3fc6c082 bellard
/* SPR access micro-ops generations callbacks */
299 3fc6c082 bellard
struct ppc_spr_t {
300 3fc6c082 bellard
    void (*uea_read)(void *opaque, int spr_num);
301 3fc6c082 bellard
    void (*uea_write)(void *opaque, int spr_num);
302 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
303 3fc6c082 bellard
    void (*oea_read)(void *opaque, int spr_num);
304 3fc6c082 bellard
    void (*oea_write)(void *opaque, int spr_num);
305 be147d08 j_mayer
#if defined(TARGET_PPC64H)
306 be147d08 j_mayer
    void (*hea_read)(void *opaque, int spr_num);
307 be147d08 j_mayer
    void (*hea_write)(void *opaque, int spr_num);
308 be147d08 j_mayer
#endif
309 76a66253 j_mayer
#endif
310 3fc6c082 bellard
    const unsigned char *name;
311 3fc6c082 bellard
};
312 3fc6c082 bellard
313 3fc6c082 bellard
/* Altivec registers (128 bits) */
314 a9d9eb8f j_mayer
union ppc_avr_t {
315 a9d9eb8f j_mayer
    uint8_t u8[16];
316 a9d9eb8f j_mayer
    uint16_t u16[8];
317 a9d9eb8f j_mayer
    uint32_t u32[4];
318 a9d9eb8f j_mayer
    uint64_t u64[2];
319 3fc6c082 bellard
};
320 9fddaa0c bellard
321 3fc6c082 bellard
/* Software TLB cache */
322 1d0a48fb j_mayer
typedef struct ppc6xx_tlb_t ppc6xx_tlb_t;
323 1d0a48fb j_mayer
struct ppc6xx_tlb_t {
324 76a66253 j_mayer
    target_ulong pte0;
325 76a66253 j_mayer
    target_ulong pte1;
326 76a66253 j_mayer
    target_ulong EPN;
327 1d0a48fb j_mayer
};
328 1d0a48fb j_mayer
329 1d0a48fb j_mayer
typedef struct ppcemb_tlb_t ppcemb_tlb_t;
330 1d0a48fb j_mayer
struct ppcemb_tlb_t {
331 c55e9aef j_mayer
    target_phys_addr_t RPN;
332 1d0a48fb j_mayer
    target_ulong EPN;
333 76a66253 j_mayer
    target_ulong PID;
334 c55e9aef j_mayer
    target_ulong size;
335 c55e9aef j_mayer
    uint32_t prot;
336 c55e9aef j_mayer
    uint32_t attr; /* Storage attributes */
337 1d0a48fb j_mayer
};
338 1d0a48fb j_mayer
339 1d0a48fb j_mayer
union ppc_tlb_t {
340 1d0a48fb j_mayer
    ppc6xx_tlb_t tlb6;
341 1d0a48fb j_mayer
    ppcemb_tlb_t tlbe;
342 3fc6c082 bellard
};
343 3fc6c082 bellard
344 3fc6c082 bellard
/*****************************************************************************/
345 3fc6c082 bellard
/* Machine state register bits definition                                    */
346 76a66253 j_mayer
#define MSR_SF   63 /* Sixty-four-bit mode                            hflags */
347 3fc6c082 bellard
#define MSR_ISF  61 /* Sixty-four-bit interrupt mode on 630                  */
348 76a66253 j_mayer
#define MSR_HV   60 /* hypervisor state                               hflags */
349 363be49c j_mayer
#define MSR_CM   31 /* Computation mode for BookE                     hflags */
350 363be49c j_mayer
#define MSR_ICM  30 /* Interrupt computation mode for BookE                  */
351 363be49c j_mayer
#define MSR_UCLE 26 /* User-mode cache lock enable for BookE                 */
352 d26bfc9a j_mayer
#define MSR_VR   25 /* altivec available                            x hflags */
353 d26bfc9a j_mayer
#define MSR_SPE  25 /* SPE enable for BookE                         x hflags */
354 76a66253 j_mayer
#define MSR_AP   23 /* Access privilege state on 602                  hflags */
355 76a66253 j_mayer
#define MSR_SA   22 /* Supervisor access mode on 602                  hflags */
356 3fc6c082 bellard
#define MSR_KEY  19 /* key bit on 603e                                       */
357 25ba3a68 j_mayer
#define MSR_POW  18 /* Power management                                      */
358 d26bfc9a j_mayer
#define MSR_TGPR 17 /* TGPR usage on 602/603                        x        */
359 d26bfc9a j_mayer
#define MSR_CE   17 /* Critical interrupt enable on embedded PowerPC x       */
360 3fc6c082 bellard
#define MSR_ILE  16 /* Interrupt little-endian mode                          */
361 3fc6c082 bellard
#define MSR_EE   15 /* External interrupt enable                             */
362 76a66253 j_mayer
#define MSR_PR   14 /* Problem state                                  hflags */
363 76a66253 j_mayer
#define MSR_FP   13 /* Floating point available                       hflags */
364 3fc6c082 bellard
#define MSR_ME   12 /* Machine check interrupt enable                        */
365 76a66253 j_mayer
#define MSR_FE0  11 /* Floating point exception mode 0                hflags */
366 d26bfc9a j_mayer
#define MSR_SE   10 /* Single-step trace enable                     x hflags */
367 d26bfc9a j_mayer
#define MSR_DWE  10 /* Debug wait enable on 405                     x        */
368 d26bfc9a j_mayer
#define MSR_UBLE 10 /* User BTB lock enable on e500                 x        */
369 d26bfc9a j_mayer
#define MSR_BE   9  /* Branch trace enable                          x hflags */
370 d26bfc9a j_mayer
#define MSR_DE   9  /* Debug interrupts enable on embedded PowerPC  x        */
371 76a66253 j_mayer
#define MSR_FE1  8  /* Floating point exception mode 1                hflags */
372 3fc6c082 bellard
#define MSR_AL   7  /* AL bit on POWER                                       */
373 0411a972 j_mayer
#define MSR_EP   6  /* Exception prefix on 601                               */
374 3fc6c082 bellard
#define MSR_IR   5  /* Instruction relocate                                  */
375 3fc6c082 bellard
#define MSR_DR   4  /* Data relocate                                         */
376 25ba3a68 j_mayer
#define MSR_PE   3  /* Protection enable on 403                              */
377 d26bfc9a j_mayer
#define MSR_PX   2  /* Protection exclusive on 403                  x        */
378 d26bfc9a j_mayer
#define MSR_PMM  2  /* Performance monitor mark on POWER            x        */
379 d26bfc9a j_mayer
#define MSR_RI   1  /* Recoverable interrupt                        1        */
380 d26bfc9a j_mayer
#define MSR_LE   0  /* Little-endian mode                           1 hflags */
381 0411a972 j_mayer
382 0411a972 j_mayer
#define msr_sf   ((env->msr >> MSR_SF)   & 1)
383 0411a972 j_mayer
#define msr_isf  ((env->msr >> MSR_ISF)  & 1)
384 0411a972 j_mayer
#define msr_hv   ((env->msr >> MSR_HV)   & 1)
385 0411a972 j_mayer
#define msr_cm   ((env->msr >> MSR_CM)   & 1)
386 0411a972 j_mayer
#define msr_icm  ((env->msr >> MSR_ICM)  & 1)
387 0411a972 j_mayer
#define msr_ucle ((env->msr >> MSR_UCLE) & 1)
388 0411a972 j_mayer
#define msr_vr   ((env->msr >> MSR_VR)   & 1)
389 0411a972 j_mayer
#define msr_spe  ((env->msr >> MSR_SE)   & 1)
390 0411a972 j_mayer
#define msr_ap   ((env->msr >> MSR_AP)   & 1)
391 0411a972 j_mayer
#define msr_sa   ((env->msr >> MSR_SA)   & 1)
392 0411a972 j_mayer
#define msr_key  ((env->msr >> MSR_KEY)  & 1)
393 0411a972 j_mayer
#define msr_pow  ((env->msr >> MSR_POW)  & 1)
394 0411a972 j_mayer
#define msr_tgpr ((env->msr >> MSR_TGPR) & 1)
395 0411a972 j_mayer
#define msr_ce   ((env->msr >> MSR_CE)   & 1)
396 0411a972 j_mayer
#define msr_ile  ((env->msr >> MSR_ILE)  & 1)
397 0411a972 j_mayer
#define msr_ee   ((env->msr >> MSR_EE)   & 1)
398 0411a972 j_mayer
#define msr_pr   ((env->msr >> MSR_PR)   & 1)
399 0411a972 j_mayer
#define msr_fp   ((env->msr >> MSR_FP)   & 1)
400 0411a972 j_mayer
#define msr_me   ((env->msr >> MSR_ME)   & 1)
401 0411a972 j_mayer
#define msr_fe0  ((env->msr >> MSR_FE0)  & 1)
402 0411a972 j_mayer
#define msr_se   ((env->msr >> MSR_SE)   & 1)
403 0411a972 j_mayer
#define msr_dwe  ((env->msr >> MSR_DWE)  & 1)
404 0411a972 j_mayer
#define msr_uble ((env->msr >> MSR_UBLE) & 1)
405 0411a972 j_mayer
#define msr_be   ((env->msr >> MSR_BE)   & 1)
406 0411a972 j_mayer
#define msr_de   ((env->msr >> MSR_DE)   & 1)
407 0411a972 j_mayer
#define msr_fe1  ((env->msr >> MSR_FE1)  & 1)
408 0411a972 j_mayer
#define msr_al   ((env->msr >> MSR_AL)   & 1)
409 0411a972 j_mayer
#define msr_ep   ((env->msr >> MSR_EP)   & 1)
410 0411a972 j_mayer
#define msr_ir   ((env->msr >> MSR_IR)   & 1)
411 0411a972 j_mayer
#define msr_dr   ((env->msr >> MSR_DR)   & 1)
412 0411a972 j_mayer
#define msr_pe   ((env->msr >> MSR_PE)   & 1)
413 0411a972 j_mayer
#define msr_px   ((env->msr >> MSR_PX)   & 1)
414 0411a972 j_mayer
#define msr_pmm  ((env->msr >> MSR_PMM)  & 1)
415 0411a972 j_mayer
#define msr_ri   ((env->msr >> MSR_RI)   & 1)
416 0411a972 j_mayer
#define msr_le   ((env->msr >> MSR_LE)   & 1)
417 79aceca5 bellard
418 d26bfc9a j_mayer
enum {
419 d26bfc9a j_mayer
    POWERPC_FLAG_NONE = 0x00000000,
420 d26bfc9a j_mayer
    /* Flag for MSR bit 25 signification (VRE/SPE)                           */
421 d26bfc9a j_mayer
    POWERPC_FLAG_SPE  = 0x00000001,
422 d26bfc9a j_mayer
    POWERPC_FLAG_VRE  = 0x00000002,
423 d26bfc9a j_mayer
    /* Flag for MSR bit 17 signification (TGPR/CE)                           */
424 25ba3a68 j_mayer
    POWERPC_FLAG_TGPR = 0x00000004,
425 25ba3a68 j_mayer
    POWERPC_FLAG_CE   = 0x00000008,
426 d26bfc9a j_mayer
    /* Flag for MSR bit 10 signification (SE/DWE/UBLE)                       */
427 25ba3a68 j_mayer
    POWERPC_FLAG_SE   = 0x00000010,
428 25ba3a68 j_mayer
    POWERPC_FLAG_DWE  = 0x00000020,
429 25ba3a68 j_mayer
    POWERPC_FLAG_UBLE = 0x00000040,
430 d26bfc9a j_mayer
    /* Flag for MSR bit 9 signification (BE/DE)                              */
431 25ba3a68 j_mayer
    POWERPC_FLAG_BE   = 0x00000080,
432 25ba3a68 j_mayer
    POWERPC_FLAG_DE   = 0x00000100,
433 d26bfc9a j_mayer
    /* Flag for MSR but 2 signification (PX/PMM)                             */
434 25ba3a68 j_mayer
    POWERPC_FLAG_PX   = 0x00000200,
435 25ba3a68 j_mayer
    POWERPC_FLAG_PMM  = 0x00000400,
436 d26bfc9a j_mayer
};
437 d26bfc9a j_mayer
438 7c58044c j_mayer
/*****************************************************************************/
439 7c58044c j_mayer
/* Floating point status and control register                                */
440 7c58044c j_mayer
#define FPSCR_FX     31 /* Floating-point exception summary                  */
441 7c58044c j_mayer
#define FPSCR_FEX    30 /* Floating-point enabled exception summary          */
442 7c58044c j_mayer
#define FPSCR_VX     29 /* Floating-point invalid operation exception summ.  */
443 7c58044c j_mayer
#define FPSCR_OX     28 /* Floating-point overflow exception                 */
444 7c58044c j_mayer
#define FPSCR_UX     27 /* Floating-point underflow exception                */
445 7c58044c j_mayer
#define FPSCR_ZX     26 /* Floating-point zero divide exception              */
446 7c58044c j_mayer
#define FPSCR_XX     25 /* Floating-point inexact exception                  */
447 7c58044c j_mayer
#define FPSCR_VXSNAN 24 /* Floating-point invalid operation exception (sNan) */
448 7c58044c j_mayer
#define FPSCR_VXISI  23 /* Floating-point invalid operation exception (inf)  */
449 7c58044c j_mayer
#define FPSCR_VXIDI  22 /* Floating-point invalid operation exception (inf)  */
450 7c58044c j_mayer
#define FPSCR_VXZDZ  21 /* Floating-point invalid operation exception (zero) */
451 7c58044c j_mayer
#define FPSCR_VXIMZ  20 /* Floating-point invalid operation exception (inf)  */
452 7c58044c j_mayer
#define FPSCR_VXVC   19 /* Floating-point invalid operation exception (comp) */
453 7c58044c j_mayer
#define FPSCR_FR     18 /* Floating-point fraction rounded                   */
454 7c58044c j_mayer
#define FPSCR_FI     17 /* Floating-point fraction inexact                   */
455 7c58044c j_mayer
#define FPSCR_C      16 /* Floating-point result class descriptor            */
456 7c58044c j_mayer
#define FPSCR_FL     15 /* Floating-point less than or negative              */
457 7c58044c j_mayer
#define FPSCR_FG     14 /* Floating-point greater than or negative           */
458 7c58044c j_mayer
#define FPSCR_FE     13 /* Floating-point equal or zero                      */
459 7c58044c j_mayer
#define FPSCR_FU     12 /* Floating-point unordered or NaN                   */
460 7c58044c j_mayer
#define FPSCR_FPCC   12 /* Floating-point condition code                     */
461 7c58044c j_mayer
#define FPSCR_FPRF   12 /* Floating-point result flags                       */
462 7c58044c j_mayer
#define FPSCR_VXSOFT 10 /* Floating-point invalid operation exception (soft) */
463 7c58044c j_mayer
#define FPSCR_VXSQRT 9  /* Floating-point invalid operation exception (sqrt) */
464 7c58044c j_mayer
#define FPSCR_VXCVI  8  /* Floating-point invalid operation exception (int)  */
465 7c58044c j_mayer
#define FPSCR_VE     7  /* Floating-point invalid operation exception enable */
466 7c58044c j_mayer
#define FPSCR_OE     6  /* Floating-point overflow exception enable          */
467 7c58044c j_mayer
#define FPSCR_UE     5  /* Floating-point undeflow exception enable          */
468 7c58044c j_mayer
#define FPSCR_ZE     4  /* Floating-point zero divide exception enable       */
469 7c58044c j_mayer
#define FPSCR_XE     3  /* Floating-point inexact exception enable           */
470 7c58044c j_mayer
#define FPSCR_NI     2  /* Floating-point non-IEEE mode                      */
471 7c58044c j_mayer
#define FPSCR_RN1    1
472 7c58044c j_mayer
#define FPSCR_RN     0  /* Floating-point rounding control                   */
473 7c58044c j_mayer
#define fpscr_fex    (((env->fpscr) >> FPSCR_FEX)    & 0x1)
474 7c58044c j_mayer
#define fpscr_vx     (((env->fpscr) >> FPSCR_VX)     & 0x1)
475 7c58044c j_mayer
#define fpscr_ox     (((env->fpscr) >> FPSCR_OX)     & 0x1)
476 7c58044c j_mayer
#define fpscr_ux     (((env->fpscr) >> FPSCR_UX)     & 0x1)
477 7c58044c j_mayer
#define fpscr_zx     (((env->fpscr) >> FPSCR_ZX)     & 0x1)
478 7c58044c j_mayer
#define fpscr_xx     (((env->fpscr) >> FPSCR_XX)     & 0x1)
479 7c58044c j_mayer
#define fpscr_vxsnan (((env->fpscr) >> FPSCR_VXSNAN) & 0x1)
480 7c58044c j_mayer
#define fpscr_vxisi  (((env->fpscr) >> FPSCR_VXISI)  & 0x1)
481 7c58044c j_mayer
#define fpscr_vxidi  (((env->fpscr) >> FPSCR_VXIDI)  & 0x1)
482 7c58044c j_mayer
#define fpscr_vxzdz  (((env->fpscr) >> FPSCR_VXZDZ)  & 0x1)
483 7c58044c j_mayer
#define fpscr_vximz  (((env->fpscr) >> FPSCR_VXIMZ)  & 0x1)
484 7c58044c j_mayer
#define fpscr_vxvc   (((env->fpscr) >> FPSCR_VXVC)   & 0x1)
485 7c58044c j_mayer
#define fpscr_fpcc   (((env->fpscr) >> FPSCR_FPCC)   & 0xF)
486 7c58044c j_mayer
#define fpscr_vxsoft (((env->fpscr) >> FPSCR_VXSOFT) & 0x1)
487 7c58044c j_mayer
#define fpscr_vxsqrt (((env->fpscr) >> FPSCR_VXSQRT) & 0x1)
488 7c58044c j_mayer
#define fpscr_vxcvi  (((env->fpscr) >> FPSCR_VXCVI)  & 0x1)
489 7c58044c j_mayer
#define fpscr_ve     (((env->fpscr) >> FPSCR_VE)     & 0x1)
490 7c58044c j_mayer
#define fpscr_oe     (((env->fpscr) >> FPSCR_OE)     & 0x1)
491 7c58044c j_mayer
#define fpscr_ue     (((env->fpscr) >> FPSCR_UE)     & 0x1)
492 7c58044c j_mayer
#define fpscr_ze     (((env->fpscr) >> FPSCR_ZE)     & 0x1)
493 7c58044c j_mayer
#define fpscr_xe     (((env->fpscr) >> FPSCR_XE)     & 0x1)
494 7c58044c j_mayer
#define fpscr_ni     (((env->fpscr) >> FPSCR_NI)     & 0x1)
495 7c58044c j_mayer
#define fpscr_rn     (((env->fpscr) >> FPSCR_RN)     & 0x3)
496 7c58044c j_mayer
/* Invalid operation exception summary */
497 7c58044c j_mayer
#define fpscr_ix ((env->fpscr) & ((1 << FPSCR_VXSNAN) | (1 << FPSCR_VXISI)  | \
498 7c58044c j_mayer
                                  (1 << FPSCR_VXIDI)  | (1 << FPSCR_VXZDZ)  | \
499 7c58044c j_mayer
                                  (1 << FPSCR_VXIMZ)  | (1 << FPSCR_VXVC)   | \
500 7c58044c j_mayer
                                  (1 << FPSCR_VXSOFT) | (1 << FPSCR_VXSQRT) | \
501 7c58044c j_mayer
                                  (1 << FPSCR_VXCVI)))
502 7c58044c j_mayer
/* exception summary */
503 7c58044c j_mayer
#define fpscr_ex  (((env->fpscr) >> FPSCR_XX) & 0x1F)
504 7c58044c j_mayer
/* enabled exception summary */
505 7c58044c j_mayer
#define fpscr_eex (((env->fpscr) >> FPSCR_XX) & ((env->fpscr) >> FPSCR_XE) &  \
506 7c58044c j_mayer
                   0x1F)
507 7c58044c j_mayer
508 7c58044c j_mayer
/*****************************************************************************/
509 7c58044c j_mayer
/* The whole PowerPC CPU context */
510 6ebbf390 j_mayer
#if defined(TARGET_PPC64H)
511 6ebbf390 j_mayer
#define NB_MMU_MODES 3
512 6ebbf390 j_mayer
#else
513 6ebbf390 j_mayer
#define NB_MMU_MODES 2
514 6ebbf390 j_mayer
#endif
515 6ebbf390 j_mayer
516 3fc6c082 bellard
struct CPUPPCState {
517 3fc6c082 bellard
    /* First are the most commonly used resources
518 3fc6c082 bellard
     * during translated code execution
519 3fc6c082 bellard
     */
520 0487d6a8 j_mayer
#if TARGET_GPR_BITS > HOST_LONG_BITS
521 3fc6c082 bellard
    /* temporary fixed-point registers
522 3fc6c082 bellard
     * used to emulate 64 bits target on 32 bits hosts
523 5fafdf24 ths
     */
524 3c4c9f9f ths
    ppc_gpr_t t0, t1, t2;
525 3fc6c082 bellard
#endif
526 a9d9eb8f j_mayer
    ppc_avr_t avr0, avr1, avr2;
527 d9bce9d9 j_mayer
528 79aceca5 bellard
    /* general purpose registers */
529 76a66253 j_mayer
    ppc_gpr_t gpr[32];
530 3fc6c082 bellard
    /* LR */
531 3fc6c082 bellard
    target_ulong lr;
532 3fc6c082 bellard
    /* CTR */
533 3fc6c082 bellard
    target_ulong ctr;
534 3fc6c082 bellard
    /* condition register */
535 3fc6c082 bellard
    uint8_t crf[8];
536 79aceca5 bellard
    /* XER */
537 3fc6c082 bellard
    /* XXX: We use only 5 fields, but we want to keep the structure aligned */
538 3fc6c082 bellard
    uint8_t xer[8];
539 79aceca5 bellard
    /* Reservation address */
540 3fc6c082 bellard
    target_ulong reserve;
541 3fc6c082 bellard
542 3fc6c082 bellard
    /* Those ones are used in supervisor mode only */
543 79aceca5 bellard
    /* machine state register */
544 0411a972 j_mayer
    target_ulong msr;
545 3fc6c082 bellard
    /* temporary general purpose registers */
546 76a66253 j_mayer
    ppc_gpr_t tgpr[4]; /* Used to speed-up TLB assist handlers */
547 3fc6c082 bellard
548 3fc6c082 bellard
    /* Floating point execution context */
549 76a66253 j_mayer
    /* temporary float registers */
550 4ecc3190 bellard
    float64 ft0;
551 4ecc3190 bellard
    float64 ft1;
552 4ecc3190 bellard
    float64 ft2;
553 4ecc3190 bellard
    float_status fp_status;
554 3fc6c082 bellard
    /* floating point registers */
555 3fc6c082 bellard
    float64 fpr[32];
556 3fc6c082 bellard
    /* floating point status and control register */
557 7c58044c j_mayer
    uint32_t fpscr;
558 4ecc3190 bellard
559 a316d335 bellard
    CPU_COMMON
560 a316d335 bellard
561 50443c98 bellard
    int halted; /* TRUE if the CPU is in suspend state */
562 50443c98 bellard
563 ac9eb073 bellard
    int access_type; /* when a memory exception occurs, the access
564 ac9eb073 bellard
                        type is stored here */
565 a541f297 bellard
566 f2e63a42 j_mayer
    /* MMU context - only relevant for full system emulation */
567 f2e63a42 j_mayer
#if !defined(CONFIG_USER_ONLY)
568 f2e63a42 j_mayer
#if defined(TARGET_PPC64)
569 3fc6c082 bellard
    /* Address space register */
570 3fc6c082 bellard
    target_ulong asr;
571 f2e63a42 j_mayer
    /* PowerPC 64 SLB area */
572 f2e63a42 j_mayer
    int slb_nr;
573 f2e63a42 j_mayer
#endif
574 3fc6c082 bellard
    /* segment registers */
575 3fc6c082 bellard
    target_ulong sdr1;
576 3fc6c082 bellard
    target_ulong sr[16];
577 3fc6c082 bellard
    /* BATs */
578 3fc6c082 bellard
    int nb_BATs;
579 3fc6c082 bellard
    target_ulong DBAT[2][8];
580 3fc6c082 bellard
    target_ulong IBAT[2][8];
581 f2e63a42 j_mayer
    /* PowerPC TLB registers (for 4xx and 60x software driven TLBs) */
582 f2e63a42 j_mayer
    int nb_tlb;      /* Total number of TLB                                  */
583 f2e63a42 j_mayer
    int tlb_per_way; /* Speed-up helper: used to avoid divisions at run time */
584 f2e63a42 j_mayer
    int nb_ways;     /* Number of ways in the TLB set                        */
585 f2e63a42 j_mayer
    int last_way;    /* Last used way used to allocate TLB in a LRU way      */
586 f2e63a42 j_mayer
    int id_tlbs;     /* If 1, MMU has separated TLBs for instructions & data */
587 f2e63a42 j_mayer
    int nb_pids;     /* Number of available PID registers                    */
588 f2e63a42 j_mayer
    ppc_tlb_t *tlb;  /* TLB is optional. Allocate them only if needed        */
589 f2e63a42 j_mayer
    /* 403 dedicated access protection registers */
590 f2e63a42 j_mayer
    target_ulong pb[4];
591 f2e63a42 j_mayer
#endif
592 9fddaa0c bellard
593 3fc6c082 bellard
    /* Other registers */
594 3fc6c082 bellard
    /* Special purpose registers */
595 3fc6c082 bellard
    target_ulong spr[1024];
596 f2e63a42 j_mayer
    ppc_spr_t spr_cb[1024];
597 3fc6c082 bellard
    /* Altivec registers */
598 3fc6c082 bellard
    ppc_avr_t avr[32];
599 3fc6c082 bellard
    uint32_t vscr;
600 f2e63a42 j_mayer
#if defined(TARGET_PPCEMB)
601 d9bce9d9 j_mayer
    /* SPE registers */
602 d9bce9d9 j_mayer
    ppc_gpr_t spe_acc;
603 0487d6a8 j_mayer
    float_status spe_status;
604 d9bce9d9 j_mayer
    uint32_t spe_fscr;
605 f2e63a42 j_mayer
#endif
606 3fc6c082 bellard
607 3fc6c082 bellard
    /* Internal devices resources */
608 9fddaa0c bellard
    /* Time base and decrementer */
609 9fddaa0c bellard
    ppc_tb_t *tb_env;
610 3fc6c082 bellard
    /* Device control registers */
611 3fc6c082 bellard
    ppc_dcr_t *dcr_env;
612 3fc6c082 bellard
613 d63001d1 j_mayer
    int dcache_line_size;
614 d63001d1 j_mayer
    int icache_line_size;
615 d63001d1 j_mayer
616 3fc6c082 bellard
    /* Those resources are used during exception processing */
617 3fc6c082 bellard
    /* CPU model definition */
618 a750fc0b j_mayer
    target_ulong msr_mask;
619 a750fc0b j_mayer
    uint8_t mmu_model;
620 a750fc0b j_mayer
    uint8_t excp_model;
621 a750fc0b j_mayer
    uint8_t bus_model;
622 a750fc0b j_mayer
    uint8_t pad;
623 237c0af0 j_mayer
    int bfd_mach;
624 3fc6c082 bellard
    uint32_t flags;
625 3fc6c082 bellard
626 3fc6c082 bellard
    int exception_index;
627 3fc6c082 bellard
    int error_code;
628 3fc6c082 bellard
    int interrupt_request;
629 47103572 j_mayer
    uint32_t pending_interrupts;
630 e9df014c j_mayer
#if !defined(CONFIG_USER_ONLY)
631 e9df014c j_mayer
    /* This is the IRQ controller, which is implementation dependant
632 e9df014c j_mayer
     * and only relevant when emulating a complete machine.
633 e9df014c j_mayer
     */
634 e9df014c j_mayer
    uint32_t irq_input_state;
635 e9df014c j_mayer
    void **irq_inputs;
636 e1833e1f j_mayer
    /* Exception vectors */
637 e1833e1f j_mayer
    target_ulong excp_vectors[POWERPC_EXCP_NB];
638 e1833e1f j_mayer
    target_ulong excp_prefix;
639 e1833e1f j_mayer
    target_ulong ivor_mask;
640 e1833e1f j_mayer
    target_ulong ivpr_mask;
641 d63001d1 j_mayer
    target_ulong hreset_vector;
642 e9df014c j_mayer
#endif
643 3fc6c082 bellard
644 3fc6c082 bellard
    /* Those resources are used only during code translation */
645 3fc6c082 bellard
    /* Next instruction pointer */
646 3fc6c082 bellard
    target_ulong nip;
647 f2e63a42 j_mayer
648 3fc6c082 bellard
    /* opcode handlers */
649 3fc6c082 bellard
    opc_handler_t *opcodes[0x40];
650 3fc6c082 bellard
651 3fc6c082 bellard
    /* Those resources are used only in Qemu core */
652 3fc6c082 bellard
    jmp_buf jmp_env;
653 3fc6c082 bellard
    int user_mode_only; /* user mode only simulation */
654 056401ea j_mayer
    target_ulong hflags;      /* hflags is a MSR & HFLAGS_MASK         */
655 056401ea j_mayer
    target_ulong hflags_nmsr; /* specific hflags, not comming from MSR */
656 6ebbf390 j_mayer
    int mmu_idx;         /* precomputed MMU index to speed up mem accesses */
657 3fc6c082 bellard
658 9fddaa0c bellard
    /* Power management */
659 9fddaa0c bellard
    int power_mode;
660 cd346349 j_mayer
    int (*check_pow)(CPUPPCState *env);
661 a541f297 bellard
662 6d506e6d bellard
    /* temporary hack to handle OSI calls (only used if non NULL) */
663 6d506e6d bellard
    int (*osi_call)(struct CPUPPCState *env);
664 3fc6c082 bellard
};
665 79aceca5 bellard
666 76a66253 j_mayer
/* Context used internally during MMU translations */
667 76a66253 j_mayer
typedef struct mmu_ctx_t mmu_ctx_t;
668 76a66253 j_mayer
struct mmu_ctx_t {
669 76a66253 j_mayer
    target_phys_addr_t raddr;      /* Real address              */
670 76a66253 j_mayer
    int prot;                      /* Protection bits           */
671 76a66253 j_mayer
    target_phys_addr_t pg_addr[2]; /* PTE tables base addresses */
672 76a66253 j_mayer
    target_ulong ptem;             /* Virtual segment ID | API  */
673 76a66253 j_mayer
    int key;                       /* Access key                */
674 b227a8e9 j_mayer
    int nx;                        /* Non-execute area          */
675 76a66253 j_mayer
};
676 76a66253 j_mayer
677 3fc6c082 bellard
/*****************************************************************************/
678 36081602 j_mayer
CPUPPCState *cpu_ppc_init (void);
679 36081602 j_mayer
int cpu_ppc_exec (CPUPPCState *s);
680 36081602 j_mayer
void cpu_ppc_close (CPUPPCState *s);
681 79aceca5 bellard
/* you can call this signal handler from your SIGBUS and SIGSEGV
682 79aceca5 bellard
   signal handlers to inform the virtual CPU of exceptions. non zero
683 79aceca5 bellard
   is returned if the signal was handled by the virtual CPU.  */
684 36081602 j_mayer
int cpu_ppc_signal_handler (int host_signum, void *pinfo,
685 36081602 j_mayer
                            void *puc);
686 79aceca5 bellard
687 a541f297 bellard
void do_interrupt (CPUPPCState *env);
688 e9df014c j_mayer
void ppc_hw_interrupt (CPUPPCState *env);
689 36081602 j_mayer
void cpu_loop_exit (void);
690 a541f297 bellard
691 9a64fbe4 bellard
void dump_stack (CPUPPCState *env);
692 a541f297 bellard
693 76a66253 j_mayer
#if !defined(CONFIG_USER_ONLY)
694 3fc6c082 bellard
target_ulong do_load_ibatu (CPUPPCState *env, int nr);
695 3fc6c082 bellard
target_ulong do_load_ibatl (CPUPPCState *env, int nr);
696 3fc6c082 bellard
void do_store_ibatu (CPUPPCState *env, int nr, target_ulong value);
697 3fc6c082 bellard
void do_store_ibatl (CPUPPCState *env, int nr, target_ulong value);
698 3fc6c082 bellard
target_ulong do_load_dbatu (CPUPPCState *env, int nr);
699 3fc6c082 bellard
target_ulong do_load_dbatl (CPUPPCState *env, int nr);
700 3fc6c082 bellard
void do_store_dbatu (CPUPPCState *env, int nr, target_ulong value);
701 3fc6c082 bellard
void do_store_dbatl (CPUPPCState *env, int nr, target_ulong value);
702 056401ea j_mayer
void do_store_ibatu_601 (CPUPPCState *env, int nr, target_ulong value);
703 056401ea j_mayer
void do_store_ibatl_601 (CPUPPCState *env, int nr, target_ulong value);
704 3fc6c082 bellard
target_ulong do_load_sdr1 (CPUPPCState *env);
705 3fc6c082 bellard
void do_store_sdr1 (CPUPPCState *env, target_ulong value);
706 d9bce9d9 j_mayer
#if defined(TARGET_PPC64)
707 d9bce9d9 j_mayer
target_ulong ppc_load_asr (CPUPPCState *env);
708 d9bce9d9 j_mayer
void ppc_store_asr (CPUPPCState *env, target_ulong value);
709 12de9a39 j_mayer
target_ulong ppc_load_slb (CPUPPCState *env, int slb_nr);
710 12de9a39 j_mayer
void ppc_store_slb (CPUPPCState *env, int slb_nr, target_ulong rs);
711 12de9a39 j_mayer
#endif /* defined(TARGET_PPC64) */
712 12de9a39 j_mayer
#if 0 // Unused
713 3fc6c082 bellard
target_ulong do_load_sr (CPUPPCState *env, int srnum);
714 76a66253 j_mayer
#endif
715 12de9a39 j_mayer
void do_store_sr (CPUPPCState *env, int srnum, target_ulong value);
716 12de9a39 j_mayer
#endif /* !defined(CONFIG_USER_ONLY) */
717 bfa1e5cf j_mayer
target_ulong ppc_load_xer (CPUPPCState *env);
718 bfa1e5cf j_mayer
void ppc_store_xer (CPUPPCState *env, target_ulong value);
719 0411a972 j_mayer
void ppc_store_msr (CPUPPCState *env, target_ulong value);
720 3fc6c082 bellard
721 0a032cbe j_mayer
void cpu_ppc_reset (void *opaque);
722 0a032cbe j_mayer
CPUPPCState *cpu_ppc_init (void);
723 0a032cbe j_mayer
void cpu_ppc_close(CPUPPCState *env);
724 a541f297 bellard
725 3fc6c082 bellard
int ppc_find_by_name (const unsigned char *name, ppc_def_t **def);
726 3fc6c082 bellard
int ppc_find_by_pvr (uint32_t apvr, ppc_def_t **def);
727 3fc6c082 bellard
void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
728 3fc6c082 bellard
int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def);
729 85c4adf6 bellard
730 9fddaa0c bellard
/* Time-base and decrementer management */
731 9fddaa0c bellard
#ifndef NO_CPU_IO_DEFS
732 9fddaa0c bellard
uint32_t cpu_ppc_load_tbl (CPUPPCState *env);
733 9fddaa0c bellard
uint32_t cpu_ppc_load_tbu (CPUPPCState *env);
734 9fddaa0c bellard
void cpu_ppc_store_tbu (CPUPPCState *env, uint32_t value);
735 9fddaa0c bellard
void cpu_ppc_store_tbl (CPUPPCState *env, uint32_t value);
736 a062e36c j_mayer
uint32_t cpu_ppc_load_atbl (CPUPPCState *env);
737 a062e36c j_mayer
uint32_t cpu_ppc_load_atbu (CPUPPCState *env);
738 a062e36c j_mayer
void cpu_ppc_store_atbl (CPUPPCState *env, uint32_t value);
739 a062e36c j_mayer
void cpu_ppc_store_atbu (CPUPPCState *env, uint32_t value);
740 9fddaa0c bellard
uint32_t cpu_ppc_load_decr (CPUPPCState *env);
741 9fddaa0c bellard
void cpu_ppc_store_decr (CPUPPCState *env, uint32_t value);
742 58a7d328 j_mayer
#if defined(TARGET_PPC64H)
743 58a7d328 j_mayer
uint32_t cpu_ppc_load_hdecr (CPUPPCState *env);
744 58a7d328 j_mayer
void cpu_ppc_store_hdecr (CPUPPCState *env, uint32_t value);
745 58a7d328 j_mayer
uint64_t cpu_ppc_load_purr (CPUPPCState *env);
746 58a7d328 j_mayer
void cpu_ppc_store_purr (CPUPPCState *env, uint64_t value);
747 58a7d328 j_mayer
#endif
748 d9bce9d9 j_mayer
uint32_t cpu_ppc601_load_rtcl (CPUPPCState *env);
749 d9bce9d9 j_mayer
uint32_t cpu_ppc601_load_rtcu (CPUPPCState *env);
750 d9bce9d9 j_mayer
#if !defined(CONFIG_USER_ONLY)
751 d9bce9d9 j_mayer
void cpu_ppc601_store_rtcl (CPUPPCState *env, uint32_t value);
752 d9bce9d9 j_mayer
void cpu_ppc601_store_rtcu (CPUPPCState *env, uint32_t value);
753 d9bce9d9 j_mayer
target_ulong load_40x_pit (CPUPPCState *env);
754 d9bce9d9 j_mayer
void store_40x_pit (CPUPPCState *env, target_ulong val);
755 8ecc7913 j_mayer
void store_40x_dbcr0 (CPUPPCState *env, uint32_t val);
756 c294fc58 j_mayer
void store_40x_sler (CPUPPCState *env, uint32_t val);
757 d9bce9d9 j_mayer
void store_booke_tcr (CPUPPCState *env, target_ulong val);
758 d9bce9d9 j_mayer
void store_booke_tsr (CPUPPCState *env, target_ulong val);
759 0a032cbe j_mayer
void ppc_tlb_invalidate_all (CPUPPCState *env);
760 daf4f96e j_mayer
void ppc_tlb_invalidate_one (CPUPPCState *env, target_ulong addr);
761 daf4f96e j_mayer
#if defined(TARGET_PPC64)
762 daf4f96e j_mayer
void ppc_slb_invalidate_all (CPUPPCState *env);
763 daf4f96e j_mayer
void ppc_slb_invalidate_one (CPUPPCState *env, uint64_t T0);
764 daf4f96e j_mayer
#endif
765 36081602 j_mayer
int ppcemb_tlb_search (CPUPPCState *env, target_ulong address, uint32_t pid);
766 d9bce9d9 j_mayer
#endif
767 9fddaa0c bellard
#endif
768 79aceca5 bellard
769 2e719ba3 j_mayer
/* Device control registers */
770 2e719ba3 j_mayer
int ppc_dcr_read (ppc_dcr_t *dcr_env, int dcrn, target_ulong *valp);
771 2e719ba3 j_mayer
int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, target_ulong val);
772 2e719ba3 j_mayer
773 9467d44c ths
#define CPUState CPUPPCState
774 9467d44c ths
#define cpu_init cpu_ppc_init
775 9467d44c ths
#define cpu_exec cpu_ppc_exec
776 9467d44c ths
#define cpu_gen_code cpu_ppc_gen_code
777 9467d44c ths
#define cpu_signal_handler cpu_ppc_signal_handler
778 c732abe2 j_mayer
#define cpu_list ppc_cpu_list
779 9467d44c ths
780 6ebbf390 j_mayer
/* MMU modes definitions */
781 6ebbf390 j_mayer
#define MMU_MODE0_SUFFIX _user
782 6ebbf390 j_mayer
#define MMU_MODE1_SUFFIX _kernel
783 6ebbf390 j_mayer
#if defined(TARGET_PPC64H)
784 6ebbf390 j_mayer
#define MMU_MODE2_SUFFIX _hypv
785 6ebbf390 j_mayer
#endif
786 6ebbf390 j_mayer
#define MMU_USER_IDX 0
787 6ebbf390 j_mayer
static inline int cpu_mmu_index (CPUState *env)
788 6ebbf390 j_mayer
{
789 6ebbf390 j_mayer
    return env->mmu_idx;
790 6ebbf390 j_mayer
}
791 6ebbf390 j_mayer
792 79aceca5 bellard
#include "cpu-all.h"
793 79aceca5 bellard
794 3fc6c082 bellard
/*****************************************************************************/
795 3fc6c082 bellard
/* Registers definitions */
796 79aceca5 bellard
#define XER_SO 31
797 79aceca5 bellard
#define XER_OV 30
798 79aceca5 bellard
#define XER_CA 29
799 3fc6c082 bellard
#define XER_CMP 8
800 36081602 j_mayer
#define XER_BC  0
801 3fc6c082 bellard
#define xer_so  env->xer[4]
802 3fc6c082 bellard
#define xer_ov  env->xer[6]
803 3fc6c082 bellard
#define xer_ca  env->xer[2]
804 3fc6c082 bellard
#define xer_cmp env->xer[1]
805 36081602 j_mayer
#define xer_bc  env->xer[0]
806 79aceca5 bellard
807 3fc6c082 bellard
/* SPR definitions */
808 76a66253 j_mayer
#define SPR_MQ           (0x000)
809 76a66253 j_mayer
#define SPR_XER          (0x001)
810 76a66253 j_mayer
#define SPR_601_VRTCU    (0x004)
811 76a66253 j_mayer
#define SPR_601_VRTCL    (0x005)
812 76a66253 j_mayer
#define SPR_601_UDECR    (0x006)
813 76a66253 j_mayer
#define SPR_LR           (0x008)
814 76a66253 j_mayer
#define SPR_CTR          (0x009)
815 76a66253 j_mayer
#define SPR_DSISR        (0x012)
816 a750fc0b j_mayer
#define SPR_DAR          (0x013) /* DAE for PowerPC 601 */
817 76a66253 j_mayer
#define SPR_601_RTCU     (0x014)
818 76a66253 j_mayer
#define SPR_601_RTCL     (0x015)
819 76a66253 j_mayer
#define SPR_DECR         (0x016)
820 76a66253 j_mayer
#define SPR_SDR1         (0x019)
821 76a66253 j_mayer
#define SPR_SRR0         (0x01A)
822 76a66253 j_mayer
#define SPR_SRR1         (0x01B)
823 2662a059 j_mayer
#define SPR_AMR          (0x01D)
824 76a66253 j_mayer
#define SPR_BOOKE_PID    (0x030)
825 76a66253 j_mayer
#define SPR_BOOKE_DECAR  (0x036)
826 363be49c j_mayer
#define SPR_BOOKE_CSRR0  (0x03A)
827 363be49c j_mayer
#define SPR_BOOKE_CSRR1  (0x03B)
828 76a66253 j_mayer
#define SPR_BOOKE_DEAR   (0x03D)
829 76a66253 j_mayer
#define SPR_BOOKE_ESR    (0x03E)
830 363be49c j_mayer
#define SPR_BOOKE_IVPR   (0x03F)
831 76a66253 j_mayer
#define SPR_8xx_EIE      (0x050)
832 76a66253 j_mayer
#define SPR_8xx_EID      (0x051)
833 76a66253 j_mayer
#define SPR_8xx_NRE      (0x052)
834 2662a059 j_mayer
#define SPR_CTRL         (0x088)
835 76a66253 j_mayer
#define SPR_58x_CMPA     (0x090)
836 76a66253 j_mayer
#define SPR_58x_CMPB     (0x091)
837 76a66253 j_mayer
#define SPR_58x_CMPC     (0x092)
838 76a66253 j_mayer
#define SPR_58x_CMPD     (0x093)
839 76a66253 j_mayer
#define SPR_58x_ICR      (0x094)
840 76a66253 j_mayer
#define SPR_58x_DER      (0x094)
841 76a66253 j_mayer
#define SPR_58x_COUNTA   (0x096)
842 76a66253 j_mayer
#define SPR_58x_COUNTB   (0x097)
843 2662a059 j_mayer
#define SPR_UCTRL        (0x098)
844 76a66253 j_mayer
#define SPR_58x_CMPE     (0x098)
845 76a66253 j_mayer
#define SPR_58x_CMPF     (0x099)
846 76a66253 j_mayer
#define SPR_58x_CMPG     (0x09A)
847 76a66253 j_mayer
#define SPR_58x_CMPH     (0x09B)
848 76a66253 j_mayer
#define SPR_58x_LCTRL1   (0x09C)
849 76a66253 j_mayer
#define SPR_58x_LCTRL2   (0x09D)
850 76a66253 j_mayer
#define SPR_58x_ICTRL    (0x09E)
851 76a66253 j_mayer
#define SPR_58x_BAR      (0x09F)
852 76a66253 j_mayer
#define SPR_VRSAVE       (0x100)
853 76a66253 j_mayer
#define SPR_USPRG0       (0x100)
854 363be49c j_mayer
#define SPR_USPRG1       (0x101)
855 363be49c j_mayer
#define SPR_USPRG2       (0x102)
856 363be49c j_mayer
#define SPR_USPRG3       (0x103)
857 76a66253 j_mayer
#define SPR_USPRG4       (0x104)
858 76a66253 j_mayer
#define SPR_USPRG5       (0x105)
859 76a66253 j_mayer
#define SPR_USPRG6       (0x106)
860 76a66253 j_mayer
#define SPR_USPRG7       (0x107)
861 76a66253 j_mayer
#define SPR_VTBL         (0x10C)
862 76a66253 j_mayer
#define SPR_VTBU         (0x10D)
863 76a66253 j_mayer
#define SPR_SPRG0        (0x110)
864 76a66253 j_mayer
#define SPR_SPRG1        (0x111)
865 76a66253 j_mayer
#define SPR_SPRG2        (0x112)
866 76a66253 j_mayer
#define SPR_SPRG3        (0x113)
867 76a66253 j_mayer
#define SPR_SPRG4        (0x114)
868 76a66253 j_mayer
#define SPR_SCOMC        (0x114)
869 76a66253 j_mayer
#define SPR_SPRG5        (0x115)
870 76a66253 j_mayer
#define SPR_SCOMD        (0x115)
871 76a66253 j_mayer
#define SPR_SPRG6        (0x116)
872 76a66253 j_mayer
#define SPR_SPRG7        (0x117)
873 76a66253 j_mayer
#define SPR_ASR          (0x118)
874 76a66253 j_mayer
#define SPR_EAR          (0x11A)
875 76a66253 j_mayer
#define SPR_TBL          (0x11C)
876 76a66253 j_mayer
#define SPR_TBU          (0x11D)
877 2662a059 j_mayer
#define SPR_TBU40        (0x11E)
878 76a66253 j_mayer
#define SPR_SVR          (0x11E)
879 76a66253 j_mayer
#define SPR_BOOKE_PIR    (0x11E)
880 76a66253 j_mayer
#define SPR_PVR          (0x11F)
881 76a66253 j_mayer
#define SPR_HSPRG0       (0x130)
882 76a66253 j_mayer
#define SPR_BOOKE_DBSR   (0x130)
883 76a66253 j_mayer
#define SPR_HSPRG1       (0x131)
884 2662a059 j_mayer
#define SPR_HDSISR       (0x132)
885 2662a059 j_mayer
#define SPR_HDAR         (0x133)
886 76a66253 j_mayer
#define SPR_BOOKE_DBCR0  (0x134)
887 76a66253 j_mayer
#define SPR_IBCR         (0x135)
888 2662a059 j_mayer
#define SPR_PURR         (0x135)
889 76a66253 j_mayer
#define SPR_BOOKE_DBCR1  (0x135)
890 76a66253 j_mayer
#define SPR_DBCR         (0x136)
891 76a66253 j_mayer
#define SPR_HDEC         (0x136)
892 76a66253 j_mayer
#define SPR_BOOKE_DBCR2  (0x136)
893 76a66253 j_mayer
#define SPR_HIOR         (0x137)
894 76a66253 j_mayer
#define SPR_MBAR         (0x137)
895 76a66253 j_mayer
#define SPR_RMOR         (0x138)
896 76a66253 j_mayer
#define SPR_BOOKE_IAC1   (0x138)
897 76a66253 j_mayer
#define SPR_HRMOR        (0x139)
898 76a66253 j_mayer
#define SPR_BOOKE_IAC2   (0x139)
899 e1833e1f j_mayer
#define SPR_HSRR0        (0x13A)
900 76a66253 j_mayer
#define SPR_BOOKE_IAC3   (0x13A)
901 e1833e1f j_mayer
#define SPR_HSRR1        (0x13B)
902 76a66253 j_mayer
#define SPR_BOOKE_IAC4   (0x13B)
903 76a66253 j_mayer
#define SPR_LPCR         (0x13C)
904 76a66253 j_mayer
#define SPR_BOOKE_DAC1   (0x13C)
905 76a66253 j_mayer
#define SPR_LPIDR        (0x13D)
906 76a66253 j_mayer
#define SPR_DABR2        (0x13D)
907 76a66253 j_mayer
#define SPR_BOOKE_DAC2   (0x13D)
908 76a66253 j_mayer
#define SPR_BOOKE_DVC1   (0x13E)
909 76a66253 j_mayer
#define SPR_BOOKE_DVC2   (0x13F)
910 76a66253 j_mayer
#define SPR_BOOKE_TSR    (0x150)
911 76a66253 j_mayer
#define SPR_BOOKE_TCR    (0x154)
912 76a66253 j_mayer
#define SPR_BOOKE_IVOR0  (0x190)
913 76a66253 j_mayer
#define SPR_BOOKE_IVOR1  (0x191)
914 76a66253 j_mayer
#define SPR_BOOKE_IVOR2  (0x192)
915 76a66253 j_mayer
#define SPR_BOOKE_IVOR3  (0x193)
916 76a66253 j_mayer
#define SPR_BOOKE_IVOR4  (0x194)
917 76a66253 j_mayer
#define SPR_BOOKE_IVOR5  (0x195)
918 76a66253 j_mayer
#define SPR_BOOKE_IVOR6  (0x196)
919 76a66253 j_mayer
#define SPR_BOOKE_IVOR7  (0x197)
920 76a66253 j_mayer
#define SPR_BOOKE_IVOR8  (0x198)
921 76a66253 j_mayer
#define SPR_BOOKE_IVOR9  (0x199)
922 76a66253 j_mayer
#define SPR_BOOKE_IVOR10 (0x19A)
923 76a66253 j_mayer
#define SPR_BOOKE_IVOR11 (0x19B)
924 76a66253 j_mayer
#define SPR_BOOKE_IVOR12 (0x19C)
925 76a66253 j_mayer
#define SPR_BOOKE_IVOR13 (0x19D)
926 76a66253 j_mayer
#define SPR_BOOKE_IVOR14 (0x19E)
927 76a66253 j_mayer
#define SPR_BOOKE_IVOR15 (0x19F)
928 2662a059 j_mayer
#define SPR_BOOKE_SPEFSCR (0x200)
929 76a66253 j_mayer
#define SPR_E500_BBEAR   (0x201)
930 76a66253 j_mayer
#define SPR_E500_BBTAR   (0x202)
931 a062e36c j_mayer
#define SPR_ATBL         (0x20E)
932 a062e36c j_mayer
#define SPR_ATBU         (0x20F)
933 76a66253 j_mayer
#define SPR_IBAT0U       (0x210)
934 363be49c j_mayer
#define SPR_BOOKE_IVOR32 (0x210)
935 76a66253 j_mayer
#define SPR_IBAT0L       (0x211)
936 363be49c j_mayer
#define SPR_BOOKE_IVOR33 (0x211)
937 76a66253 j_mayer
#define SPR_IBAT1U       (0x212)
938 363be49c j_mayer
#define SPR_BOOKE_IVOR34 (0x212)
939 76a66253 j_mayer
#define SPR_IBAT1L       (0x213)
940 363be49c j_mayer
#define SPR_BOOKE_IVOR35 (0x213)
941 76a66253 j_mayer
#define SPR_IBAT2U       (0x214)
942 363be49c j_mayer
#define SPR_BOOKE_IVOR36 (0x214)
943 76a66253 j_mayer
#define SPR_IBAT2L       (0x215)
944 76a66253 j_mayer
#define SPR_E500_L1CFG0  (0x215)
945 363be49c j_mayer
#define SPR_BOOKE_IVOR37 (0x215)
946 76a66253 j_mayer
#define SPR_IBAT3U       (0x216)
947 76a66253 j_mayer
#define SPR_E500_L1CFG1  (0x216)
948 76a66253 j_mayer
#define SPR_IBAT3L       (0x217)
949 76a66253 j_mayer
#define SPR_DBAT0U       (0x218)
950 76a66253 j_mayer
#define SPR_DBAT0L       (0x219)
951 76a66253 j_mayer
#define SPR_DBAT1U       (0x21A)
952 76a66253 j_mayer
#define SPR_DBAT1L       (0x21B)
953 76a66253 j_mayer
#define SPR_DBAT2U       (0x21C)
954 76a66253 j_mayer
#define SPR_DBAT2L       (0x21D)
955 76a66253 j_mayer
#define SPR_DBAT3U       (0x21E)
956 76a66253 j_mayer
#define SPR_DBAT3L       (0x21F)
957 76a66253 j_mayer
#define SPR_IBAT4U       (0x230)
958 76a66253 j_mayer
#define SPR_IBAT4L       (0x231)
959 76a66253 j_mayer
#define SPR_IBAT5U       (0x232)
960 76a66253 j_mayer
#define SPR_IBAT5L       (0x233)
961 76a66253 j_mayer
#define SPR_IBAT6U       (0x234)
962 76a66253 j_mayer
#define SPR_IBAT6L       (0x235)
963 76a66253 j_mayer
#define SPR_IBAT7U       (0x236)
964 76a66253 j_mayer
#define SPR_IBAT7L       (0x237)
965 76a66253 j_mayer
#define SPR_DBAT4U       (0x238)
966 76a66253 j_mayer
#define SPR_DBAT4L       (0x239)
967 76a66253 j_mayer
#define SPR_DBAT5U       (0x23A)
968 363be49c j_mayer
#define SPR_BOOKE_MCSRR0 (0x23A)
969 76a66253 j_mayer
#define SPR_DBAT5L       (0x23B)
970 363be49c j_mayer
#define SPR_BOOKE_MCSRR1 (0x23B)
971 76a66253 j_mayer
#define SPR_DBAT6U       (0x23C)
972 363be49c j_mayer
#define SPR_BOOKE_MCSR   (0x23C)
973 76a66253 j_mayer
#define SPR_DBAT6L       (0x23D)
974 76a66253 j_mayer
#define SPR_E500_MCAR    (0x23D)
975 76a66253 j_mayer
#define SPR_DBAT7U       (0x23E)
976 363be49c j_mayer
#define SPR_BOOKE_DSRR0  (0x23E)
977 76a66253 j_mayer
#define SPR_DBAT7L       (0x23F)
978 363be49c j_mayer
#define SPR_BOOKE_DSRR1  (0x23F)
979 363be49c j_mayer
#define SPR_BOOKE_SPRG8  (0x25C)
980 363be49c j_mayer
#define SPR_BOOKE_SPRG9  (0x25D)
981 363be49c j_mayer
#define SPR_BOOKE_MAS0   (0x270)
982 363be49c j_mayer
#define SPR_BOOKE_MAS1   (0x271)
983 363be49c j_mayer
#define SPR_BOOKE_MAS2   (0x272)
984 363be49c j_mayer
#define SPR_BOOKE_MAS3   (0x273)
985 363be49c j_mayer
#define SPR_BOOKE_MAS4   (0x274)
986 363be49c j_mayer
#define SPR_BOOKE_MAS6   (0x276)
987 363be49c j_mayer
#define SPR_BOOKE_PID1   (0x279)
988 363be49c j_mayer
#define SPR_BOOKE_PID2   (0x27A)
989 363be49c j_mayer
#define SPR_BOOKE_TLB0CFG (0x2B0)
990 363be49c j_mayer
#define SPR_BOOKE_TLB1CFG (0x2B1)
991 363be49c j_mayer
#define SPR_BOOKE_TLB2CFG (0x2B2)
992 363be49c j_mayer
#define SPR_BOOKE_TLB3CFG (0x2B3)
993 363be49c j_mayer
#define SPR_BOOKE_EPR    (0x2BE)
994 2662a059 j_mayer
#define SPR_PERF0        (0x300)
995 2662a059 j_mayer
#define SPR_PERF1        (0x301)
996 2662a059 j_mayer
#define SPR_PERF2        (0x302)
997 2662a059 j_mayer
#define SPR_PERF3        (0x303)
998 2662a059 j_mayer
#define SPR_PERF4        (0x304)
999 2662a059 j_mayer
#define SPR_PERF5        (0x305)
1000 2662a059 j_mayer
#define SPR_PERF6        (0x306)
1001 2662a059 j_mayer
#define SPR_PERF7        (0x307)
1002 2662a059 j_mayer
#define SPR_PERF8        (0x308)
1003 2662a059 j_mayer
#define SPR_PERF9        (0x309)
1004 2662a059 j_mayer
#define SPR_PERFA        (0x30A)
1005 2662a059 j_mayer
#define SPR_PERFB        (0x30B)
1006 2662a059 j_mayer
#define SPR_PERFC        (0x30C)
1007 2662a059 j_mayer
#define SPR_PERFD        (0x30D)
1008 2662a059 j_mayer
#define SPR_PERFE        (0x30E)
1009 2662a059 j_mayer
#define SPR_PERFF        (0x30F)
1010 2662a059 j_mayer
#define SPR_UPERF0       (0x310)
1011 2662a059 j_mayer
#define SPR_UPERF1       (0x311)
1012 2662a059 j_mayer
#define SPR_UPERF2       (0x312)
1013 2662a059 j_mayer
#define SPR_UPERF3       (0x313)
1014 2662a059 j_mayer
#define SPR_UPERF4       (0x314)
1015 2662a059 j_mayer
#define SPR_UPERF5       (0x315)
1016 2662a059 j_mayer
#define SPR_UPERF6       (0x316)
1017 2662a059 j_mayer
#define SPR_UPERF7       (0x317)
1018 2662a059 j_mayer
#define SPR_UPERF8       (0x318)
1019 2662a059 j_mayer
#define SPR_UPERF9       (0x319)
1020 2662a059 j_mayer
#define SPR_UPERFA       (0x31A)
1021 2662a059 j_mayer
#define SPR_UPERFB       (0x31B)
1022 2662a059 j_mayer
#define SPR_UPERFC       (0x31C)
1023 2662a059 j_mayer
#define SPR_UPERFD       (0x31D)
1024 2662a059 j_mayer
#define SPR_UPERFE       (0x31E)
1025 2662a059 j_mayer
#define SPR_UPERFF       (0x31F)
1026 76a66253 j_mayer
#define SPR_440_INV0     (0x370)
1027 76a66253 j_mayer
#define SPR_440_INV1     (0x371)
1028 76a66253 j_mayer
#define SPR_440_INV2     (0x372)
1029 76a66253 j_mayer
#define SPR_440_INV3     (0x373)
1030 2662a059 j_mayer
#define SPR_440_ITV0     (0x374)
1031 2662a059 j_mayer
#define SPR_440_ITV1     (0x375)
1032 2662a059 j_mayer
#define SPR_440_ITV2     (0x376)
1033 2662a059 j_mayer
#define SPR_440_ITV3     (0x377)
1034 a750fc0b j_mayer
#define SPR_440_CCR1     (0x378)
1035 a750fc0b j_mayer
#define SPR_DCRIPR       (0x37B)
1036 2662a059 j_mayer
#define SPR_PPR          (0x380)
1037 76a66253 j_mayer
#define SPR_440_DNV0     (0x390)
1038 76a66253 j_mayer
#define SPR_440_DNV1     (0x391)
1039 76a66253 j_mayer
#define SPR_440_DNV2     (0x392)
1040 76a66253 j_mayer
#define SPR_440_DNV3     (0x393)
1041 2662a059 j_mayer
#define SPR_440_DTV0     (0x394)
1042 2662a059 j_mayer
#define SPR_440_DTV1     (0x395)
1043 2662a059 j_mayer
#define SPR_440_DTV2     (0x396)
1044 2662a059 j_mayer
#define SPR_440_DTV3     (0x397)
1045 76a66253 j_mayer
#define SPR_440_DVLIM    (0x398)
1046 76a66253 j_mayer
#define SPR_440_IVLIM    (0x399)
1047 76a66253 j_mayer
#define SPR_440_RSTCFG   (0x39B)
1048 2662a059 j_mayer
#define SPR_BOOKE_DCDBTRL (0x39C)
1049 2662a059 j_mayer
#define SPR_BOOKE_DCDBTRH (0x39D)
1050 2662a059 j_mayer
#define SPR_BOOKE_ICDBTRL (0x39E)
1051 2662a059 j_mayer
#define SPR_BOOKE_ICDBTRH (0x39F)
1052 a750fc0b j_mayer
#define SPR_UMMCR2       (0x3A0)
1053 a750fc0b j_mayer
#define SPR_UPMC5        (0x3A1)
1054 a750fc0b j_mayer
#define SPR_UPMC6        (0x3A2)
1055 a750fc0b j_mayer
#define SPR_UBAMR        (0x3A7)
1056 76a66253 j_mayer
#define SPR_UMMCR0       (0x3A8)
1057 76a66253 j_mayer
#define SPR_UPMC1        (0x3A9)
1058 76a66253 j_mayer
#define SPR_UPMC2        (0x3AA)
1059 a750fc0b j_mayer
#define SPR_USIAR        (0x3AB)
1060 76a66253 j_mayer
#define SPR_UMMCR1       (0x3AC)
1061 76a66253 j_mayer
#define SPR_UPMC3        (0x3AD)
1062 76a66253 j_mayer
#define SPR_UPMC4        (0x3AE)
1063 76a66253 j_mayer
#define SPR_USDA         (0x3AF)
1064 76a66253 j_mayer
#define SPR_40x_ZPR      (0x3B0)
1065 363be49c j_mayer
#define SPR_BOOKE_MAS7   (0x3B0)
1066 a750fc0b j_mayer
#define SPR_620_PMR0     (0x3B0)
1067 a750fc0b j_mayer
#define SPR_MMCR2        (0x3B0)
1068 a750fc0b j_mayer
#define SPR_PMC5         (0x3B1)
1069 76a66253 j_mayer
#define SPR_40x_PID      (0x3B1)
1070 a750fc0b j_mayer
#define SPR_620_PMR1     (0x3B1)
1071 a750fc0b j_mayer
#define SPR_PMC6         (0x3B2)
1072 76a66253 j_mayer
#define SPR_440_MMUCR    (0x3B2)
1073 a750fc0b j_mayer
#define SPR_620_PMR2     (0x3B2)
1074 76a66253 j_mayer
#define SPR_4xx_CCR0     (0x3B3)
1075 363be49c j_mayer
#define SPR_BOOKE_EPLC   (0x3B3)
1076 a750fc0b j_mayer
#define SPR_620_PMR3     (0x3B3)
1077 76a66253 j_mayer
#define SPR_405_IAC3     (0x3B4)
1078 363be49c j_mayer
#define SPR_BOOKE_EPSC   (0x3B4)
1079 a750fc0b j_mayer
#define SPR_620_PMR4     (0x3B4)
1080 76a66253 j_mayer
#define SPR_405_IAC4     (0x3B5)
1081 a750fc0b j_mayer
#define SPR_620_PMR5     (0x3B5)
1082 76a66253 j_mayer
#define SPR_405_DVC1     (0x3B6)
1083 a750fc0b j_mayer
#define SPR_620_PMR6     (0x3B6)
1084 76a66253 j_mayer
#define SPR_405_DVC2     (0x3B7)
1085 a750fc0b j_mayer
#define SPR_620_PMR7     (0x3B7)
1086 a750fc0b j_mayer
#define SPR_BAMR         (0x3B7)
1087 76a66253 j_mayer
#define SPR_MMCR0        (0x3B8)
1088 a750fc0b j_mayer
#define SPR_620_PMR8     (0x3B8)
1089 76a66253 j_mayer
#define SPR_PMC1         (0x3B9)
1090 76a66253 j_mayer
#define SPR_40x_SGR      (0x3B9)
1091 a750fc0b j_mayer
#define SPR_620_PMR9     (0x3B9)
1092 76a66253 j_mayer
#define SPR_PMC2         (0x3BA)
1093 76a66253 j_mayer
#define SPR_40x_DCWR     (0x3BA)
1094 a750fc0b j_mayer
#define SPR_620_PMRA     (0x3BA)
1095 a750fc0b j_mayer
#define SPR_SIAR         (0x3BB)
1096 76a66253 j_mayer
#define SPR_405_SLER     (0x3BB)
1097 a750fc0b j_mayer
#define SPR_620_PMRB     (0x3BB)
1098 76a66253 j_mayer
#define SPR_MMCR1        (0x3BC)
1099 76a66253 j_mayer
#define SPR_405_SU0R     (0x3BC)
1100 a750fc0b j_mayer
#define SPR_620_PMRC     (0x3BC)
1101 a750fc0b j_mayer
#define SPR_401_SKR      (0x3BC)
1102 76a66253 j_mayer
#define SPR_PMC3         (0x3BD)
1103 76a66253 j_mayer
#define SPR_405_DBCR1    (0x3BD)
1104 a750fc0b j_mayer
#define SPR_620_PMRD     (0x3BD)
1105 76a66253 j_mayer
#define SPR_PMC4         (0x3BE)
1106 a750fc0b j_mayer
#define SPR_620_PMRE     (0x3BE)
1107 76a66253 j_mayer
#define SPR_SDA          (0x3BF)
1108 a750fc0b j_mayer
#define SPR_620_PMRF     (0x3BF)
1109 76a66253 j_mayer
#define SPR_403_VTBL     (0x3CC)
1110 76a66253 j_mayer
#define SPR_403_VTBU     (0x3CD)
1111 76a66253 j_mayer
#define SPR_DMISS        (0x3D0)
1112 76a66253 j_mayer
#define SPR_DCMP         (0x3D1)
1113 76a66253 j_mayer
#define SPR_HASH1        (0x3D2)
1114 76a66253 j_mayer
#define SPR_HASH2        (0x3D3)
1115 2662a059 j_mayer
#define SPR_BOOKE_ICDBDR (0x3D3)
1116 a750fc0b j_mayer
#define SPR_TLBMISS      (0x3D4)
1117 76a66253 j_mayer
#define SPR_IMISS        (0x3D4)
1118 76a66253 j_mayer
#define SPR_40x_ESR      (0x3D4)
1119 a750fc0b j_mayer
#define SPR_PTEHI        (0x3D5)
1120 76a66253 j_mayer
#define SPR_ICMP         (0x3D5)
1121 76a66253 j_mayer
#define SPR_40x_DEAR     (0x3D5)
1122 a750fc0b j_mayer
#define SPR_PTELO        (0x3D6)
1123 76a66253 j_mayer
#define SPR_RPA          (0x3D6)
1124 76a66253 j_mayer
#define SPR_40x_EVPR     (0x3D6)
1125 a750fc0b j_mayer
#define SPR_L3PM         (0x3D7)
1126 76a66253 j_mayer
#define SPR_403_CDBCR    (0x3D7)
1127 a750fc0b j_mayer
#define SPR_L3OHCR       (0x3D8)
1128 76a66253 j_mayer
#define SPR_TCR          (0x3D8)
1129 76a66253 j_mayer
#define SPR_40x_TSR      (0x3D8)
1130 76a66253 j_mayer
#define SPR_IBR          (0x3DA)
1131 76a66253 j_mayer
#define SPR_40x_TCR      (0x3DA)
1132 a750fc0b j_mayer
#define SPR_ESASRR       (0x3DB)
1133 76a66253 j_mayer
#define SPR_40x_PIT      (0x3DB)
1134 76a66253 j_mayer
#define SPR_403_TBL      (0x3DC)
1135 76a66253 j_mayer
#define SPR_403_TBU      (0x3DD)
1136 76a66253 j_mayer
#define SPR_SEBR         (0x3DE)
1137 76a66253 j_mayer
#define SPR_40x_SRR2     (0x3DE)
1138 76a66253 j_mayer
#define SPR_SER          (0x3DF)
1139 76a66253 j_mayer
#define SPR_40x_SRR3     (0x3DF)
1140 a750fc0b j_mayer
#define SPR_L3ITCR0      (0x3E8)
1141 a750fc0b j_mayer
#define SPR_L3ITCR1      (0x3E9)
1142 a750fc0b j_mayer
#define SPR_L3ITCR2      (0x3EA)
1143 a750fc0b j_mayer
#define SPR_L3ITCR3      (0x3EB)
1144 76a66253 j_mayer
#define SPR_HID0         (0x3F0)
1145 76a66253 j_mayer
#define SPR_40x_DBSR     (0x3F0)
1146 76a66253 j_mayer
#define SPR_HID1         (0x3F1)
1147 76a66253 j_mayer
#define SPR_IABR         (0x3F2)
1148 76a66253 j_mayer
#define SPR_40x_DBCR0    (0x3F2)
1149 76a66253 j_mayer
#define SPR_601_HID2     (0x3F2)
1150 76a66253 j_mayer
#define SPR_E500_L1CSR0  (0x3F2)
1151 a750fc0b j_mayer
#define SPR_ICTRL        (0x3F3)
1152 76a66253 j_mayer
#define SPR_HID2         (0x3F3)
1153 76a66253 j_mayer
#define SPR_E500_L1CSR1  (0x3F3)
1154 76a66253 j_mayer
#define SPR_440_DBDR     (0x3F3)
1155 a750fc0b j_mayer
#define SPR_LDSTDB       (0x3F4)
1156 76a66253 j_mayer
#define SPR_40x_IAC1     (0x3F4)
1157 65f9ee8d j_mayer
#define SPR_MMUCSR0      (0x3F4)
1158 76a66253 j_mayer
#define SPR_DABR         (0x3F5)
1159 3fc6c082 bellard
#define DABR_MASK (~(target_ulong)0x7)
1160 76a66253 j_mayer
#define SPR_E500_BUCSR   (0x3F5)
1161 76a66253 j_mayer
#define SPR_40x_IAC2     (0x3F5)
1162 76a66253 j_mayer
#define SPR_601_HID5     (0x3F5)
1163 76a66253 j_mayer
#define SPR_40x_DAC1     (0x3F6)
1164 a750fc0b j_mayer
#define SPR_MSSCR0       (0x3F6)
1165 d63001d1 j_mayer
#define SPR_970_HID5     (0x3F6)
1166 a750fc0b j_mayer
#define SPR_MSSSR0       (0x3F7)
1167 2662a059 j_mayer
#define SPR_DABRX        (0x3F7)
1168 76a66253 j_mayer
#define SPR_40x_DAC2     (0x3F7)
1169 65f9ee8d j_mayer
#define SPR_MMUCFG       (0x3F7)
1170 a750fc0b j_mayer
#define SPR_LDSTCR       (0x3F8)
1171 a750fc0b j_mayer
#define SPR_L2PMCR       (0x3F8)
1172 76a66253 j_mayer
#define SPR_750_HID2     (0x3F8)
1173 a750fc0b j_mayer
#define SPR_620_HID8     (0x3F8)
1174 76a66253 j_mayer
#define SPR_L2CR         (0x3F9)
1175 a750fc0b j_mayer
#define SPR_620_HID9     (0x3F9)
1176 a750fc0b j_mayer
#define SPR_L3CR         (0x3FA)
1177 76a66253 j_mayer
#define SPR_IABR2        (0x3FA)
1178 76a66253 j_mayer
#define SPR_40x_DCCR     (0x3FA)
1179 76a66253 j_mayer
#define SPR_ICTC         (0x3FB)
1180 76a66253 j_mayer
#define SPR_40x_ICCR     (0x3FB)
1181 76a66253 j_mayer
#define SPR_THRM1        (0x3FC)
1182 76a66253 j_mayer
#define SPR_403_PBL1     (0x3FC)
1183 76a66253 j_mayer
#define SPR_SP           (0x3FD)
1184 76a66253 j_mayer
#define SPR_THRM2        (0x3FD)
1185 76a66253 j_mayer
#define SPR_403_PBU1     (0x3FD)
1186 a750fc0b j_mayer
#define SPR_604_HID13    (0x3FD)
1187 76a66253 j_mayer
#define SPR_LT           (0x3FE)
1188 76a66253 j_mayer
#define SPR_THRM3        (0x3FE)
1189 76a66253 j_mayer
#define SPR_FPECR        (0x3FE)
1190 76a66253 j_mayer
#define SPR_403_PBL2     (0x3FE)
1191 76a66253 j_mayer
#define SPR_PIR          (0x3FF)
1192 76a66253 j_mayer
#define SPR_403_PBU2     (0x3FF)
1193 76a66253 j_mayer
#define SPR_601_HID15    (0x3FF)
1194 a750fc0b j_mayer
#define SPR_604_HID15    (0x3FF)
1195 76a66253 j_mayer
#define SPR_E500_SVR     (0x3FF)
1196 79aceca5 bellard
1197 76a66253 j_mayer
/*****************************************************************************/
1198 9a64fbe4 bellard
/* Memory access type :
1199 9a64fbe4 bellard
 * may be needed for precise access rights control and precise exceptions.
1200 9a64fbe4 bellard
 */
1201 79aceca5 bellard
enum {
1202 9a64fbe4 bellard
    /* 1 bit to define user level / supervisor access */
1203 9a64fbe4 bellard
    ACCESS_USER  = 0x00,
1204 9a64fbe4 bellard
    ACCESS_SUPER = 0x01,
1205 9a64fbe4 bellard
    /* Type of instruction that generated the access */
1206 9a64fbe4 bellard
    ACCESS_CODE  = 0x10, /* Code fetch access                */
1207 9a64fbe4 bellard
    ACCESS_INT   = 0x20, /* Integer load/store access        */
1208 9a64fbe4 bellard
    ACCESS_FLOAT = 0x30, /* floating point load/store access */
1209 9a64fbe4 bellard
    ACCESS_RES   = 0x40, /* load/store with reservation      */
1210 9a64fbe4 bellard
    ACCESS_EXT   = 0x50, /* external access                  */
1211 9a64fbe4 bellard
    ACCESS_CACHE = 0x60, /* Cache manipulation               */
1212 9a64fbe4 bellard
};
1213 9a64fbe4 bellard
1214 47103572 j_mayer
/* Hardware interruption sources:
1215 47103572 j_mayer
 * all those exception can be raised simulteaneously
1216 47103572 j_mayer
 */
1217 e9df014c j_mayer
/* Input pins definitions */
1218 e9df014c j_mayer
enum {
1219 e9df014c j_mayer
    /* 6xx bus input pins */
1220 24be5ae3 j_mayer
    PPC6xx_INPUT_HRESET     = 0,
1221 24be5ae3 j_mayer
    PPC6xx_INPUT_SRESET     = 1,
1222 24be5ae3 j_mayer
    PPC6xx_INPUT_CKSTP_IN   = 2,
1223 24be5ae3 j_mayer
    PPC6xx_INPUT_MCP        = 3,
1224 24be5ae3 j_mayer
    PPC6xx_INPUT_SMI        = 4,
1225 24be5ae3 j_mayer
    PPC6xx_INPUT_INT        = 5,
1226 d68f1306 j_mayer
    PPC6xx_INPUT_TBEN       = 6,
1227 d68f1306 j_mayer
    PPC6xx_INPUT_WAKEUP     = 7,
1228 d68f1306 j_mayer
    PPC6xx_INPUT_NB,
1229 24be5ae3 j_mayer
};
1230 24be5ae3 j_mayer
1231 24be5ae3 j_mayer
enum {
1232 e9df014c j_mayer
    /* Embedded PowerPC input pins */
1233 24be5ae3 j_mayer
    PPCBookE_INPUT_HRESET     = 0,
1234 24be5ae3 j_mayer
    PPCBookE_INPUT_SRESET     = 1,
1235 24be5ae3 j_mayer
    PPCBookE_INPUT_CKSTP_IN   = 2,
1236 24be5ae3 j_mayer
    PPCBookE_INPUT_MCP        = 3,
1237 24be5ae3 j_mayer
    PPCBookE_INPUT_SMI        = 4,
1238 24be5ae3 j_mayer
    PPCBookE_INPUT_INT        = 5,
1239 24be5ae3 j_mayer
    PPCBookE_INPUT_CINT       = 6,
1240 d68f1306 j_mayer
    PPCBookE_INPUT_NB,
1241 24be5ae3 j_mayer
};
1242 24be5ae3 j_mayer
1243 24be5ae3 j_mayer
enum {
1244 4e290a0b j_mayer
    /* PowerPC 40x input pins */
1245 4e290a0b j_mayer
    PPC40x_INPUT_RESET_CORE = 0,
1246 4e290a0b j_mayer
    PPC40x_INPUT_RESET_CHIP = 1,
1247 4e290a0b j_mayer
    PPC40x_INPUT_RESET_SYS  = 2,
1248 4e290a0b j_mayer
    PPC40x_INPUT_CINT       = 3,
1249 4e290a0b j_mayer
    PPC40x_INPUT_INT        = 4,
1250 4e290a0b j_mayer
    PPC40x_INPUT_HALT       = 5,
1251 4e290a0b j_mayer
    PPC40x_INPUT_DEBUG      = 6,
1252 4e290a0b j_mayer
    PPC40x_INPUT_NB,
1253 e9df014c j_mayer
};
1254 e9df014c j_mayer
1255 00af685f j_mayer
#if defined(TARGET_PPC64)
1256 d0dfae6e j_mayer
enum {
1257 d0dfae6e j_mayer
    /* PowerPC 970 input pins */
1258 d0dfae6e j_mayer
    PPC970_INPUT_HRESET     = 0,
1259 d0dfae6e j_mayer
    PPC970_INPUT_SRESET     = 1,
1260 d0dfae6e j_mayer
    PPC970_INPUT_CKSTP      = 2,
1261 d0dfae6e j_mayer
    PPC970_INPUT_TBEN       = 3,
1262 d0dfae6e j_mayer
    PPC970_INPUT_MCP        = 4,
1263 d0dfae6e j_mayer
    PPC970_INPUT_INT        = 5,
1264 d0dfae6e j_mayer
    PPC970_INPUT_THINT      = 6,
1265 d0dfae6e j_mayer
};
1266 00af685f j_mayer
#endif
1267 d0dfae6e j_mayer
1268 e9df014c j_mayer
/* Hardware exceptions definitions */
1269 47103572 j_mayer
enum {
1270 e9df014c j_mayer
    /* External hardware exception sources */
1271 e1833e1f j_mayer
    PPC_INTERRUPT_RESET     = 0,  /* Reset exception                      */
1272 d68f1306 j_mayer
    PPC_INTERRUPT_WAKEUP,         /* Wakeup exception                     */
1273 d68f1306 j_mayer
    PPC_INTERRUPT_MCK,            /* Machine check exception              */
1274 d68f1306 j_mayer
    PPC_INTERRUPT_EXT,            /* External interrupt                   */
1275 d68f1306 j_mayer
    PPC_INTERRUPT_SMI,            /* System management interrupt          */
1276 d68f1306 j_mayer
    PPC_INTERRUPT_CEXT,           /* Critical external interrupt          */
1277 d68f1306 j_mayer
    PPC_INTERRUPT_DEBUG,          /* External debug exception             */
1278 d68f1306 j_mayer
    PPC_INTERRUPT_THERM,          /* Thermal exception                    */
1279 e9df014c j_mayer
    /* Internal hardware exception sources */
1280 d68f1306 j_mayer
    PPC_INTERRUPT_DECR,           /* Decrementer exception                */
1281 d68f1306 j_mayer
    PPC_INTERRUPT_HDECR,          /* Hypervisor decrementer exception     */
1282 d68f1306 j_mayer
    PPC_INTERRUPT_PIT,            /* Programmable inteval timer interrupt */
1283 d68f1306 j_mayer
    PPC_INTERRUPT_FIT,            /* Fixed interval timer interrupt       */
1284 d68f1306 j_mayer
    PPC_INTERRUPT_WDT,            /* Watchdog timer interrupt             */
1285 d68f1306 j_mayer
    PPC_INTERRUPT_CDOORBELL,      /* Critical doorbell interrupt          */
1286 d68f1306 j_mayer
    PPC_INTERRUPT_DOORBELL,       /* Doorbell interrupt                   */
1287 d68f1306 j_mayer
    PPC_INTERRUPT_PERFM,          /* Performance monitor interrupt        */
1288 47103572 j_mayer
};
1289 47103572 j_mayer
1290 9a64fbe4 bellard
/*****************************************************************************/
1291 9a64fbe4 bellard
1292 79aceca5 bellard
#endif /* !defined (__CPU_PPC_H__) */