summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halacr/mips/jxmaptb.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/nthals/halacr/mips/jxmaptb.c')
-rw-r--r--private/ntos/nthals/halacr/mips/jxmaptb.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/private/ntos/nthals/halacr/mips/jxmaptb.c b/private/ntos/nthals/halacr/mips/jxmaptb.c
new file mode 100644
index 000000000..2b972a02d
--- /dev/null
+++ b/private/ntos/nthals/halacr/mips/jxmaptb.c
@@ -0,0 +1,137 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ jxmaptb.c
+
+Abstract:
+
+ This module implements the mapping of fixed TB entries for a MIPS R3000
+ or R4000 Jazz system. It also sets the instruction and data cache line
+ sizes for a MIPS R3000 Jazz system.
+
+Author:
+
+ David N. Cutler (davec) 28-Apr-1991
+
+Environment:
+
+ Kernel mode
+
+Revision History:
+
+--*/
+
+#include "halp.h"
+#define HEADER_FILE
+#include "kxmips.h"
+
+//
+// Put all code for HAL initialization in the INIT section. It will be
+// deallocated by memory management when phase 1 initialization is
+// completed.
+//
+
+#if defined(ALLOC_PRAGMA)
+
+#pragma alloc_text(INIT, HalpMapFixedTbEntries)
+
+#endif
+
+BOOLEAN
+HalpMapFixedTbEntries (
+ VOID
+ )
+
+/*++
+
+Routine Description:
+
+ This routine loads the fixed TB entries that map the DMA control and
+ interrupt sources registers for a MIPS R3000 or R4000 Jazz system. It
+ also sets the instruction and data cache line sizes for a MIPS R3000
+ Jazz system.
+
+Arguments:
+
+ None.
+
+Return Value:
+
+ If the initialization is successfully completed, than a value of TRUE
+ is returned. Otherwise, a value of FALSE is returned.
+
+--*/
+
+{
+
+ ENTRYLO Pte[2];
+
+ //
+ // Map the DMA control and interrupt source register by loading fixed
+ // TB entry(s).
+ //
+
+ Pte[0].PFN = DMA_PHYSICAL_BASE >> PAGE_SHIFT;
+ Pte[0].G = 1;
+ Pte[0].V = 1;
+ Pte[0].D = 1;
+
+#if defined(R3000)
+
+ Pte[0].N = 1;
+
+#endif
+
+#if defined(R4000)
+
+ Pte[0].C = UNCACHED_POLICY;
+
+#endif
+
+ Pte[1].PFN = INTERRUPT_PHYSICAL_BASE >> PAGE_SHIFT;
+ Pte[1].G = 1;
+ Pte[1].V = 1;
+ Pte[1].D = 1;
+
+#if defined(R3000)
+
+ Pte[1].N = 1;
+
+#endif
+
+#if defined(R4000)
+
+ Pte[1].C = UNCACHED_POLICY;
+
+#endif
+
+ KeFillFixedEntryTb((PHARDWARE_PTE)&Pte[0],
+ (PVOID)DMA_VIRTUAL_BASE,
+ DMA_ENTRY);
+
+#if defined(R3000)
+
+ KeFillFixedEntryTb((PHARDWARE_PTE)&Pte[1],
+ (PVOID)INTERRUPT_VIRTUAL_BASE,
+ INTERRUPT_ENTRY);
+
+#endif
+
+ //
+ // Set the instruction and data cache line sizes.
+ //
+
+#if defined(R3000)
+
+ PCR->DcacheFillSize = 0x10;
+ PCR->DcacheAlignment = 0x10 - 1;
+ PCR->FirstLevelDcacheFillSize = 0x10;
+ PCR->FirstLevelIcacheFillSize = 0x20;
+
+#endif
+
+ return TRUE;
+}