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.
154 lines
2.9 KiB
154 lines
2.9 KiB
/*++
|
|
|
|
Copyright (c) 1995 Digital Equipment Corporation
|
|
|
|
Module Name:
|
|
|
|
rawerr.c
|
|
|
|
Abstract:
|
|
|
|
This module implements error handling (machine checks and error
|
|
interrupts) for the Rawhide platform.
|
|
|
|
Author:
|
|
|
|
Eric Rehm 13-Apr-1995
|
|
|
|
Environment:
|
|
|
|
Kernel mode only.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "halp.h"
|
|
#include "rawhide.h"
|
|
|
|
//
|
|
// Declare the extern variables.
|
|
//
|
|
|
|
extern PERROR_FRAME PUncorrectableError;
|
|
|
|
//
|
|
// Function prototypes.
|
|
//
|
|
|
|
VOID
|
|
HalpSetMachineCheckEnables(
|
|
IN BOOLEAN DisableMachineChecks,
|
|
IN BOOLEAN DisableProcessorCorrectables,
|
|
IN BOOLEAN DisableSystemCorrectables
|
|
);
|
|
|
|
BOOLEAN
|
|
HalHandleNMI(
|
|
IN PKINTERRUPT Interrupt,
|
|
IN PVOID ServiceContext
|
|
);
|
|
|
|
|
|
VOID
|
|
HalpCacheErrorInterrupt(
|
|
VOID
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine is the interrupt handler for a Rawhide machine check interrupt
|
|
The function calls HalpIodReportFatalError()
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None. If a Fatal Error is detected the system is crashed.
|
|
|
|
--*/
|
|
{
|
|
MC_DEVICE_ID McDeviceId;
|
|
|
|
HalAcquireDisplayOwnership(NULL);
|
|
|
|
//
|
|
// Display the dreaded banner.
|
|
//
|
|
|
|
HalDisplayString( "\nFatal system hardware error.\n\n" );
|
|
|
|
//
|
|
// If this is a IOD uncorrectable error then report the error and
|
|
// crash the system.
|
|
//
|
|
|
|
if( HalpIodUncorrectableError( &McDeviceId ) == TRUE ){
|
|
|
|
HalpIodReportFatalError( McDeviceId);
|
|
|
|
KeBugCheckEx( DATA_BUS_ERROR,
|
|
0xfacefeed, //jnfix - quick error interrupt id
|
|
McDeviceId.all,
|
|
0,
|
|
(ULONG) PUncorrectableError );
|
|
|
|
}
|
|
|
|
//
|
|
// It was not a IOD uncorrectable error, therefore this must be an
|
|
// NMI interrupt.
|
|
//
|
|
|
|
HalHandleNMI( NULL, NULL );
|
|
|
|
return; // never
|
|
|
|
}
|
|
|
|
|
|
BOOLEAN
|
|
HalpPlatformMachineCheck(
|
|
IN PEXCEPTION_RECORD ExceptionRecord,
|
|
IN PKEXCEPTION_FRAME ExceptionFrame,
|
|
IN PKTRAP_FRAME TrapFrame
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine is given control when an hard error is acknowledged
|
|
by the IOD chipset. The routine is given the chance to
|
|
correct and dismiss the error.
|
|
|
|
Arguments:
|
|
|
|
ExceptionRecord - Supplies a pointer to the exception record generated
|
|
at the point of the exception.
|
|
|
|
ExceptionFrame - Supplies a pointer to the exception frame generated
|
|
at the point of the exception.
|
|
|
|
TrapFrame - Supplies a pointer to the trap frame generated
|
|
at the point of the exception.
|
|
|
|
Return Value:
|
|
|
|
TRUE is returned if the machine check has been handled and dismissed -
|
|
indicating that execution can continue. FALSE is return otherwise.
|
|
|
|
--*/
|
|
{
|
|
|
|
//
|
|
// All machine check handling on Rawhide is determined by the IOD.
|
|
//
|
|
|
|
return( HalpIodMachineCheck( ExceptionRecord,
|
|
ExceptionFrame,
|
|
TrapFrame ) );
|
|
|
|
}
|