diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/fw/mips/selfmap.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/fw/mips/selfmap.h')
-rw-r--r-- | private/ntos/fw/mips/selfmap.h | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/private/ntos/fw/mips/selfmap.h b/private/ntos/fw/mips/selfmap.h new file mode 100644 index 000000000..8ea7d49a3 --- /dev/null +++ b/private/ntos/fw/mips/selfmap.h @@ -0,0 +1,335 @@ +/*++ + +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_ |