mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
399 lines
5.4 KiB
399 lines
5.4 KiB
#pragma comment(exestr, "$Header: /usr4/winnt/SOURCES/ddk35/src/hal/halsni/mips/RCS/xxcache.c,v 1.4 1995/04/07 10:02:52 flo Exp $")
|
|
/*++
|
|
|
|
Copyright (c) 1993-94 Siemens Nixdorf Informationssysteme AG
|
|
|
|
Module Name:
|
|
|
|
xxcache.c
|
|
|
|
Abstract:
|
|
|
|
|
|
This module implements the functions necessesary to call the correct Cache routines
|
|
depending on Uni- or MultiProcessor machine typ.
|
|
|
|
Environment:
|
|
|
|
Kernel mode only.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "halp.h"
|
|
#include "mpagent.h"
|
|
|
|
HalpProcessorType HalpProcessorId = UNKNOWN;
|
|
|
|
//
|
|
// Prototypes for private functions
|
|
// they match the ones defined for the HAL ...
|
|
// they diffrentiate in ending Uni/Multi
|
|
//
|
|
|
|
VOID
|
|
HalpZeroPageOrion(
|
|
IN PVOID NewColor,
|
|
IN PVOID OldColor,
|
|
IN ULONG PageFrame
|
|
);
|
|
VOID
|
|
HalpZeroPageMulti(
|
|
IN PVOID NewColor,
|
|
IN PVOID OldColor,
|
|
IN ULONG PageFrame
|
|
);
|
|
VOID
|
|
HalpZeroPageUni(
|
|
IN PVOID NewColor,
|
|
IN PVOID OldColor,
|
|
IN ULONG PageFrame
|
|
);
|
|
VOID
|
|
HalpSweepIcacheOrion (
|
|
VOID
|
|
);
|
|
VOID
|
|
HalpSweepIcacheMulti (
|
|
VOID
|
|
);
|
|
VOID
|
|
HalpSweepIcacheUni (
|
|
VOID
|
|
);
|
|
VOID
|
|
HalpSweepDcacheOrion(
|
|
VOID
|
|
);
|
|
VOID
|
|
HalpSweepDcacheMulti(
|
|
VOID
|
|
);
|
|
VOID
|
|
HalpSweepDcacheUni(
|
|
VOID
|
|
);
|
|
VOID
|
|
HalpPurgeIcachePageOrion(
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
);
|
|
VOID
|
|
HalpPurgeIcachePageMulti(
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
);
|
|
VOID
|
|
HalpPurgeIcachePageUni(
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
);
|
|
VOID
|
|
HalpPurgeDcachePageUni (
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
);
|
|
VOID
|
|
HalpFlushDcachePageOrion(
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
);
|
|
VOID
|
|
HalpFlushDcachePageMulti(
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
);
|
|
VOID
|
|
HalpFlushDcachePageUni(
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
);
|
|
|
|
|
|
VOID
|
|
HalpProcessorConfig()
|
|
{
|
|
|
|
if (HalpOrionIdentify() == HalpR4600) {
|
|
HalpProcessorId = ORIONSC;
|
|
return;
|
|
}
|
|
|
|
if (HalpMpAgentIdentify() == TRUE) {
|
|
HalpProcessorId = MPAGENT;
|
|
return;
|
|
}
|
|
|
|
HalpProcessorId = R4x00;
|
|
|
|
return;
|
|
}
|
|
|
|
VOID
|
|
HalFlushDcachePage(
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
)
|
|
{
|
|
|
|
switch (HalpProcessorId) {
|
|
|
|
case MPAGENT:
|
|
|
|
HalpFlushDcachePageMulti(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case ORIONSC:
|
|
|
|
HalSweepDcacheRange(
|
|
Color,
|
|
Length
|
|
);
|
|
HalpFlushDcachePageOrion(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case R4x00:
|
|
|
|
HalpFlushDcachePageUni(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case UNKNOWN:
|
|
|
|
HalpProcessorConfig();
|
|
HalFlushDcachePage(Color, PageFrame, Length);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
VOID
|
|
HalPurgeDcachePage (
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
)
|
|
{
|
|
|
|
switch (HalpProcessorId) {
|
|
|
|
case MPAGENT:
|
|
|
|
HalpFlushDcachePageMulti(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case ORIONSC:
|
|
|
|
HalSweepDcacheRange(
|
|
Color,
|
|
Length
|
|
);
|
|
HalpFlushDcachePageOrion(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case R4x00:
|
|
|
|
HalpPurgeDcachePageUni(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case UNKNOWN:
|
|
|
|
HalpProcessorConfig();
|
|
HalPurgeDcachePage(Color, PageFrame, Length);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
VOID
|
|
HalPurgeIcachePage(
|
|
IN PVOID Color,
|
|
IN ULONG PageFrame,
|
|
IN ULONG Length
|
|
)
|
|
{
|
|
|
|
switch (HalpProcessorId) {
|
|
|
|
case MPAGENT:
|
|
|
|
HalpPurgeIcachePageMulti(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case ORIONSC:
|
|
|
|
HalSweepIcacheRange(
|
|
Color,
|
|
Length
|
|
);
|
|
HalpPurgeIcachePageOrion(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case R4x00:
|
|
|
|
HalpPurgeIcachePageUni(
|
|
Color,
|
|
PageFrame,
|
|
Length
|
|
);
|
|
break;
|
|
|
|
case UNKNOWN:
|
|
|
|
HalpProcessorConfig();
|
|
HalPurgeIcachePage(Color, PageFrame, Length);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
VOID
|
|
HalSweepDcache(
|
|
VOID
|
|
)
|
|
{
|
|
|
|
switch (HalpProcessorId) {
|
|
|
|
case MPAGENT:
|
|
|
|
HalpSweepDcacheMulti();
|
|
break;
|
|
|
|
case ORIONSC:
|
|
|
|
HalpSweepDcacheOrion();
|
|
break;
|
|
|
|
case R4x00:
|
|
|
|
HalpSweepDcacheUni();
|
|
break;
|
|
|
|
case UNKNOWN:
|
|
|
|
HalpProcessorConfig();
|
|
HalSweepDcache();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
VOID
|
|
HalSweepIcache (
|
|
VOID
|
|
)
|
|
{
|
|
|
|
switch (HalpProcessorId) {
|
|
|
|
case MPAGENT:
|
|
|
|
HalpSweepIcacheMulti();
|
|
break;
|
|
|
|
case ORIONSC:
|
|
|
|
HalpSweepIcacheOrion();
|
|
break;
|
|
|
|
case R4x00:
|
|
|
|
HalpSweepIcacheUni();
|
|
break;
|
|
|
|
case UNKNOWN:
|
|
|
|
HalpProcessorConfig();
|
|
HalSweepIcache();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
VOID
|
|
HalZeroPage (
|
|
IN PVOID NewColor,
|
|
IN PVOID OldColor,
|
|
IN ULONG PageFrame
|
|
)
|
|
{
|
|
|
|
switch (HalpProcessorId) {
|
|
|
|
case MPAGENT:
|
|
|
|
HalpZeroPageMulti(
|
|
NewColor,
|
|
OldColor,
|
|
PageFrame
|
|
);
|
|
break;
|
|
|
|
case ORIONSC:
|
|
|
|
HalpZeroPageOrion(
|
|
NewColor,
|
|
OldColor,
|
|
PageFrame
|
|
);
|
|
break;
|
|
|
|
case R4x00:
|
|
|
|
HalpZeroPageUni(
|
|
NewColor,
|
|
OldColor,
|
|
PageFrame
|
|
);
|
|
break;
|
|
|
|
case UNKNOWN:
|
|
|
|
HalpProcessorConfig();
|
|
HalZeroPage(NewColor, OldColor, PageFrame);
|
|
|
|
}
|
|
|
|
}
|
|
|