blob: d305a0704586233ac037d017bb3e280e53055f6b (
plain) (
blame)
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
|
/*++
Copyright (c) 1994 Digital Equipment Corporation
Module Name:
eb164err.c
Abstract:
This module implements error handling (machine checks and error
interrupts) for the EB164 platform.
Author:
Joe Notarangelo 06-Sep-1994
Environment:
Kernel mode only.
Revision History:
--*/
#include "halp.h"
#include "eb164.h"
//
// Declare the extern variable UncorrectableError declared in
// inithal.c.
//
extern PERROR_FRAME PUncorrectableError;
VOID
HalpErrorInterrupt(
VOID
)
/*++
Routine Description:
This routine is the interrupt handler for an EB164 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" );
//
// Report the error and crash the system
//
HalpCiaReportFatalError();
KeBugCheckEx( DATA_BUS_ERROR,
0xfacefeed, //jnfix - quick error interrupt id
0,
0,
(ULONG)PUncorrectableError );
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 is determined by the CIA
//
return(HalpCiaMachineCheck( ExceptionRecord,
ExceptionFrame,
TrapFrame ));
}
|