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.
276 lines
4.8 KiB
276 lines
4.8 KiB
//
|
|
// No Check-in Source Code.
|
|
//
|
|
// Do not make this code available to non-Microsoft personnel
|
|
// without Intel's express permission
|
|
//
|
|
/**
|
|
*** Copyright (C) 1996-97 Intel Corporation. All rights reserved.
|
|
***
|
|
*** The information and source code contained herein is the exclusive
|
|
*** property of Intel Corporation and may not be disclosed, examined
|
|
*** or reproduced in whole or in part without explicit written authorization
|
|
*** from the company.
|
|
**/
|
|
|
|
/*++
|
|
|
|
Copyright (c) 1995 Intel Corporation
|
|
|
|
Module Name:
|
|
|
|
simfw.c
|
|
|
|
Abstract:
|
|
|
|
This module implements the routines that transfer control
|
|
from the kernel to the TAL and SAL code.
|
|
|
|
Author:
|
|
|
|
14-Apr-1995
|
|
|
|
Environment:
|
|
|
|
Kernel mode
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#include "halp.h"
|
|
#include "arc.h"
|
|
#include "arccodes.h"
|
|
|
|
|
|
VOID
|
|
HalReturnToFirmware(
|
|
IN FIRMWARE_ENTRY Routine
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Returns control to the firmware routine specified. Since the simulation
|
|
does not provide TAL and SAL support, it just stops the system.
|
|
|
|
System reboot can be done here.
|
|
|
|
Arguments:
|
|
|
|
Routine - Supplies a value indicating which firmware routine to invoke.
|
|
|
|
Return Value:
|
|
|
|
Does not return.
|
|
|
|
--*/
|
|
|
|
{
|
|
switch (Routine) {
|
|
case HalHaltRoutine:
|
|
case HalPowerDownRoutine:
|
|
case HalRestartRoutine:
|
|
case HalRebootRoutine:
|
|
SscExit(0);
|
|
break;
|
|
|
|
default:
|
|
DbgPrint("HalReturnToFirmware called\n");
|
|
DbgBreakPoint();
|
|
break;
|
|
}
|
|
}
|
|
|
|
ARC_STATUS
|
|
HalGetEnvironmentVariable (
|
|
IN PCHAR Variable,
|
|
IN USHORT Length,
|
|
OUT PCHAR Buffer
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function locates an environment variable and returns its value.
|
|
|
|
The only environment variable this implementation supports is
|
|
"LastKnownGood". The returned value is always "FALSE".
|
|
|
|
Arguments:
|
|
|
|
Variable - Supplies a pointer to a zero terminated environment variable
|
|
name.
|
|
|
|
Length - Supplies the length of the value buffer in bytes.
|
|
|
|
Buffer - Supplies a pointer to a buffer that receives the variable value.
|
|
|
|
Return Value:
|
|
|
|
ESUCCESS is returned if the enviroment variable is located. Otherwise,
|
|
ENOENT is returned.
|
|
|
|
--*/
|
|
|
|
{
|
|
if (_stricmp(Variable, "LastKnownGood") != 0) {
|
|
return ENOENT;
|
|
}
|
|
|
|
strncpy(Buffer, "FALSE", Length);
|
|
|
|
return ESUCCESS;
|
|
}
|
|
|
|
ARC_STATUS
|
|
HalSetEnvironmentVariable (
|
|
IN PCHAR Variable,
|
|
IN PCHAR Value
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function creates an environment variable with the specified value.
|
|
|
|
The only environment variable this implementation supports is
|
|
"LastKnownGood".
|
|
|
|
Arguments:
|
|
|
|
Variable - Supplies a pointer to an environment variable name.
|
|
|
|
Value - Supplies a pointer to the environment variable value.
|
|
|
|
Return Value:
|
|
|
|
ESUCCESS is returned if the environment variable is created. Otherwise,
|
|
ENOMEM is returned.
|
|
|
|
--*/
|
|
|
|
{
|
|
if (_stricmp(Variable, "LastKnownGood") != 0) {
|
|
return ENOMEM;
|
|
}
|
|
|
|
if (_stricmp(Value, "TRUE") == 0) {
|
|
return(ENOMEM);
|
|
} else if (_stricmp(Value, "FALSE") == 0) {
|
|
return ESUCCESS;
|
|
} else {
|
|
return(ENOMEM);
|
|
}
|
|
}
|
|
|
|
VOID
|
|
HalSweepIcache (
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function sweeps the entire I cache on the processor which it runs.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
VOID
|
|
HalSweepDcache (
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function sweeps the entire D cache on ths processor which it runs.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
VOID
|
|
HalSweepIcacheRange (
|
|
IN PVOID BaseAddress,
|
|
IN ULONG Length
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
This function sweeps the range of address in the I cache throughout the system.
|
|
|
|
Arguments:
|
|
BaseAddress - Supplies the starting virtual address of a range of
|
|
virtual addresses that are to be flushed from the data cache.
|
|
|
|
Length - Supplies the length of the range of virtual addresses
|
|
that are to be flushed from the data cache.
|
|
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
VOID
|
|
HalSweepDcacheRange (
|
|
IN PVOID BaseAddress,
|
|
IN ULONG Length
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
Routine Description:
|
|
This function sweeps the range of address in the I cache throughout the system.
|
|
|
|
Arguments:
|
|
BaseAddress - Supplies the starting virtual address of a range of
|
|
virtual addresses that are to be flushed from the data cache.
|
|
|
|
Length - Supplies the length of the range of virtual addresses
|
|
that are to be flushed from the data cache.
|
|
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
return;
|
|
}
|