NT4/private/ntos/nthals/halacr/mips/jxmaptb.c
2020-09-30 17:12:29 +02:00

138 lines
2.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
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;
}