summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halxlt/alpha/alcorerr.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/nthals/halxlt/alpha/alcorerr.c')
-rw-r--r--private/ntos/nthals/halxlt/alpha/alcorerr.c154
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 ) );
+
+}