blob: 14eecf2d8edbe988a7b95f3a4737000d769749fd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
|
#ifndef _DOLPHIN_PPCARCH
#define _DOLPHIN_PPCARCH
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
#define CTR 9
#define XER 1
#define LR 8
#define UPMC1 937
#define UPMC2 938
#define UPMC3 941
#define UPMC4 942
#define USIA 939
#define UMMCR0 936
#define UMMCR1 940
#define HID0 1008
#define HID1 1009
#define PVR 287
#define IBAT0U 528
#define IBAT0L 529
#define IBAT1U 530
#define IBAT1L 531
#define IBAT2U 532
#define IBAT2L 533
#define IBAT3U 534
#define IBAT3L 535
#define DBAT0U 536
#define DBAT0L 537
#define DBAT1U 538
#define DBAT1L 539
#define DBAT2U 540
#define DBAT2L 541
#define DBAT3U 542
#define DBAT3L 543
#define SDR1 25
#define SPRG0 272
#define SPRG1 273
#define SPRG2 274
#define SPRG3 275
#define DAR 19
#define DSISR 18
#define SRR0 26
#define SRR1 27
#define EAR 282
#define DABR 1013
#define TBL 284
#define TBU 285
#define L2CR 1017
#define DEC 22
#define IABR 1010
#define PMC1 953
#define PMC2 954
#define PMC3 957
#define PMC4 958
#define SIA 955
#define MMCR0 952
#define MMCR1 956
#define THRM1 1020
#define THRM2 1021
#define THRM3 1022
#define ICTC 1019
#define GQR0 912
#define GQR1 913
#define GQR2 914
#define GQR3 915
#define GQR4 916
#define GQR5 917
#define GQR6 918
#define GQR7 919
#define HID2 920
#define WPAR 921
#define DMA_U 922
#define DMA_L 923
#define MSR_POW 0x00040000
#define MSR_ILE 0x00010000
#define MSR_EE 0x00008000
#define MSR_PR 0x00004000
#define MSR_FP 0x00002000
#define MSR_ME 0x00001000
#define MSR_FE0 0x00000800
#define MSR_SE 0x00000400
#define MSR_BE 0x00000200
#define MSR_FE1 0x00000100
#define MSR_IP 0x00000040
#define MSR_IR 0x00000020
#define MSR_DR 0x00000010
#define MSR_PM 0x00000004
#define MSR_RI 0x00000002
#define MSR_LE 0x00000001
#define MSR_POW_BIT 13
#define MSR_ILE_BIT 15
#define MSR_EE_BIT 16
#define MSR_PR_BIT 17
#define MSR_FP_BIT 18
#define MSR_ME_BIT 19
#define MSR_FE0_BIT 20
#define MSR_SE_BIT 21
#define MSR_BE_BIT 22
#define MSR_FE1_BIT 23
#define MSR_IP_BIT 25
#define MSR_IR_BIT 26
#define MSR_DR_BIT 27
#define MSR_PM_BIT 29
#define MSR_RI_BIT 30
#define MSR_LE_BIT 31
#define HID0_EMCP 0x80000000
#define HID0_DBP 0x40000000
#define HID0_EBA 0x20000000
#define HID0_EBD 0x10000000
#define HID0_BCLK 0x08000000
#define HID0_ECLK 0x02000000
#define HID0_PAR 0x01000000
#define HID0_DOZE 0x00800000
#define HID0_NAP 0x00400000
#define HID0_SLEEP 0x00200000
#define HID0_DPM 0x00100000
#define HID0_NHR 0x00010000
#define HID0_ICE 0x00008000
#define HID0_DCE 0x00004000
#define HID0_ILOCK 0x00002000
#define HID0_DLOCK 0x00001000
#define HID0_ICFI 0x00000800
#define HID0_DCFI 0x00000400
#define HID0_SPD 0x00000200
#define HID0_IFEM 0x00000100
#define HID0_SGE 0x00000080
#define HID0_DCFA 0x00000040
#define HID0_BTIC 0x00000020
#define HID0_ABE 0x00000008
#define HID0_BHT 0x00000004
#define HID0_NOOPTI 0x00000001
#define HID0_ICE_BIT 16
#define HID0_DCE_BIT 17
#define HID0_ILOCK_BIT 18
#define HID0_DLOCK_BIT 19
#define HID2_LSQE 0x80000000
#define HID2_WPE 0x40000000
#define HID2_PSE 0x20000000
#define HID2_LCE 0x10000000
#define HID2_DCHERR 0x00800000
#define HID2_DNCERR 0x00400000
#define HID2_DCMERR 0x00200000
#define HID2_DQOERR 0x00100000
#define HID2_DCHEE 0x00080000
#define HID2_DNCEE 0x00040000
#define HID2_DCMEE 0x00020000
#define HID2_DQOEE 0x00010000
#define HID2_DMAQL_MASK 0x0F000000
#define HID2_DMAQL_SHIFT 24
#define HID2_LSQE_BIT 0
#define HID2_WPE_BIT 1
#define HID2_PSE_BIT 2
#define HID2_LCE_BIT 3
#define HID2_DCHERR_BIT 8
#define HID2_DNCERR_BIT 9
#define HID2_DCMERR_BIT 10
#define HID2_DQOERR_BIT 11
#define HID2_DCHEE_BIT 12
#define HID2_DNCEE_BIT 13
#define HID2_DCMEE_BIT 14
#define HID2_DQOEE_BIT 15
#define GQR_LOAD_SCALE_MASK 0x3F000000
#define GQR_LOAD_TYPE_MASK 0x00070000
#define GQR_STORE_SCALE_MASK 0x00003F00
#define GQR_STORE_TYPE_MASK 0x00000007
typedef struct
{
u32 _pad0 :2;
u32 loadScale :6;
u32 _pad1 :5;
u32 loadType :3;
u32 _pad2 :2;
u32 storeScale :6;
u32 _pad3 :5;
u32 storeType :3;
} PPC_GQR_t;
typedef union
{
u32 val;
PPC_GQR_t f;
} PPC_GQR_u;
#define DMA_U_ADDR_MASK 0xFFFFFFE0
#define DMA_U_LEN_U_MASK 0x0000001F
#define DMA_L_LC_ADDR_MASK 0xFFFFFFE0
#define DMA_L_LOAD 0x00000010
#define DMA_L_STORE 0x00000000
#define DMA_L_LEN_MASK 0x0000000C
#define DMA_L_TRIGGER 0x00000002
#define DMA_L_FLUSH 0x00000001
typedef struct
{
u32 memAddr :27;
u32 dmaLenU :5;
} PPC_DMA_U_t;
typedef union
{
u32 val;
PPC_DMA_U_t f;
} PPC_DMA_U_u;
typedef struct
{
u32 lcAddr :27;
u32 dmaLd :1;
u32 dmaLenL :2;
u32 dmaTrigger :1;
u32 dmaFlush :1;
} PPC_DMA_L_t;
typedef union
{
u32 val;
PPC_DMA_L_t f;
} PPC_DMA_L_u;
#define WPAR_ADDR 0xFFFFFFE0
#define WPAR_BNE 0x00000001
#define SRR1_DMA_BIT 0x00200000
#define SRR1_L2DP_BIT 0x00100000
#define L2CR_L2E 0x80000000
#define L2CR_L2PE 0x40000000
#define L2CR_L2SIZ_256K 0x10000000
#define L2CR_L2SIZ_512K 0x20000000
#define L2CR_L2SIZ_1M 0x30000000
#define L2CR_L2CLK_1_0 0x02000000
#define L2CR_L2CLK_1_5 0x04000000
#define L2CR_L2CLK_2_0 0x08000000
#define L2CR_L2CLK_2_5 0x0A000000
#define L2CR_L2CLK_3_0 0x0C000000
#define L2CR_RAM_FLOW_THRU_BURST 0x00000000
#define L2CR_RAM_PIPELINE_BURST 0x01000000
#define L2CR_RAM_PIPELINE_LATE 0x01800000
#define L2CR_L2DO 0x00400000
#define L2CR_L2I 0x00200000
#define L2CR_L2CTL 0x00100000
#define L2CR_L2WT 0x00080000
#define L2CR_L2TS 0x00040000
#define L2CR_L2OH_0_5 0x00000000
#define L2CR_L2OH_1_0 0x00010000
#define L2CR_L2SL 0x00008000
#define L2CR_L2DF 0x00004000
#define L2CR_L2BYP 0x00002000
#define L2CR_L2CS 0x00000200
#define L2CR_L2DRO 0x00000100
#define L2CR_L2CTR_MASK 0x000000FE
#define L2CR_L2IP 0x00000001
#define MMCR0_DIS 0x80000000
#define MMCR0_DP 0x40000000
#define MMCR0_DU 0x20000000
#define MMCR0_DMS 0x10000000
#define MMCR0_DMR 0x08000000
#define MMCR0_ENINT 0x04000000
#define MMCR0_DISCOUNT 0x02000000
#define MMCR0_RTCSELECT_MASK 0x01800000
#define MMCR0_RTCSELECT_63 0x00000000
#define MMCR0_RTCSELECT_55 0x00800000
#define MMCR0_RTCSELECT_51 0x01000000
#define MMCR0_RTCSELECT_47 0x01800000
#define MMCR0_INTONBITTRANS 0x00400000
#define MMCR0_THRESHOLD_MASK 0x003F0000
#define MMCR0_THRESHOLD(n) ((n) << 16)
#define MMCR0_PMC1INTCONTROL 0x00008000
#define MMCR0_PMC2INTCONTROL 0x00004000
#define MMCR0_PMCTRIGGER 0x00002000
#define MMCR0_PMC1SELECT_MASK 0x00001FC0
#define MMCR0_PMC2SELECT_MASK 0x0000003F
#define MMCR1_PMC3SELECT_MASK 0xF8000000
#define MMCR1_PMC4SELECT_MASK 0x07C00000
#define PMC1_OV 0x80000000
#define PMC1_COUNTER 0x7FFFFFFF
#define PMC2_OV 0x80000000
#define PMC2_COUNTER 0x7FFFFFFF
#define PMC3_OV 0x80000000
#define PMC3_COUNTER 0x7FFFFFFF
#define PMC4_OV 0x80000000
#define PMC4_COUNTER 0x7FFFFFFF
#define MMCR0_PMC1_HOLD 0x00000000
#define MMCR0_PMC1_CYCLE 0x00000040
#define MMCR0_PMC1_INSTRUCTION 0x00000080
#define MMCR0_PMC1_TRANSITION 0x000000C0
#define MMCR0_PMC1_DISPATCHED 0x00000100
#define MMCR0_PMC1_EIEIO 0x00000140
#define MMCR0_PMC1_ITLB_CYCLE 0x00000180
#define MMCR0_PMC1_L2_HIT 0x000001C0
#define MMCR0_PMC1_EA 0x00000200
#define MMCR0_PMC1_IABR 0x00000240
#define MMCR0_PMC1_L1_MISS 0x00000280
#define MMCR0_PMC1_Bx_UNRESOLVED 0x000002C0
#define MMCR0_PMC1_Bx_STALL_CYCLE 0x00000300
#define MMCR0_PMC1_IC_FETCH_MISS 0x00000340
#define MMCR0_PMC2_HOLD 0x00000000
#define MMCR0_PMC2_CYCLE 0x00000001
#define MMCR0_PMC2_INSTRUCTION 0x00000002
#define MMCR0_PMC2_TRANSITION 0x00000003
#define MMCR0_PMC2_DISPATCHED 0x00000004
#define MMCR0_PMC2_IC_MISS 0x00000005
#define MMCR0_PMC2_ITLB_MISS 0x00000006
#define MMCR0_PMC2_L2_I_MISS 0x00000007
#define MMCR0_PMC2_Bx_FALL_TROUGH 0x00000008
#define MMCR0_PMC2_PR_SWITCH 0x00000009
#define MMCR0_PMC2_RESERVED_LOAD 0x0000000A
#define MMCR0_PMC2_LOAD_STORE 0x0000000B
#define MMCR0_PMC2_SNOOP 0x0000000C
#define MMCR0_PMC2_L1_CASTOUT 0x0000000D
#define MMCR0_PMC2_SYSTEM 0x0000000E
#define MMCR0_PMC2_IC_FETCH_MISS 0x0000000F
#define MMCR0_PMC2_Bx_OUT_OF_ORDER 0x00000010
#define MMCR1_PMC3_HOLD 0x00000000
#define MMCR1_PMC3_CYCLE 0x08000000
#define MMCR1_PMC3_INSTRUCTION 0x10000000
#define MMCR1_PMC3_TRANSITION 0x18000000
#define MMCR1_PMC3_DISPATCHED 0x20000000
#define MMCR1_PMC3_DC_MISS 0x28000000
#define MMCR1_PMC3_DTLB_MISS 0x30000000
#define MMCR1_PMC3_L2_D_MISS 0x38000000
#define MMCR1_PMC3_Bx_TAKEN 0x40000000
#define MMCR1_PMC3_PM_SWITCH 0x48000000
#define MMCR1_PMC3_COND_STORE 0x50000000
#define MMCR1_PMC3_FPU 0x58000000
#define MMCR1_PMC3_L2_SNOOP_CASTOUT 0x60000000
#define MMCR1_PMC3_L2_HIT 0x68000000
#define MMCR1_PMC3_L1_MISS_CYCLE 0x78000000
#define MMCR1_PMC3_Bx_SECOND 0x80000000
#define MMCR1_PMC3_BPU_LR_CR 0x88000000
#define MMCR1_PMC4_HOLD 0x00000000
#define MMCR1_PMC4_CYCLE 0x00400000
#define MMCR1_PMC4_INSTRUCTION 0x00800000
#define MMCR1_PMC4_TRANSITION 0x00C00000
#define MMCR1_PMC4_DISPATCHED 0x01000000
#define MMCR1_PMC4_L2_CASTOUT 0x01400000
#define MMCR1_PMC4_DTLB_CYCLE 0x01800000
#define MMCR1_PMC4_Bx_MISSED 0x02000000
#define MMCR1_PMC4_COND_STORE_INT 0x02800000
#define MMCR1_PMC4_SYNC 0x02C00000
#define MMCR1_PMC4_SNOOP_RETRY 0x03000000
#define MMCR1_PMC4_INTEGER 0x03400000
#define MMCR1_PMC4_BPU_THIRD 0x03800000
#define MMCR1_PMC4_DC_MISS 0x07C00000
#ifndef FPSCR_FX
#define FPSCR_FX 0x80000000
#define FPSCR_FEX 0x40000000
#define FPSCR_VX 0x20000000
#define FPSCR_OX 0x10000000
#define FPSCR_UX 0x08000000
#define FPSCR_ZX 0x04000000
#define FPSCR_XX 0x02000000
#define FPSCR_VXSNAN 0x01000000
#define FPSCR_VXISI 0x00800000
#define FPSCR_VXIDI 0x00400000
#define FPSCR_VXZDZ 0x00200000
#define FPSCR_VXIMZ 0x00100000
#define FPSCR_VXVC 0x00080000
#define FPSCR_FR 0x00040000
#define FPSCR_FI 0x00020000
#define FPSCR_VXSOFT 0x00000400
#define FPSCR_VXSQRT 0x00000200
#define FPSCR_VXCVI 0x00000100
#define FPSCR_VE 0x00000080
#define FPSCR_OE 0x00000040
#define FPSCR_UE 0x00000020
#define FPSCR_ZE 0x00000010
#define FPSCR_XE 0x00000008
#define FPSCR_NI 0x00000004
#endif
#ifndef FPSCR_FX_BIT
#define FPSCR_FX_BIT 0
#define FPSCR_FEX_BIT 1
#define FPSCR_VX_BIT 2
#define FPSCR_OX_BIT 3
#define FPSCR_UX_BIT 4
#define FPSCR_ZX_BIT 5
#define FPSCR_XX_BIT 6
#define FPSCR_VXSNAN_BIT 7
#define FPSCR_VXISI_BIT 8
#define FPSCR_VXIDI_BIT 9
#define FPSCR_VXZDZ_BIT 10
#define FPSCR_VXIMZ_BIT 11
#define FPSCR_VXVC_BIT 12
#define FPSCR_FR_BIT 13
#define FPSCR_FI_BIT 14
#define FPSCR_VXSOFT_BIT 21
#define FPSCR_VXSQRT_BIT 22
#define FPSCR_VXCVI_BIT 23
#define FPSCR_VE_BIT 24
#define FPSCR_OE_BIT 25
#define FPSCR_UE_BIT 26
#define FPSCR_ZE_BIT 27
#define FPSCR_XE_BIT 28
#define FPSCR_NI_BIT 29
#endif
u32 PPCMfmsr();
void PPCMtmsr(u32 newMSR);
u32 PPCOrMsr(u32 value);
u32 PPCMfhid0();
void PPCMthid0(u32 newHID0);
u32 PPCMfl2cr();
void PPCMtl2cr(u32 newL2cr);
void PPCMtdec(u32 newDec);
void PPCSync();
void PPCHalt();
u32 PPCMffpscr();
void PPCMtfpscr(u32 newFPSCR);
u32 PPCMfhid2();
void PPCMthid2(u32 newhid2);
u32 PPCMfwpar();
void PPCMtwpar(u32 newwpar);
void PPCEnableSpeculation();
void PPCDisableSpeculation();
void PPCSetFpIEEEMode();
void PPCSetFpNonIEEEMode();
#ifdef __cplusplus
}
#endif
#endif
|