Statistics
| Branch: | Revision:

root / target-ppc / cpu.h @ 082c6681

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