138 lines
2.3 KiB
C
138 lines
2.3 KiB
C
/*++
|
||
|
||
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;
|
||
}
|