/*++ 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_