summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halpinna/alpha/pinnaerr.c
blob: 1e581ff82dbb9ab810dd7a780ccb9a4001af5af6 (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
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 ) );

}