summaryrefslogtreecommitdiffstats
path: root/private/ntos/fw/alpha/selfmap.h
blob: 50e51ddc466c2a274454cf807af150438c2f5304 (plain) (blame)
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
/*++

Copyright (c) 1990  Microsoft Corporation
Copyright (c) 1993  Digital Equipment Corporation

Module Name:

    selfmap.h

Abstract:

    This module defines various memory addresses for the ROM self-test.
    For Alpha/Jensen, most of this module is unused.

    
Author:

    Lluis Abello (lluis) 10-Jan-1991

Revision History:

    John DeRosa [DEC]	29-June-1992

    Added Alpha/Jensen modifications.
    
--*/

#ifndef _SELFMAP_
#define _SELFMAP_


//
// All of the following is unused in Alpha PCs at the moment.
//

#ifndef ALPHA

#define PROM256

#ifdef PROM64
#define ROM_SIZE 0x10000
#endif
#ifdef PROM128
#define ROM_SIZE 0x20000
#endif
#ifdef PROM256
#define ROM_SIZE 0x40000
#endif

//
// TTable points to 2Mb
//
#define TT_BASE_ADDRESS     0x200000

#define MEMTEST_SIZE                0x2000          // Size of memory tested first
#define STACK_SIZE                  0xA000          // 40Kb of stack
#define RAM_TEST_STACK_ADDRESS      0x8000BFF0      // Stack for code copied to memory

#ifdef R3000
#define INSTRUCTION_CACHE_SIZE	0x10000 	    // 64Kb of I Cache
#define DATA_CACHE_SIZE		0x10000 	    // 64Kb of D Cache
#define SIZE_OF_CACHES              0x10000             // 64Kb bigest cache.
#define ROM_TLB_ENTRIES (ROM_SIZE >> 12)
#define DEVICE_TLB_ENTRIES 16
#define FIRST_UNUSED_TLB_ENTRY ROM_TLB_ENTRIES+DEVICE_TLB_ENTRIES
#endif	// R3000

//
// Define firmware size.
// Firmware size includes code and stack.
//
// FW_TOP_ADDRESS must be a 64K aligned address.
// The upper 64Kb (0x40000 to 0x50000) are reserved for the video prom code.
//
//

#define VIDEO_PROM_SIZE 0x10000

#define FW_SIZE 	0x40000

#define FW_TOP_ADDRESS	(FW_SIZE+VIDEO_PROM_SIZE)

#define FW_PAGES    ((FW_TOP_ADDRESS) >> PAGE_SHIFT)

#define VIDEO_PROM_CODE_VIRTUAL_BASE  0x10000000     // Link address of video prom code
#define VIDEO_PROM_CODE_PHYSICAL_BASE FW_SIZE	     // phys address of video prom code
#define VIDEO_PROM_CODE_UNCACHED_BASE KSEG1_BASE+FW_SIZE	// uncached address where video prom code is copied to




//
// Address definitions for the SelftTests written in C.
// The code is copied to RAM_TEST_LINK_ADDRESS from RAM_TEST_ROM_ADDRESS
// so that it runs at the address it was linked.
//

#define RAM_TEST_DESTINATION_ADDRESS 0xA000c000      // uncached link address
#define RAM_TEST_LINK_ADDRESS        0x8000c000      // Link Address of code

//
//       FW_TOP_ADDRESS  ___________
//                      | Video rom |
//                      | code      |
//                      |___________|
//	 FW_SIZE     	|   Code    |
//                      |     &     |
//                      |   Data    |
//                      |           |
//                      |___________|
//	         	| Stack ||  |
//		        |_______\/__|
//	 MEMTEST_SIZE	|PutLed     | Memory tested from ROM
//                      |ZeroMem    |
//                      |MemoryTest |
//                   0  |___________|
//

#define LINK_ADDRESS 0xE1000000
#define RESET_VECTOR 0xBFC00000

//
// Virtual - Physiscal base address pairs
//
#define TLB_TEST_PHYS 0x0	    // To test the tlb
#define TLB_TEST_VIRT 0x20000000    //
#define RESV_VIRT     0xE4000000

//
// Entry LO - HI pairs
//
#ifdef R4000
#define PROM_HI ((PROM_VIRTUAL_BASE >> 13) << ENTRYHI_VPN2)
#define PROM_LO0  ((PROM_PHYSICAL_BASE >> 12) << ENTRYLO_PFN) + (1 << ENTRYLO_G) + (1 << ENTRYLO_V) + (2 << ENTRYLO_C)
#ifdef PROM256
#define PROM_LO1  (1 << ENTRYLO_G)
#define PROM_MASK (PAGEMASK_256KB << PAGEMASK_PAGEMASK)
#endif
#ifdef PROM128				    //
#define PROM_LO1 (((PROM_PHYSICAL_BASE+0x10000) >> 12) << ENTRYLO_PFN) + (1 << ENTRYLO_G) + \
		   (1 << ENTRYLO_V) + (2 << ENTRYLO_C)
#define PROM_MASK (PAGEMASK_64KB << PAGEMASK_PAGEMASK)
#endif
#ifdef PROM64
#define PROM_LO1 (1 << ENTRYLO_G)         // If odd page not used
#define PROM_MASK (PAGEMASK_64KB << PAGEMASK_PAGEMASK)
#endif
#define TLB_TEST_LO ((1 << ENTRYLO_G) + (1 << ENTRYLO_V) + \
		    (1 << ENTRYLO_D) + (2 << ENTRYLO_C) + TLB_TEST_PHYS)

#define TLB_TEST_HI TLB_TEST_VIRT

#define TLB_KSEG_PHYS	    0x0
#define TLB_KSEG_LO ((1 << ENTRYLO_G) + (1 << ENTRYLO_V) + \
	    (1 << ENTRYLO_D) + (3 << ENTRYLO_C) + TLB_KSEG_PHYS)
#define TLB_KSEG_VIRT	    0x10000000
#define TLB_KSEG_HI	    TLB_KSEG_VIRT
#define TLB_KSEG_MASK	    (PAGEMASK_64KB << PAGEMASK_PAGEMASK)
#endif // R4000

#ifdef R3000
//
// Entry LO - HI pairs
//
#define DIAGNOSTIC_PHYSICAL_BASE 0x8000F000

#define LED_LO ((1 << ENTRYLO_G) | (1 << ENTRYLO_V) | \
		    (1 << ENTRYLO_N) | (1 << ENTRYLO_D) | \
		    DIAGNOSTIC_PHYSICAL_BASE)
#define LED_HI DIAGNOSTIC_VIRTUAL_BASE

#define TLB_TEST_LO ((1 << ENTRYLO_G) | (1 << ENTRYLO_V) | \
		    (1 << ENTRYLO_N) | (1 << ENTRYLO_D) | \
		    TLB_TEST_PHYS)
#define TLB_TEST_HI TLB_TEST_VIRT

#define ROM_LO	  ((1 << ENTRYLO_G) | (1 << ENTRYLO_V) | \
		    (1 << ENTRYLO_N) | \
		    PROM_PHYSICAL_BASE)
#define ROM_HI PROM_VIRTUAL_BASE

#define DEVICE_LO ((1 << ENTRYLO_G) | (1 << ENTRYLO_V) | \
		    (1 << ENTRYLO_N) | (1 << ENTRYLO_D) | \
		    DEVICE_PHYSICAL_BASE)
#define DEVICE_HI   DEVICE_VIRTUAL_BASE

#define PROC_LO    ((1 << ENTRYLO_G) | (1 << ENTRYLO_V) | \
		    (1 << ENTRYLO_N) | \
		    INTERRUPT_PHYSICAL_BASE)
#define PROC_HI     INTERRUPT_VIRTUAL_BASE

#define VID_LO ((1 << ENTRYLO_G) | (1 << ENTRYLO_V) | \
		    (1 << ENTRYLO_N) | (1 << ENTRYLO_D) | \
		    VIDEO_CONTROL_PHYSICAL_BASE)
#define VID_HI	 VIDEO_CONTROL_VIRTUAL_BASE

#define VIDMEM_LO ((1 << ENTRYLO_G) | (1 << ENTRYLO_V) | \
		    (1 << ENTRYLO_N) | (1 << ENTRYLO_D) | \
		    VIDEO_MEMORY_PHYSICAL_BASE)
#define VIDMEM_HI   VIDEO_MEMORY_PHYSICAL_BASE


#define CURSOR_LO ((1 << ENTRYLO_G) | (1 << ENTRYLO_V) | \
		    (1 << ENTRYLO_N) | (1 << ENTRYLO_D) | \
		    VIDEO_CURSOR_PHYSICAL_BASE)
#define CURSOR_HI   VIDEO_CURSOR_VIRTUAL_BASE

#define RESV_LO ((1 << ENTRYLO_G) | (1 << ENTRYLO_N))
#define RESV_HI   RESV_VIRT

#endif	//R3000



#endif // ALPHA

#ifndef ALPHA

//
// Trap handling definitions.
//
#define COMMON_EXCEPTION    0
#define NMI_EXCEPTION       1
#define CACHE_EXCEPTION     2



//
//  Define offsets from Register Table.
//  Must match the definiton in monitor.h
//
#define zeroRegTable        0x0
#define atRegTable          0x4
#define v0RegTable          0x8
#define v1RegTable          0xC
#define a0RegTable          0x10
#define a1RegTable          0x14
#define a2RegTable          0x18
#define a3RegTable          0x1C
#define t0RegTable          0x20
#define t1RegTable          0x24
#define t2RegTable          0x28
#define t3RegTable          0x2C
#define t4RegTable          0x30
#define t5RegTable          0x34
#define t6RegTable          0x38
#define t7RegTable          0x3C
#define s0RegTable          0x40
#define s1RegTable          0x44
#define s2RegTable          0x48
#define s3RegTable          0x4C
#define s4RegTable          0x50
#define s5RegTable          0x54
#define s6RegTable          0x58
#define s7RegTable          0x5C
#define t8RegTable          0x60
#define t9RegTable          0x64
#define k0RegTable          0x68
#define k1RegTable          0x6C
#define gpRegTable          0x70
#define spRegTable          0x74
#define s8RegTable          0x78
#define raRegTable          0x7C
#define f0RegTable          0x80
#define f1RegTable          0x84
#define f2RegTable          0x88
#define f3RegTable          0x8C
#define f4RegTable          0x90
#define f5RegTable          0x94
#define f6RegTable          0x98
#define f7RegTable          0x9C
#define f8RegTable          0xA0
#define f9RegTable          0xA4
#define f10RegTable         0xA8
#define f11RegTable         0xAC
#define f12RegTable         0xB0
#define f13RegTable         0xB4
#define f14RegTable         0xB8
#define f15RegTable         0xBC
#define f16RegTable         0xC0
#define f17RegTable         0xC4
#define f18RegTable         0xC8
#define f19RegTable         0xCC
#define f20RegTable         0xD0
#define f21RegTable         0xD4
#define f22RegTable         0xD8
#define f23RegTable         0xDC
#define f24RegTable         0xE0
#define f25RegTable         0xE4
#define f26RegTable         0xE8
#define f27RegTable         0xEC
#define f28RegTable         0xF0
#define f29RegTable         0xF4
#define f30RegTable         0xF8
#define f31RegTable         0xFC
#define fsrRegTable         0x100
#define indexRegTable       0x104
#define randomRegTable      0x108
#define entrylo0RegTable    0x10C
#define entrylo1RegTable    0x110
#define contextRegTable     0x114
#define pagemaskRegTable    0x118
#define wiredRegTable       0x11C
#define badvaddrRegTable    0x120
#define countRegTable       0x124
#define entryhiRegTable     0x128
#define compareRegTable     0x12C
#define psrRegTable         0x130
#define causeRegTable       0x134
#define epcRegTable         0x138
#define pridRegTable        0x13C
#define configRegTable      0x140
#define lladdrRegTable      0x144
#define watchloRegTable     0x148
#define watchhiRegTable     0x14C
#define eccRegTable         0x150
#define cacheerrorRegTable  0x154
#define tagloRegTable       0x158
#define taghiRegTable       0x15C
#define errorepcRegTable    0x160
#define RegisterTableSize   0x164

//
//  Define Fw exception frame offsets.
//

#define FwFrameK1       0x4
#define FwFrameRa       0x8
#define FwFrameA0       0xC
#define FwFrameA1       0x10
#define FwFrameA2       0x14
#define FwFrameA3       0x18
#define FwFrameV0       0x1C
#define FwFrameV1       0x20
#define FwFrameT0       0x24
#define FwFrameT1       0x28
#define FwFrameT2       0x2C
#define FwFrameT3       0x30
#define FwFrameT4       0x34
#define FwFrameT5       0x38
#define FwFrameT6       0x3C
#define FwFrameT7       0x40
#define FwFrameT8       0x44
#define FwFrameT9       0x48
#define FwFrameAT       0x4C
#define FwFrameSize     0x50



#endif // ALPHA


#ifdef ALPHA

//
//  Define offsets from Register Table.
//  Must match the definiton in monitor.h
//

#define ResExceptTypeRegTable	0x0
#define ep1RegTable     	0x8
#define ep2RegTable     	0x10
#define ep3RegTable          	0x18
#define ep4RegTable          	0x20
#define ep5RegTable          	0x28
#define epsrRegTable         	0x30
#define emmcsrRegTable       	0x38
#define evaRegTable          	0x40
#define epcRegTable          	0x48
#define v0RegTable           	0x50
#define t0RegTable           	0x58
#define t1RegTable           	0x60
#define t2RegTable           	0x68
#define t3RegTable           	0x70
#define t4RegTable           	0x78
#define t5RegTable           	0x80
#define t6RegTable           	0x88
#define t7RegTable           	0x90
#define s0RegTable           	0x98
#define s1RegTable           	0xa0
#define s2RegTable           	0xa8
#define s3RegTable           	0xb0
#define s4RegTable           	0xb8
#define s5RegTable           	0xc0
#define fpRegTable           	0xc8
#define a0RegTable           	0xd0
#define a1RegTable           	0xd8
#define a2RegTable           	0xe0
#define a3RegTable           	0xe8
#define a4RegTable           	0xf0
#define a5RegTable           	0xf8
#define t8RegTable           	0x100
#define t9RegTable           	0x108
#define t10RegTable          	0x110
#define t11RegTable          	0x118
#define raRegTable           	0x120
#define t12RegTable           	0x128
#define atRegTable           	0x130
#define gpRegTable           	0x138
#define spRegTable           	0x140
#define zeroRegTable         	0x148
#define f0RegTable           	0x150
#define f1RegTable           	0x158
#define f2RegTable           	0x160
#define f3RegTable           	0x168
#define f4RegTable           	0x170
#define f5RegTable           	0x178
#define f6RegTable           	0x180
#define f7RegTable           	0x188
#define f8RegTable           	0x190
#define f9RegTable           	0x198
#define f10RegTable          	0x1a0
#define f11RegTable          	0x1a8
#define f12RegTable          	0x1b0
#define f13RegTable          	0x1b8
#define f14RegTable          	0x1c0
#define f15RegTable          	0x1c8
#define f16RegTable          	0x1d0
#define f17RegTable          	0x1d8
#define f18RegTable          	0x1e0
#define f19RegTable          	0x1e8
#define f20RegTable          	0x1f0
#define f21RegTable          	0x1f8
#define f22RegTable          	0x200
#define f23RegTable          	0x208
#define f24RegTable          	0x210
#define f25RegTable          	0x218
#define f26RegTable          	0x220
#define f27RegTable          	0x228
#define f28RegTable          	0x230
#define f29RegTable          	0x238
#define f30RegTable          	0x240
#define f31RegTable          	0x248
#define RegisterTableSize    	0x250


#endif // ALPHA

#endif  // _SELFMAP_