diff options
Diffstat (limited to 'private/ntos/nthals/halxlt/alpha/alcorerr.c')
-rw-r--r-- | private/ntos/nthals/halxlt/alpha/alcorerr.c | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/private/ntos/nthals/halxlt/alpha/alcorerr.c b/private/ntos/nthals/halxlt/alpha/alcorerr.c new file mode 100644 index 000000000..dfd3bc8cf --- /dev/null +++ b/private/ntos/nthals/halxlt/alpha/alcorerr.c @@ -0,0 +1,154 @@ +/*++ + +Copyright (c) 1994 Digital Equipment Corporation + +Module Name: + + alcorerr.c + +Abstract: + + This module implements error handling (machine checks and error + interrupts) for the Alcor platform. + +Author: + + Joe Notarangelo 27-Jul-1994 + +Environment: + + Kernel mode only. + +Revision History: + +--*/ + +#include "halp.h" +#include "alcor.h" + +// +// Declare the extern variable UncorrectableError declared in +// inithal.c. +// +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 +HalpAlcorErrorInterrupt( + VOID + ) +/*++ + +Routine Description: + + This routine is the interrupt handler for an ALCOR machine check interrupt + The function calls HalpCiaReportFatalError() + +Arguments: + + None. + +Return Value: + + None. If a Fatal Error is detected the system is crashed. + +--*/ +{ + + HalAcquireDisplayOwnership(NULL); + + // + // Display the dreaded banner. + // + + HalDisplayString( "\nFatal system hardware error.\n\n" ); + + // + // If this is a CIA uncorrectable error then report the error and + // crash the system. + // + + if( HalpCiaUncorrectableError() == TRUE ){ + + HalpCiaReportFatalError(); + + KeBugCheckEx( DATA_BUS_ERROR, + 0xfacefeed, //jnfix - quick error interrupt id + 0, + 0, + (ULONG)PUncorrectableError ); + + } + + // + // It was not a CIA 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 CIA 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 Alcor is determined by the CIA. + // + + return( HalpCiaMachineCheck( ExceptionRecord, + ExceptionFrame, + TrapFrame ) ); + +} |