1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
/*++
Copyright (c) 1994 Digital Equipment Corporation
Module Name:
alcorerr.c
Abstract:
This module implements error handling (machine checks and error
interrupts) for the Mikasa EV5 (Pinnacle) platform.
Author:
Joe Notarangelo 27-Jul-1994
Environment:
Kernel mode only.
Revision History:
Scott Lee 30-Nov-1995
Adapted from Alcor module for Mikasa EV5 (Pinnacle).
--*/
#include "halp.h"
#include "mikasa.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
HalpPinnacleErrorInterrupt(
VOID
)
/*++
Routine Description:
This routine is the interrupt handler for a PINNACLE 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 ) );
}
|