blob: 330683011b5235f56bab172a5d74ab205c5b45b7 [file] [log] [blame]
Vishal Bhoj82c80712015-12-15 21:13:33 +05301/** @file
2 MCA/PMI/INIT Protocol as defined in PI Specification VOLUME 4.
3
4 This protocol provides services to handle Machine Checks (MCA),
5 Initialization (INIT) events, and Platform Management Interrupt (PMI) events
6 on an Intel Itanium Processor Family based system.
7
8 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
9 This program and the accompanying materials
10 are licensed and made available under the terms and conditions of the BSD License
11 which accompanies this distribution. The full text of the license may be found at
12 http://opensource.org/licenses/bsd-license.php
13
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16
17**/
18
19#ifndef __MCA_INIT_PMI_PROTOCOL_H__
20#define __MCA_INIT_PMI_PROTOCOL_H__
21
22///
23/// Global ID for the MCA/PMI/INIT Protocol.
24///
25#define EFI_SAL_MCA_INIT_PMI_PROTOCOL_GUID \
26 { 0xb60dc6e8, 0x3b6f, 0x11d5, {0xaf, 0x9, 0x0, 0xa0, 0xc9, 0x44, 0xa0, 0x5b} }
27
28
29///
30/// Declare forward reference for the Timer Architectural Protocol
31///
32typedef struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL EFI_SAL_MCA_INIT_PMI_PROTOCOL;
33
34#pragma pack(1)
35///
36/// MCA Records Structure
37///
38typedef struct {
39 UINT64 First : 1;
40 UINT64 Last : 1;
41 UINT64 EntryCount : 16;
42 UINT64 DispatchedCount : 16;
43 UINT64 Reserved : 30;
44} SAL_MCA_COUNT_STRUCTURE;
45
46#pragma pack()
47
48/**
49 Prototype of MCA handler.
50
51 @param ModuleGlobal The context of MCA Handler
52 @param ProcessorStateParameters The processor state parameters (PSP)
53 @param MinstateBase Base address of the min-state
54 @param RendezvouseStateInformation Rendezvous state information to be passed to
55 the OS on OS MCA entry
56 @param CpuIndex Index of the logical processor
57 @param McaCountStructure Pointer to the MCA records structure
58 @param CorrectedMachineCheck This flag is set to TRUE is the MCA has been
59 corrected by the handler or by a previous handler
60
61 @retval EFI_SUCCESS Handler successfully returned
62
63**/
64typedef
65EFI_STATUS
66(EFIAPI *EFI_SAL_MCA_HANDLER)(
67 IN VOID *ModuleGlobal,
68 IN UINT64 ProcessorStateParameters,
69 IN EFI_PHYSICAL_ADDRESS MinstateBase,
70 IN UINT64 RendezvouseStateInformation,
71 IN UINT64 CpuIndex,
72 IN SAL_MCA_COUNT_STRUCTURE *McaCountStructure,
73 OUT BOOLEAN *CorrectedMachineCheck
74 );
75
76/**
77 Prototype of INIT handler.
78
79 @param ModuleGlobal The context of INIT Handler
80 @param ProcessorStateParameters The processor state parameters (PSP)
81 @param MinstateBase Base address of the min-state
82 @param McaInProgress This flag indicates if an MCA is in progress
83 @param CpuIndex Index of the logical processor
84 @param McaCountStructure Pointer to the MCA records structure
85 @param DumpSwitchPressed This flag indicates the crash dump switch has been pressed
86
87 @retval EFI_SUCCESS Handler successfully returned
88
89**/
90typedef
91EFI_STATUS
92(EFIAPI *EFI_SAL_INIT_HANDLER)(
93 IN VOID *ModuleGlobal,
94 IN UINT64 ProcessorStateParameters,
95 IN EFI_PHYSICAL_ADDRESS MinstateBase,
96 IN BOOLEAN McaInProgress,
97 IN UINT64 CpuIndex,
98 IN SAL_MCA_COUNT_STRUCTURE *McaCountStructure,
99 OUT BOOLEAN *DumpSwitchPressed
100 );
101
102/**
103 Prototype of PMI handler
104
105 @param ModuleGlobal The context of PMI Handler
106 @param CpuIndex Index of the logical processor
107 @param PmiVector The PMI vector number as received from the PALE_PMI exit state (GR24)
108
109 @retval EFI_SUCCESS Handler successfully returned
110
111**/
112typedef
113EFI_STATUS
114(EFIAPI *EFI_SAL_PMI_HANDLER)(
115 IN VOID *ModuleGlobal,
116 IN UINT64 CpuIndex,
117 IN UINT64 PmiVector
118 );
119
120/**
121 Register a MCA handler with the MCA dispatcher.
122
123 @param This The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
124 @param McaHandler The MCA handler to register
125 @param ModuleGlobal The context of MCA Handler
126 @param MakeFirst This flag specifies the handler should be made first in the list
127 @param MakeLast This flag specifies the handler should be made last in the list
128
129 @retval EFI_SUCCESS MCA Handle was registered
130 @retval EFI_OUT_OF_RESOURCES No more resources to register an MCA handler
131 @retval EFI_INVALID_PARAMETER Invalid parameters were passed
132
133**/
134typedef
135EFI_STATUS
136(EFIAPI *EFI_SAL_REGISTER_MCA_HANDLER)(
137 IN EFI_SAL_MCA_INIT_PMI_PROTOCOL *This,
138 IN EFI_SAL_MCA_HANDLER McaHandler,
139 IN VOID *ModuleGlobal,
140 IN BOOLEAN MakeFirst,
141 IN BOOLEAN MakeLast
142 );
143
144/**
145 Register an INIT handler with the INIT dispatcher.
146
147 @param This The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
148 @param InitHandler The INIT handler to register
149 @param ModuleGlobal The context of INIT Handler
150 @param MakeFirst This flag specifies the handler should be made first in the list
151 @param MakeLast This flag specifies the handler should be made last in the list
152
153 @retval EFI_SUCCESS INIT Handle was registered
154 @retval EFI_OUT_OF_RESOURCES No more resources to register an INIT handler
155 @retval EFI_INVALID_PARAMETER Invalid parameters were passed
156
157**/
158typedef
159EFI_STATUS
160(EFIAPI *EFI_SAL_REGISTER_INIT_HANDLER)(
161 IN EFI_SAL_MCA_INIT_PMI_PROTOCOL *This,
162 IN EFI_SAL_INIT_HANDLER InitHandler,
163 IN VOID *ModuleGlobal,
164 IN BOOLEAN MakeFirst,
165 IN BOOLEAN MakeLast
166 );
167
168/**
169 Register a PMI handler with the PMI dispatcher.
170
171 @param This The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
172 @param PmiHandler The PMI handler to register
173 @param ModuleGlobal The context of PMI Handler
174 @param MakeFirst This flag specifies the handler should be made first in the list
175 @param MakeLast This flag specifies the handler should be made last in the list
176
177 @retval EFI_SUCCESS PMI Handle was registered
178 @retval EFI_OUT_OF_RESOURCES No more resources to register an PMI handler
179 @retval EFI_INVALID_PARAMETER Invalid parameters were passed
180
181**/
182typedef
183EFI_STATUS
184(EFIAPI *EFI_SAL_REGISTER_PMI_HANDLER)(
185 IN EFI_SAL_MCA_INIT_PMI_PROTOCOL *This,
186 IN EFI_SAL_PMI_HANDLER PmiHandler,
187 IN VOID *ModuleGlobal,
188 IN BOOLEAN MakeFirst,
189 IN BOOLEAN MakeLast
190 );
191
192///
193/// This protocol is used to register MCA, INIT and PMI handlers with their respective dispatcher
194///
195struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL {
196 EFI_SAL_REGISTER_MCA_HANDLER RegisterMcaHandler;
197 EFI_SAL_REGISTER_INIT_HANDLER RegisterInitHandler;
198 EFI_SAL_REGISTER_PMI_HANDLER RegisterPmiHandler;
199 BOOLEAN McaInProgress; ///< Whether MCA handler is in progress
200 BOOLEAN InitInProgress; ///< Whether Init handler is in progress
201 BOOLEAN PmiInProgress; ///< Whether Pmi handler is in progress
202};
203
204extern EFI_GUID gEfiSalMcaInitPmiProtocolGuid;
205
206#endif
207