blob: 8ea7d49a3d23ca79d3991740e052a5964586097e (
plain) (
tree)
|
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
selfmap.h
Abstract:
This module defines various memory addresses for the ROM self-test.
Author:
Lluis Abello (lluis) 10-Jan-1991
Revision History:
--*/
#ifndef _SELFMAP_
#define _SELFMAP_
#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
#define RAM_TEST_STACK_ADDRESS_B 0x80005FF0 // stack for processor B
#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 (0x50000 to 0x60000) are reserved for the video prom code.
// Note that the firmware size is 0x40000, it is loaded starting
// at address 0xC000, and the fonts are unpacked at 0x4C000.
//
// N.B. If any of these numbers change, adjust the are of memory zero'd by
// j4start.s.
//
#define FW_BOTTOM_ADDRESS 0xC000
#define FW_SIZE 0x40000
#define FW_FONT_SIZE (0x50000 - FW_SIZE - FW_BOTTOM_ADDRESS)
#define VIDEO_PROM_SIZE 0x10000
#define FW_TOP_ADDRESS (FW_BOTTOM_ADDRESS + FW_SIZE + FW_FONT_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_TOP_ADDRESS - VIDEO_PROM_SIZE) // phys address of video prom code
#define VIDEO_PROM_CODE_UNCACHED_BASE (KSEG1_BASE + VIDEO_PROM_CODE_PHYSICAL_BASE) // uncached address where video prom code is copied
#define FW_FONT_ADDRESS (KSEG0_BASE + FW_BOTTOM_ADDRESS + FW_SIZE)
//
// 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 |___________|
//
#ifdef DUO
#define LINK_ADDRESS 0xE1040000
#else
#define LINK_ADDRESS 0xE1000000
#endif
#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
//
// 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 // _SELFMAP_
|