Statistics
| Branch: | Revision:

root / target-ppc / cpu.h @ 7863667f

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