Statistics
| Branch: | Revision:

root / target-ppc / cpu.h @ f8ed7070

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